Php 大文件上传中的POST数据消除

Php 大文件上传中的POST数据消除,php,javascript,html,forms,uploading,Php,Javascript,Html,Forms,Uploading,我的PHP应用程序中的文件上载实用程序有问题。当通过表单发送大文件(9MB+)时,我会遇到一种非常奇怪的行为:我在表单中包含的POST数据会消失,包括文件信息 我已经增加了所有PHP限制(时间限制、最大输入时间、帖子最大大小、内存限制和上传最大文件大小),但仍然无法获得正确的行为。我曾尝试用基于Flash的解决方案(SWFUpload,www.SWFUpload.org)替换常规HTTP表单,但行为仍然相同 我尝试过多个大小相似的文件,但这绝对不是一个特殊的文件问题。我已经调试了使用Firebu

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

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

我尝试过多个大小相似的文件,但这绝对不是一个特殊的文件问题。我已经调试了使用Firebug发送的POST变量,正确的变量仍然与文件一起存在于标题中


这里可能发生了什么?

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


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

您运行的是哪台服务器?我认为一些服务器操作系统对允许的文件大小有限制。此值可以更改。

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

好的,我想我已经找到了解决方案。 您必须同时检查
post\u max\u size
指令和
$\u服务器['CONTENT\u LENGTH']
,因此,如果$\u服务器['CONTENT\u LENGTH']超过post\u max\u 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;
}

解决方案如下:

查看服务器日志如何。尝试发现任何错误/警告。我也有同样的问题。您解决问题了吗?服务器日志应该会让您有所了解。如果可以的话,还可以查看php错误日志。我查看了Apache配置,LimitRequestBody指令不在那里,所以我假设它的默认值(0或无限制)就是问题所在。除了我当时的WHM/cPanel设置使得真正更改LimitRequestBody指令非常困难之外。提高这个+post_max_大小、上载最大大小和内存限制应该可以解决问题。我尝试过更改post_max_大小、上载最大大小和内存限制,但仍然面临相同的问题。我做到了,小文件也可以。问题出现在8MB+文件上。你的类型在那里。