在下面的代码中,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';
}
答案 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);