POST数据在大文件上传时消失

时间:2010-05-21 19:18:09

标签: php javascript html forms uploading

我的PHP应用程序中存在文件上载实用程序的问题。当在表单上发送大文件(9MB +)时,我得到了一个非常奇怪的行为:我在表单中包含的POST数据消失了,包括文件信息。

我已经增加了所有PHP限制(时间限制,最大输入时间,发布最大大小,内存限制和上传最大文件大小),但仍然无法获得正确的行为。我尝试用基于Flash的解决方案(SWFUpload,www.swfupload.org)替换常规HTTP表单,仍然是相同的行为。

我尝试过多个类似大小的文件,但绝对不是特定的文件问题。我已经调试了使用Firebug发送的POST变量,并且标题中仍然存在正确的变量以及文件。

这可能会发生什么?

4 个答案:

答案 0 :(得分:2)

也可以配置Web服务器以限制请求大小。如果您使用的是Apache,请查看LimitRequestBody指令。

答案 1 :(得分:2)

好的,我想我有解决方案。 您必须同时检查post_max_size指令和$_SERVER['CONTENT_LENGTH'],因此如果$ _SERVER ['CONTENT_LENGTH']超过post_max_size意味着他们正在尝试上传过多数据。

$POST_MAX_SIZE = ini_get('post_max_size');
$mul = substr($POST_MAX_SIZE, -1);
$mul = ($mul == 'M' ? 1048576 : ($mul == 'K' ? 1024 : ($mul == 'G' ? 1073741824 : 1)));
if( $_SERVER['CONTENT_LENGTH'] > $mul*(int)$POST_MAX_SIZE && $POST_MAX_SIZE )
{
    $error = true;
}

从此处获取解决方案:http://www.php.net/manual/en/features.file-upload.php#73762

答案 2 :(得分:1)

尝试上传1 - 2 MB的小文件。如果您仍然无法发布代码。

希望您在表单定义中添加了enctype ='/ multipart / form-data'。

答案 3 :(得分:0)

你在运行什么服务器?我认为某些服务器操作系统对它们允许的大文件数量有限制。此值可以更改。