move_uploaded_file失败

时间:2010-10-04 14:09:25

标签: php image

有人可以帮我理解为什么这会返回假吗?

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

10 个答案:

答案 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)看起来像什么?
  • 源文件是否确实存在?
  • 文件上传的“错误”标志是否为零(在执行print_r时可见)
  • 目标$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

那绝对解决了我的问题。

希望有帮助。