【问题标题】:PHP uploading 0 bytes imagePHP上传0字节图像
【发布时间】:2015-05-21 09:22:13
【问题描述】:

当我使用 PHP 上传图像时,我没有收到任何错误,并且图像在服务器上是 0 字节。 考虑的事情:

  • File_uploads 在 phpinfo() 中打开
  • phpinfo() 中的 Upload_max_filesize 为 8M
  • Upload_tmp_dir 已设置并具有 777 个权限
  • 如果我运行 file_exists($_FILES['userfile']['tmp_name']),它会返回 是的
  • 如果我运行 getimagesize($_FILES['userfile']['tmp_name']),我会得到一个读取 错误通知。镜像有效,可用系统镜像打开 查看器

我正在使用一个非常简单的上传脚本进行测试:

HTML:

<form enctype="multipart/form-data" action="upload.php" method="POST">
        <input type="hidden" name="MAX_FILE_SIZE" value="512000" />
        Send this file: <input name="userfile" type="file" />
        <input type="submit" value="Send File" />
</form> 

PHP:

<?php

//$uploaddir = '/var/www/html/upload';
$uploaddir = '';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo "<p>";

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
  echo "File is valid, and was successfully uploaded.\n";
} else {
   echo "Upload failed";
}

echo "</p>";
echo '<pre>';
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";

?>

当我提交文件时,我没有收到任何错误,并且图像在目标文件夹中创建,具有正确的名称和扩展名,但正如标题所说,它是 0 字节(当然,它不能打开)。

感谢您的宝贵时间。

编辑 Sajad Karuthedath 刚刚让我看到 $_FILE['file']['size'] 的值是 0 !!文件上传不正确可能是什么问题?

编辑 2 上传 txt、pdf、tar 文件正常工作。问题仅在于图像类型文件!

【问题讨论】:

  • 没有错误,因为您没有检查它们,或者您的系统设置已启用它。 php.net/manual/en/function.error-reporting.php
  • 如果从服务器根目录运行脚本,请尝试$uploaddir = 'upload/';
  • 您好 Fred,日志中没有错误。此外,在脚本中尝试 error_reporting(E_ALL) 仍然没有显示任何内容。上传目录不是问题,因为它只设置新文件的创建位置,并且脚本在根目录或上传文件夹上正确创建文件(大小为 0 字节)。
  • 您在更改最大上传大小后是否重新启动了服务器?? @dieguit
  • 它们可能没有显示出来。试试error_reporting(E_ALL); ini_set('display_errors', 1);。也可以试试$uploadfile = $uploaddir ."/" . basename($_FILES['userfile']['name']);,但你的$uploaddir = ''; 是空的,所以这可能是一个因素。

标签: php upload


【解决方案1】:

试试这个简单的上传脚本,

您应该在保存到服务器之前检查错误

 if ( 0 < $_FILES['file']['error'] ) {
    echo 'Error: ' . $_FILES['file']['error'] . '<br>';
    }
    else {
    move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/'.$_FILES['file']['name']);
      }

注意:更改phpinfo()后不要忘记重启服务器或xampp

注意:在php中也要改post_max_size = 25M

【讨论】:

  • 您好,谢谢您的回答。文件没有错误,这是对象的转储: [userfile] => Array ( [name] => logo_pers.jpg [type] => image/jpeg [tmp_name] => /var/www/tmp/php32ogoT [error ] => 0 [大小] => 0)
【解决方案2】:

为了跟踪问题,只需添加一个“exit;”直接在“move_uploaded_file ...”命令之后,如果文件正确上传,则它是“move_upload”之后的代码,这是错误的。 在我的情况下,我在上传后使用覆盖 (w+) 选项打开上传的文件,以检查文件的锁定状态。这是一个空文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 2019-05-22
    • 2018-12-19
    • 2019-05-01
    相关资源
    最近更新 更多