我正在使用文件上传器插件(来自:https://github.com/valums/file-uploader)将文件上传至我的网站。
如果您使用的是现代网络浏览器(如 Firefox 6 或 Chrome 13),则它会通过在 POST 正文中流式传输文件来上传,并会显示进度条。如果您使用的是 IE(或旧版浏览器),它会回退到标准 $_FILES(使用隐藏的 iFrame)。
一切运行正常,但突然我无法在 Chrome 或 Firefox 中上传 5MB 文件。当我在 Chome 或 Firefox 中上传 5MB 文件时,我收到 500 错误,我的 PHP 代码甚至从未运行过。如果我使用 Internet Explorer(使用 $_FILES),它运行正常。
这肯定是配置问题,因为我的 PHP 代码根本就没运行过。所以我检查了我的设置。
/etc/php.ini
upload_max_filesize = 15M
post_max_size = 16M
我寻找过LimitRequestBody
,但却无处可寻(并且默认值是无限制的)。
设置看起来正确。我调试了一段时间,但还是搞不清楚哪里出了问题。
我是不是遗漏了什么设置?如果这很重要的话,服务器已经安装了 suhosin。
我知道我的 PHP 代码可以正常工作,因为小于 4MB 的文件可以正常上传(在所有浏览器上)。只有大于 5MB 的文件才会出现问题(使用 Chrome/Firefox)。奇怪的是,这在我的测试服务器上运行良好,但在生产服务器上却不行。它们可能有不同的设置(suhosin 在生产服务器上,但不在测试服务器上)。
答案1
我认为问题是这里特别是在stream_copy_to_stream () 这似乎占用了大量内存,因为(我只是假设)它会将要上传的整个文件复制到内存中。因此请检查suhosin.memory_limit以及 php.ini 中的 memory_limit
PS:我不知道这里是否应该将其作为答案或评论提交,但我会暂时将其保留为答案。