file_exists()无法按预期工作

时间:2015-12-22 10:39:45

标签: php file-exists

在下面的代码中,file_exists()未按预期工作。即使我正在尝试上传相同的文件,其他部分也会被执行。 (即file_exists()在每种情况下都返回false。)这种行为背后的原因是什么?     

if (isset($_FILES['file']['name']) && isset($_FILES['file']['size']) && isset($_FILES['file']['type']) && isset($_FILES['file']['tmp_name']))
{
    if (!empty($_FILES['file']['name']) && strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION))=='jpg' || strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION))=='jpeg')
    {
        if(file_exists($_FILES['file']['name']))
        {
           echo 'file exists';
        }
        else
        {
           move_uploaded_file($_FILES['file']['tmp_name'], 'Images/'.$_FILES['file']['name']);

           echo $_FILES['file']['name'].' Uploaded'.'<br>';
        }
     }
}
else{ 
     echo 'select your file';
    }

3 个答案:

答案 0 :(得分:0)

问题

使用file_exists时,只使用文件的短名称。

if(file_exists($_FILES['file']['name']))

例如,如果您上传名为test.jpg的文件,则会检查./test.jpg是否存在。

但是,当您实际移动上传的文件时,将其放在名为Images的目录中:

move_uploaded_file($_FILES['file']['tmp_name'], 'Images/'.$_FILES['file']['name']);

现在,如果您上传test.jpg,则会将其移至./Images/test.jpg,而其他代码无法找到。{/ p>

解决方案

在这两种情况下都应该使用相同的文件名。因此,只需将if调用file_exists调整为:

if(file_exists('Images/'.$_FILES['file']['name']))

此代码将文件夹名称添加到文件名中,以便检查正确的路径;上传test.jpg会导致检查文件./Images/test.jpg

答案 1 :(得分:0)

$_FILES['file']['name']是您的INPUT / POST数据,而不是您的真实文件;

您应该检查$your_dir_path_to_file . '/'.$_FILES['file']['name']

答案 2 :(得分:0)

设置默认文件系统分隔符(取决于系统):

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);

如果可以,请尝试使用绝对路径而不是相对路径,并使用“../../file.jpg”之类的名称保护系统:

defined('BASE_PATH') ? null :  define('BASE_PATH', 'C:'.DS.'www'.DS.'Images'.DS);