PHP上传问题获取错误0但move_uploaded_file()返回false

时间:2010-07-22 04:31:03

标签: php

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);
}
?>

2 个答案:

答案 0 :(得分:9)

如果

move_uploaded_file()无法写入目标目录,它也将返回false。

我看到处理上传的大多数PHP代码都会跳过检查过程中的一些主要部分。上传代码应执行以下步骤:

  1. 检查$_FILES[]是否存在且填充了正确的条目。
  2. 查看error字段以查看它是否到达服务器 - 很多代码只检查它是否为0,这意味着它无法向用户返回任何不错的错误。
  3. 确定您需要移动文件的目的地确实存在。
  4. 调用move_uploaded_file()进行移动 - 太多只是执行文件复制,绕过move_uploaded_file()所做的安全检查。
  5. 这些是不连续的步骤:正如您似乎看到的那样,实际上传可以成功,但move_uploaded_file()可能会失败。你的问题假设如果后者失败了,前者也失败了。

    哦,是的:致电move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $destination)。使用$_FILES['uploadedfile']['name']将无效。

答案 1 :(得分:0)

我的项目中出现同样的错误,您的代码没有任何错误,但文件名中存在问题,例如我无法上传图片名称(“IMAG0889.jpg”,“I​​MAG0892.jpg”,“I​​MAG0893.jpg “等)它重命名文件后给了我错误0.(”Deep2.jpg“,”IMG_20160925_093715_1.jpg“)我成功上传了我的图像文件。因此 在重命名后尝试上传文件