大文件上传时 POST 数据消失

发布于 2024-09-02 06:48:17 字数 338 浏览 6 评论 0原文

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

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

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

这里可能发生了什么?

I'm having issues with a file uploading utility in my PHP application. When sending large files (9MB+) over the form, I get a very odd behaviour: the POST data I've included in the form dissapears, including the file information.

I've already increased all PHP limits I could (time limit, max input time, post max size, memory limit and upload max filesize) and I still can't get the proper behaviour. I've tried replacing the regular HTTP forms with a Flash-based solution (SWFUpload, www.swfupload.org), still the same behaviour.

I've tried multiple files of similar sizes and its definitely not a particular file issue. I've debugged the POST vars sent using Firebug, and the correct variables are still there in the header, together with the file.

What could be going on here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

紧拥背影 2024-09-09 06:48:17

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

Web servers can also be configured to limit request sizes. If you're using Apache, check out the LimitRequestBody directive.

不知所踪 2024-09-09 06:48:17

好吧,我想我有解决方案。
您必须检查 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/手册/en/features.file-upload.php#73762

Ok, I think I have the solution.
You must check for both post_max_size directive and $_SERVER['CONTENT_LENGTH'], so if $_SERVER['CONTENT_LENGTH'] surpasses post_max_size means that they are trying to upload too many data.

$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;
}

Solution taken from here: http://www.php.net/manual/en/features.file-upload.php#73762

倾城泪 2024-09-09 06:48:17

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

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

try uploading small files of 1 - 2 MB .if you still not able to post the code .

hope you have added enctype='/multipart/form-data' in form definition .

时常饿 2024-09-09 06:48:17

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

What server are you running on? I think some servers OS have a limit set of how large files they allow. This value can be changed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文