PHP文件上传问题汇总(文件大小检测、大文件上传处理)
《:PHP文件上传问题汇总(文件大小检测、大文件上传处理)》要点: 由于涉及到本地和服务器两方面的平安问题,所以基于input type="file"形式的页面文件上传一直处于一个很尴尬的位置.一方面,用户不希望隐私泄露,所以浏览器无法对用户在上传时选择的文件做有效的判 断.另一方面,为了服务器端的平安,减轻传输负担,系统又希望能在用户开始上传之前就将非法的文件拒之门外.
代码如下:
<form enctype="multipart/form-data" action="__URL__" method="POST">
一个输入框:
代码如下:
<input name="userfile" type="file" />
和服务器端的一行代码:
代码如下:
move_uploaded_file($_FILES['userfile']['tmp_name'],'/var/www/uploads/'. basename($_FILES['userfile']['name']));
就可以实现整个上传过程. 但随文件增大,表单上传的不足就会暴露出来.尤其是我们想取得最基本的文件大小来阻止过大文件上传这一简单的想法,也变得如此困难.以下一一道来: 通过MAX_FILE_SIZE MAX_FILE_SIZE 暗藏字段(单位为字节)必须放在文件输入字段之前,其值为接收文件的最大尺寸.这是对浏览器的一个建议,PHP 也会检查此项.在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件.实际上,PHP 设置中的上传文件最大值是不会失效的.但是最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦. 显然PHP的开发者们也考虑到了大文件上传的问题,但就像手册所说,MAX_FILE_SIZE只是对浏览器的一个建议,事实上目前为止所有主流的浏览器并没有采纳这个建议,所以采用MAX_FILE_SIZE约束文件大小形同摆设,不可行. 通过服务器端 MAX_FILE_SIZE既然无效,那么用户可以将文件上传到服务器,服务器端通过$_FILES['userfile']['size']判断用户上 传的文件大小,然后决定是否接受上传并返回信息.暂且排除服务器的负荷以及可能存在的恶意破坏行为,这种解决方案听起来无非是浪费一部分带宽,也能对用户 上传文件作出约束. 但这也是不可行的,PHP的文件上传受到php.ini以下这些设置的影响:
虽然设置方法在手册 中都有比较详细的说明,之所以仍然说此方法不可行,是因为php执行脚本在超过memory_limit时,该次的POST数据会全部丢失并且不会报错! var fr = new FileReference(); 基于这个类就可以用Flash提供的file browse和SelectFile事件替代浏览器的事件.我们需要: fr.addEventListener(Event.SELECT,onSelectFile); 2、创建一个供Js拜访的对象,用来放置flash得到的文件信息 var s = { size:0,name:'',type:'' } 3、创建file browse办法 function browseFile():void {<br> fr.browse();<br> } 4、当SelectFile事件触发的时候,传递文件信息 function onSelectFile(e:Event):void {<br> s.size = fr.size;<br> s.name = fr.name;<br> s.type = fr.type;<br> } 5、将browseFile办法公开可供Js调用 ExternalInterface.addCallback("browseFile",browseFile); 6、将得到的文件信息传递给Js ExternalInterface.call("onSelectFile",s); 现在我们已经可以通过Js获得由flash传递来的文件大小信息了,具体的实现可以参看Demo . 基于Perl的项目 FileChucker,XUpload,Uber-Uploader 但终究我希望有一天能看到仅基于HTML就能实现的严整健壮的上传方案,但愿这一天不会太远.
如果你上传的文件体积在8m一下(通常情况),那修改以上设置就可以满足你的要求了.
试着把这两个值改大些.一般就可以办理大多数问题了.PHP编程 就此推断,上传文件的体积是可以无穷大的.但还要考虑你的网络情况,等等. 问题就先为大家介绍到这,希望对大家办理PHP文件上传问题有所帮助.PHP编程 欢迎参与《:PHP文件上传问题汇总(文件大小检测、大文件上传处理)》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |