用php上传大文件后没有这样的文件错误

问题描述:

有一种服务用php/apache上传大文件(大于500MB)。上传进度通过uploadprogress pecl扩展进行跟踪。 此方案仅适用于小文件上传。用php上传大文件后没有这样的文件错误

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

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

主机提供商说,没有维护脚本正在删除tmp文件。另外它说,这样的tmp文件几乎直到上传结束才在文件系统中可用,然后消失。

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

OS是Ubuntu的LTS 8

任何帮助,将不胜感激!

有:

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

旁注返回是上传文件无法正常工作的一系列原因。

  • 的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']
  • Tr ying使用多部分功能来阅读非分段上传(E.摹move_uploaded_file/is_uploaded_file返回false)
  • upload_tmp_dir不可写(这是默认的Linux的/ tmp)
  • 目标不可写!is_writable($targetDir)
  • 磁盘已满(虽然这通常给UPLOAD_ERR_CANT_WRITE错误)

你检查了你的服务器LimitRequestBody参数吗?对于您要上传的文件来说可能不够高。

+0

谢谢,但它设置为0 – 2010-06-28 15:46:50

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

+0

是的,它们都是大约2GB – 2010-06-28 15:47:12

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

我假设你检查了error元素?它是一个整数,对应于upload error constants之一,例如UPLOAD_ERR_INI_SIZE。 Ubuntu的10.04什么了!

+0

谢谢。对于每个上传的文件,错误元素为0. 另外,在今天的测试之后,看起来上传的/ tmp/phpXXXX文件仍然存在于脚本的开头,但随后以奇怪的方式消失 – 2010-06-28 15:56:36