上传大文件时出现错误

3
这里是我的问题。我使用FineUploader为表单添加拖放支持,并使用PHP进行所有处理。当我在本地WAMP服务器上运行时,一切都正常(包括100MB+的文件)。但当我切换到生产服务器时,错误开始发生。
文件仍然可以上传,但只能到一定程度。测试50MB的文件没有问题,但尝试上传100MB的文件时会出现错误。
小文件的控制台输出如下:
[Fine Uploader 5.5.0] xhr - server response received for 0
jquery.fine-uploader.js:251 [Fine Uploader 5.5.0] responseText = {"success":true,"uuid":"2f5b7015-a573-4159-b225-8b2e006aa83b","uploadName":"PTO Request Form.pdf"}
jquery.fine-uploader.js:251 [Fine Uploader 5.5.0] Received response status 200 with body: {"success":true,"uuid":"2f5b7015-a573-4159-b225-8b2e006aa83b","uploadName":"PTO Request Form.pdf"}
jquery.fine-uploader.js:251 [Fine Uploader 5.5.0] Simple upload request succeeded for 0

来自大文件的输出:

[Fine Uploader 5.5.0] xhr - server response received for 1
jquery.fine-uploader.js:251 [Fine Uploader 5.5.0] responseText = {"error":"here: File name empty.","uploadName":null}
jquery.fine-uploader.js:251 [Fine Uploader 5.5.0] Received response status 200 with body: {"error":"File name empty.","uploadName":null}
jquery.fine-uploader.js:251 [Fine Uploader 5.5.0] Simple upload request failed for 1

我尝试通过以下方式增加/删除PHP时间限制:

ini_set('max_execution_time', 0);
ini_set('max_input_time', 0);
ini_set('upload_max_filesize', '500M');
ini_set('post_max_size', '500M');
set_time_limit(0);

但是它产生了相同的结果。我试过自己捕获Post数据并将其传递到上传函数中,但仍然导致相同的结果。

如果有人有任何见解,请向我传达。

提前致谢。

编辑:复制本地ini_set代码,省略文件大小增加部分。


请查看文档第二步:http://docs.fineuploader.com/quickstart/03-setting_up_server.html - cmorrissey
post_max_size 或者 upload_max_filesize - Mark Baker
显示处理上传的 PHP 代码。 - Marc B
编辑:我认为你们是对的。经过进一步的调查,我的PHP安装不允许我覆盖大小限制设置。我测试了一个稍低于当前限制(60M)的文件,上传成功了。那必须是问题所在。我明天会让服务器管理员更改它,并回报结果。 - Imperialized
如果您没有管理员权限而无法重新启动Apache,那很可能是问题所在。 - marklark
1个回答

0
经过进一步测试和其他提示,解决方案是增加php.ini中的post_max_size和upload_max_filesize。使用ini_set设置它们不起作用,因为需要在处理页面之前设置这些设置。
我没有直接访问权限,所以我使用htaccess来完成同样的事情。
.htaccess
php_value post_max_size 500M
php_value upload_max_filesize 500M

这解决了我的问题。


这对于旧浏览器上传来说还可以,但是对于现代浏览器,你应该使用file chunking feature - Ray Nicholus
1
你不能使用ini_set,因为文件在PHP实际开始执行之前已经被上传/拒绝;这就是为什么你必须在php.ini或htaccess中更改这些设置的原因。 - Mark Baker
1
马克,昨天一开始我没有意识到这一点,导致我经历了几个小时的煎熬和“到底是怎么回事”的时刻。@RayNicholus 我采纳了你的建议并启用了分块功能。感谢你们两位。 - Imperialized

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接