PHP上传问题获取错误0但move_uploaded_file()返回false。当我打印$ _FILES时,我得到了
Array ( [uploadedfile] => Array ( [name] => flashlog.txt [type] =>
text/plain [tmp_name] => /tmp/php0XYQgd [error] => 0 [size] => 3334 ) )
我正在使用基本的html / php教程让我相信它可能是服务器问题。我检查php.ini并有upload_max_filesize:2M,post_max_size:8M。所以我真的很困惑,因为我认为0的错误告诉我它是成功的。
我正在使用的代码是
<?php
// Where the file is going to be placed
$target_path = 'Test/';
$target_path = $target_path. basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path))
{
echo "The file ". basename( $_FILES['uploadedfile']['name']).
" has been uploaded";
}
else
{
echo "There was an error uploading the file, please try again!";
echo print_r($_FILES);
}
?>
答案 0 :(得分:9)
move_uploaded_file()
无法写入目标目录,它也将返回false。
我看到处理上传的大多数PHP代码都会跳过检查过程中的一些主要部分。上传代码应执行以下步骤:
$_FILES[]
是否存在且填充了正确的条目。error
字段以查看它是否到达服务器 - 很多代码只检查它是否为0,这意味着它无法向用户返回任何不错的错误。move_uploaded_file()
进行移动 - 太多只是执行文件复制,绕过move_uploaded_file()
所做的安全检查。这些是不连续的步骤:正如您似乎看到的那样,实际上传可以成功,但move_uploaded_file()
可能会失败。你的问题假设如果后者失败了,前者也失败了。
哦,是的:致电move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $destination)
。使用$_FILES['uploadedfile']['name']
将无效。
答案 1 :(得分:0)
我的项目中出现同样的错误,您的代码没有任何错误,但文件名中存在问题,例如我无法上传图片名称(“IMAG0889.jpg”,“IMAG0892.jpg”,“IMAG0893.jpg “等)它重命名文件后给了我错误0.(”Deep2.jpg“,”IMG_20160925_093715_1.jpg“)我成功上传了我的图像文件。因此 在重命名后尝试上传文件 。