【问题标题】:PHP file upload error tmp_name is emptyPHP 文件上传错误 tmp_name 为空
【发布时间】:2015-08-02 05:39:27
【问题描述】:

我在上传文件时遇到了这个问题。我尝试在检查验证时上传我的 PDF 文件,TMP_NAME 为空,当我检查 $_FILES['document_attach']['error'] 时,值为 1,因此意味着存在错误。

但是当我尝试上传其他 PDF 文件时,它已成功上传。为什么其他PDF文件没有?

HTML

<form action="actions/upload_internal_audit.php" method="post" enctype="multipart/form-data">
   <label>Title</label>
   <span><input type="text" name="title" class="form-control" placeholder="Document Title"></span>  
   <label>File</label>  
   <span><input type="file" name="document_attach"></span><br>
   <span><input type="submit" name="submit" value="Upload" class="btn btn-primary"></span>
</form>

PHP

if(isset($_POST['submit'])){

$title = $_POST['title'];
$filename = $_FILES['document_attach']['name'];
$target_dir = "../eqms_files/";
$maxSize = 5000000;

if(!empty($title)){

    if(is_uploaded_file($_FILES['document_attach']['tmp_name'])){
        if ($_FILES['document_attach']['size'] > $maxSize) {
                echo "File must be: ' . $maxSize . '";
        } else {

                $result = move_uploaded_file($_FILES['document_attach']['tmp_name'], $target_dir . $filename);
                mysqli_query($con, "INSERT into internal_audit (id, title, file) VALUES ('', '".$title."', '".$filename."')");
                echo "Successfully Uploaded";
        }   
    }else
        echo "Error Uploading try again later";

}else
    echo "Document Title is empty";

}

【问题讨论】:

  • 在 apache 配置中设置的最大允许文件大小是多少
  • 如何查看尺寸?我不熟悉这个..
  • 我已经增加了 upload_max_filesize=8M 但是当我检查 phpinfo();它仍然是 2M 。如何解决?
  • 文件太大了吗?您是否尝试过不经过验证就上传文件?
  • php.net/manual/en/features.file-upload.errors.php 列出所有错误代码。 1UPLOAD_ERR_INI_SIZE:上传的文件超过了php.ini 中的upload_max_filesize 指令。您可能需要重新启动 apache 或 php-fpm 才能使用新的 php.ini 设置。

标签: php html


【解决方案1】:

我只是检查 phpinfo() 中的最大大小;

然后检查php.ini是否加载

$inipath = php_ini_loaded_file();

if ($inipath) {
    echo 'Loaded php.ini: ' . $inipath;
} else {
   echo 'A php.ini file is not loaded';
}

然后更改upload_max_filesize=2M to 8M

; Maximum allowed size for uploaded files.
upload_max_filesize = 8M 

; Must be greater than or equal to upload_max_filesize
post_max_size = 8M 

最后重置您的 Apache 服务器以应用更改

service apache2 restart

【讨论】:

  • 如果已经查看了错误代码,您还应该查看这里:php.net/manual/en/features.file-upload.errors.php。并且post_max_size 应该总是比upload_max_filesize 大一点,否则upload_max_filesize 永远不会“触发”,因为该文件包含在 POST 中,加上一些额外的元数据。
【解决方案2】:
var_dump($_FILES['file_flag']['tmp_name']); // file_flag file key 
will return empty string 
array (size=1)
  'course_video' => 
    array (size=5)
      'name' => string 'fasdfasdfasdfsd.mp4' (length=19)
      'type' => string '' (length=0)
      'tmp_name' => string '' (length=0) <===== *** this point 
      'error' => int 1
      'size' => int 0

发生这种情况是因为 WAMP 服务器不接受将这么大的大小上传到服务器上。

为避免这种情况,我们需要更改 php.ini 文件。

upload_max_filesize=100M (as per your need)
post_max_size = 100M (as per your need)

终于重启服务器

【讨论】:

  • 你怎么知道 OP 正在使用 WAMP?我在问题中没有看到任何提及。
  • 你好 OMA ,你只需要找到 php.ini 文件,无论它是 LAMP,XAMP,WAMP,你必须根据你的要求对 max_upload 和 post_max 标志进行更改
  • 是的,我知道,谢谢。我只是问,因为当 OP 没有谈论任何有关使用 WAMP 的内容时,您对 WAMP 给出了非常具体的指示。
猜你喜欢
  • 2017-09-30
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多