0

私はphpで簡単なファイルアップロード機能に取り組んでいます。

この関数を使用して、次の 3 つのファイルをアップロードしました。

そして、ここにファイルを保存しているディレクトリ構造があります:

ROOT-
    -notes-
        -demo-
             -demo_file1.jpg
        -main-
             -main_file1.jpg
        -thumb-
     -manage.php //file which handle uploading code

次のようにアップロード機能を呼び出しています。

$demo_path="notes\demo";
list($demo_file_name,$error)=upload('demo_file',$demo_path,'pdf');
if($error!=""){
    echo 'error-demo'.$error;
    exit;
}
//uploading main file
$main_path="notes\main";
list($file_name,$error)=upload('main_file',$main_path,'pdf');
if($error!=""){
    echo 'error-main'.$error;
    exit;

}

//uploadnig thumbnail
$thumb_path="notes\thumb";
list($thumb_file_name,$error)=upload('file_thumb',$thumb_path,'jpg,gif,jpeg,png');
if($error!=""){
    echo 'error-thumb'.$error;
    exit;

}

このコードは、デモ ファイルとメイン ファイルでは正常に動作しますが、親指でエラーが発生します。

error-thumb ファイル {filename} をアップロードできません: フォルダーが存在しません。

問題を解決するのを手伝ってくれませんか?

前もって感謝します。

注: $_FILES 3 つのファイルすべてを表示しています。

4

2 に答える 2

6

/ディレクトリ名を区切るには、スラッシュ ( ) を使用します。

$thumb_path='notes/thumb';

それ以外の場合\tは、二重引用符で囲まれたタブ文字として解釈されます。

于 2013-05-28T08:46:48.200 に答える
2

一般に、ファイル パスを直接定義することは悪い習慣と見なされます。パスを解析し、存在しない場合はディレクトリを作成し、ディレクトリが読み取り可能かどうかを確認する必要があります。例えば:

function get_the_directory($dir) {
    $upload_dir = trim($dir);
    if(!file_exists($upload_dir)){  // Check if the directory exists
        $new_dir = @mkdir($upload_dir); // Create it if it doesn't 
    }else{
        $new_dir = true;  // Return true if it does
    }
    if ($new_dir) {  // If above is true
        $dir_len = strlen($upload_dir);  // Get dir length
        $last_slash = substr($upload_dir,$dir_len-1,1); // Define trailing slash
        if ($last_slash <> DIRECTORY_SEPARATOR) {  // Add trailing slash if one is not present
            $upload_dir = $upload_dir . DIRECTORY_SEPARATOR;  
        } else {
            $upload_dir = $upload_dir;
        }
        $handle = @opendir($upload_dir);
        if ($handle) { //  Check if dir is readable by the PHP user
            $upload_dir = $upload_dir;
            closedir($handle);
            return $upload_dir;
        } else {
            return false;
        }
    } else {
        return false;
    }
}  

*注: * 上記のコードは要点を説明するためのものであり、コピーして貼り付けたり、運用環境で使用したりしないでください。

パスを解析し、存在するかどうかを確認し、存在しない場合は新しいディレクトリを作成し、存在しない場合は末尾にスラッシュを追加することは、サーバーの障害を完全に排除し、エラーをキャッチして false を返すためのアプローチです。開発で使用するには、関数への絶対パスを渡すだけです。

$dir = '';
if(!your_dir_function('/path/to/upload/dir/')){
    $dir = 'Sorry, directory could not be created';
}else{
    $dir = your_dir_function('/path/to/upload/dir/');
}

// Write upload logic here

echo $dir;

お役に立てれば

于 2013-05-28T09:01:10.663 に答える