使用php上传大文件后,“没有这样的文件”错误

时间:2010-06-25 14:26:41

标签: php apache configuration upload

使用php / apache上传大文件(超过500MB)的服务。 uploadprogress pecl扩展程序会跟踪上传进度。 此方案仅适用于小文件上传。

但是,上传大文件时出现问题。上传完成后,$ _FILES数组中有一个标准信息显示没有错误。问题是此时/ tmp / phpXXXX文件本身不存在。

我测试过,如果我们在上传过程中手动删除tmp文件,上传过程将不会停止,只有在上传完成后才会引发错误。

托管提供商表示没有删除tmp文件的维护脚本。此外,它说文件系统中的这些tmp文件几乎可以在上传结束之前使用,然后它们就会消失。

可能是由apache / server / php配置引起的吗?操作系统中是否有可能影响这些tmp文件的内容?

操作系统是Ubuntu 8 LTS

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:1)

上传文件可能无法正常工作的原因有很多。

  • 的upload_max_filesize
  • post_max_size - 需要大于upload_max_filesize
    $POST_MAX_SIZE = ini_get('post_max_size');
    $unit = strtoupper(substr($POST_MAX_SIZE, -1));
    $multiplier = ($unit == 'M' ? 1048576
        : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1)));

    if (isset($_SERVER['CONTENT_LENGTH'])) {
        if ((int) $_SERVER['CONTENT_LENGTH'] > $multiplier * (int) 
          $POST_MAX_SIZE && $POST_MAX_SIZE) {
            $error = 'POST exceeded maximum allowed size.';
        }
    }
  • $_FILES['myfile']['error']> 0(见:http://php.net/manual/en/features.file-upload.errors.php
  • 文件没有名称/文件名太长(值$_FILES['myfile']['name']
  • 尝试使用多部分功能阅读非分段上传(E.G move_uploaded_file / is_uploaded_file返回false)
  • upload_tmp_dir不可写(默认情况下这是linux中的/ tmp)
  • 目的地不可写!is_writable($targetDir)
  • 磁盘已满(虽然这通常会导致UPLOAD_ERR_CANT_WRITE错误)

答案 1 :(得分:0)

您是否检查过服务器LimitRequestBody参数?对于您尝试上传的文件,它可能不够高。

答案 2 :(得分:0)

您是否验证过您的php upload_max_filesize和post_max_size设置? (在你的php.ini文件中)

答案 3 :(得分:0)

  

上传完成后,即可   $ _FILES中的标准信息   数组显示没有错误。

我假设您检查了error元素?它是一个整数,对应upload error constants之一,例如UPLOAD_ERR_INI_SIZE

据我了解,如果文件大小超过PHP UPLOAD_ERR_NO_FILE或某些Apache限制(Arkh提到post_max_size),也可以返回LimitRequestBody

备注:Ubuntu 10.04 LTS现已推出