问题描述
|
如何以理智的方式处理超过http0的http上传?
在我的配置中,“ 0”比“ 2”大几MB
我遇到的问题是:
如果用户上传的文件超过
post_max_size
_POST数组为空
_FILES数组为空,并且其中不存在任何错误代码。
没有其他信息可以通过这些方式访问哪种形式的帖子。
问题的一部分是接收脚本根据POST的内容采取不同的操作。
我确实可以访问_SERVER
变量,并且可以了解发生了什么的线索,即CONTENT_TYPE
,CONTENT_LENGTH
和REQUEST_METHOD
。但是,根据这些内容进行猜测似乎很成问题。
发现MEMORY_LIMIT(设置为相关大小的10倍)和Apaches LimitRequestBody(设置为无限制)没有问题。
就目前情况而言,我什至很难向用户提供任何有意义的消息。
有什么办法可以保留一些表格数据,以便更好地了解出了什么问题?我非常不愿意离开PHP。
解决方法
对于不需要服务器端更改的简单修复,我将使用HTML5 File API在上传之前检查文件的大小。如果超过已知限制,则取消上传。我相信这样会起作用:
function on_submit()
{
if (document.getElementById(\"upload\").files[0].size > 666)
{
alert(\"File is too big.\");
return false;
}
return true;
}
<form onsubmit=\"return on_submit()\">
<input id=\"upload\" type=\"file\" />
</form>
显然,这只是示例的框架,并非每个浏览器都支持。但是使用它并没有什么坏处,因为它的实现方式可以使其优雅地降级为老版本的浏览器。
当然,这并不能解决问题,但至少可以使您的许多用户满意,而所需的工作却很少。 (他们甚至不必等待上传失败。)
-
顺便说一句,检查ѭ9与发布和文件数据大小的关系可能有助于检测是否失败。我认为有错误时它将为非零,而$_POST
和$_FILES
都将为空。
, 根据PHP文档:
如果发布数据的大小大于post_max_size,则$ _POST和$ _FILES超全局变量为空。可以通过各种方式来跟踪,例如通过将$ _GET变量传递给处理数据的脚本,即