用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错误)
您是否验证过您的php upload_max_filesize和post_max_size设置? (在php.ini文件)
是的,它们都是大约2GB – 2010-06-28 15:47:12
一旦上传完成后,有 的$ _FILES 数组中显示没有错误标准的信息。
我假设你检查了error
元素?它是一个整数,对应于upload error constants之一,例如UPLOAD_ERR_INI_SIZE
。 Ubuntu的10.04什么了!
谢谢。对于每个上传的文件,错误元素为0. 另外,在今天的测试之后,看起来上传的/ tmp/phpXXXX文件仍然存在于脚本的开头,但随后以奇怪的方式消失 – 2010-06-28 15:56:36
谢谢,但它设置为0 – 2010-06-28 15:46:50