有人可以帮我理解为什么这会返回假吗?
if ((move_uploaded_file($_FILES[$field]['tmp_name'], $path))) {
如同潜在原因一样。我已检查变量是否正确,我已检查目标文件夹的权限,即777。
干杯!
对于那些想要查看var_dump($ _FILES);
的人array(1) { ["image"]=> array(5) { ["name"]=> string(14) "accountile.png"
["type"]=> string(9) "image/png" ["tmp_name"]=> string(14) "/tmp/php28IQhv"
["error"]=> int(0) ["size"]=> int(394) } }
答案 0 :(得分:22)
我检查了变量
请勿检查变量,但检查错误消息。
这是你唯一需要的东西
在代码顶部添加这些行
ini_set('display_errors',1);
error_reporting(E_ALL);
看看它说的是什么
如果move_uploaded_file失败,则始终会使用详细说明引发错误。
您不会相信它,但阅读错误消息是找到问题的方式比您之前尝试的 guesswork 更有效
我无法相信没有人提到它。
答案 1 :(得分:1)
使用move_uploaded_file
,您不需要777权限。 $path
的输出是多少?您确认$path
存在吗?您是否确认$field
存在?
$ field或$ path不存在,或者open_basedir有效是我的猜测。
是否启用了open_basedir
限制?这可能会阻止上载文件的目标被写入。在php.ini中查找open_basedir
,如果指定了路径,则启用它并且您想要查看上载文件的目标路径是否在此路径中。如果是,那就是它失败的原因。
<强>更新强>
$ path不能是网址,必须是本地路径,例如/home/user/public_html/
答案 2 :(得分:1)
您是否检查过临时上传文件夹的权限?
如果你这样做,php会告诉你什么:
var_dump($_FILES);
答案 3 :(得分:1)
不要使用
$path = "http://www.barbadostravelbuddy.co.uk/demo/images/carhire
/accountile10420103260403000000pm.png"
但
$path = "/home/sites/barbadostravelbuddy.co.uk/public_html/demo/images/carhire/
accountile10420103260403000000pm.png"
它必须是系统上的路径,而不是URL。
答案 4 :(得分:1)
您是否编辑了php.ini以确保upload_tmp_dir指向临时目录?
答案 5 :(得分:1)
LoïcFévrier,谢谢你,你为我节省了很多时间!
这是我的一部分...... 在上传过程中打印可能的错误。
首先创建目录Uploader / UploadedFiles 然后使用下面的代码...
$destination=$_SERVER[DOCUMENT_ROOT]."/Uploader/UploadedFiles/" . $_FILES["file"]["name"];
if(move_uploaded_file($_FILES["file"]["tmp_name"], $destination)){
echo ("Stored in".$_SERVER[DOCUMENT_ROOT]."/Uploader/UploadedFiles/".$_FILES["file"]["name"]);
}else{
$html_body = '<h1>File upload error!</h1>';
switch ($_FILES[0]['error']) {
case 1:
$html_body .= 'The file is bigger than this PHP installation allows';
break;
case 2:
$html_body .= 'The file is bigger than this form allows';
break;
case 3:
$html_body .= 'Only part of the file was uploaded';
break;
case 4:
$html_body .= 'No file was uploaded';
break;
default:
$html_body .= 'unknown errror';
}
echo ($html_body);
}
答案 6 :(得分:0)
基本调试步骤:
print_r($_FILES)
看起来像什么? $path
是什么样的? 我的猜测是$path
只是文件夹的路径,而不是完整的文件名。
更新:您需要将文件系统路径指定为$ path。
答案 7 :(得分:0)
$path
必须是文件名,而不是目录的路径。
答案 8 :(得分:0)
检查:
enctype="multipart/form-data"
在表单内部,没有文件上传根本不起作用。
答案 9 :(得分:0)
我遇到了同样的问题。
如果您的错误显示“无法打开流:权限被拒绝” ,则表明 PHP服务器无法在目标目录中创建新文件。 / p>
一旦您在目录上设置了Linux权限(听起来像是将其设为777一样),则应将该特殊权限授予PHP Server。
如果您的文件夹名为“ uploads”,则应该cd到上一个目录并使用下一个命令:
chcon -R -t httpd_sys_rw_content_t uploads
那绝对解决了我的问题。
希望有帮助。