PHP file_exist无法正常工作?

时间:2013-05-28 08:12:34

标签: php file-upload file-exists

我正在开发一个简单的文件上传功能。

我使用This函数上传了三个文件:

这是我存储文件的目录结构:

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显示所有三个文件。

2 个答案:

答案 0 :(得分:6)

使用正斜杠(/)分隔目录名称:

$thumb_path='notes/thumb';

否则\t被解释为双引号中的制表符。

答案 1 :(得分: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;

希望这有帮助