本文介绍了在客户端检测文件上传大小?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用PHP进行文件上传。在中,它显示了一个使用示例一个 MAX_FILE_SIZE
隐藏字段,表示它会在客户端(即浏览器)检测文件是否过大。 我刚刚在Firefox,Chrome和IE中尝试过这个例子,但它不起作用。该文件总是上传,即使它大于指定的隐藏字段。
顺便说一句,如果文件大于 MAX_FILE_SIZE
code>然后调用 move_uploaded_file
不起作用,所以看起来这个变量在服务器端有一个效果,而不是在客户端。解决方案关于 MAX_FILE_SIZE
>
...在和其他格式的等价位置,据说
浏览器采取
帐户中的MAX_FILE_SIZE表单字段的值。
此信息在网络和书籍中的其他位置重复,但
似乎来源于PHP文档(它不会以
的形式出现在其他服务器端技术上)
b
$ b在HTML,HTTP或相关规范中没有任何内容表明
是这种情况(尤其是引入文件
upload的RFC 1867)到HTML没有提及它,所以它甚至不是在第一个RFC中提到的kludge
的情况,然后被丢弃),也没有在上下文中感觉到
的HTML规范(没有什么可以指出特定的隐藏输入和文件输入之间的
关系)。
我可以在其中找到的关于隐藏字段的唯一声明是
警告在安全注意事项部分针对用户代理
基于隐藏的$ b中提到的任何文件相关操作$ b字段。
没有浏览器将其作为扩展名执行。事实上,假设
在一个隐藏字段中可能还有其他可能的含义,那就是
在应用程序中处理多个文件上传的名称,那么将有
被认为是任何设计缺陷。 / p>
我认为主流浏览器中没有这样的机制(如果有的话
),实际上不应该是这样。引用它应该从
文档中删除。
我进一步建议,由于这个想法已经从这个
文档传播到其他地方,如果一个机制是需要或希望更快地处理这种
类文件处理的问题,那么它不工作应该是
添加。
它要求功能允许PHP
拦截在请求完成之前正在上传的流,
将完全不同于本文档建议的
应该被处理,即使它是真的。 。
the code below come from swfUpload php implementation:
// Check post_max_size (http://us3.php.net/manual/en/features.file-upload.php#73762)
$POST_MAX_SIZE = ini_get('post_max_size');
$unit = strtoupper(substr($POST_MAX_SIZE, -1));
$multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1)));
if ((int)$_SERVER['CONTENT_LENGTH'] > $multiplier*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) {
header("HTTP/1.1 500 Internal Server Error");
echo "POST exceeded maximum allowed size.";
exit(0);
}
// Validate the file size (Warning the largest files supported by this code is 2GB)
$max_file_size_in_bytes = 2147483647;
$file_size = @filesize($_FILES[$upload_name]["tmp_name"]);
if (!$file_size || $file_size > $max_file_size_in_bytes) {
HandleError("File exceeds the maximum allowed size");
exit(0);
}
这篇关于在客户端检测文件上传大小?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!