php – 如何检测用户是否上传了大于post_max_size的文件?
作者:互联网
我该如何以理智的方式处理超过post_max_size的http上传?
在我的配置中,post_max_size比upload_max_filesize大几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>
显然它只是一个例子的骨架,并不是每个浏览器都支持这个.但是使用它并没有什么坏处,因为它可以以这样一种方式实现,即它可以优雅地降级为旧浏览器.
当然,这并不能解决问题,但它至少可以让您的用户满意,并且只需要很少的工作量. (他们甚至不必等待上传失败.)
–
顺便说一句,检查$_SERVER [‘CONTENT_LENGTH’]与帖子和文件数据的大小可能有助于检测是否有失败.我认为当出现错误时它将不为零,而$_POST和$_FILES都是空的.
标签:php-5-3,php,file-upload 来源: https://codeday.me/bug/20190927/1824372.html