在php的web开发中,文件,图片,视频的上传是一个经常要用到的功能,而且涉及的知识面比较广,下面从几个不同的角度和技术层面来做一个详细的说明和总结。
注意:
在总结之前,请大家务必了解php.ini中的几个关于上传的关键配置值。
1.file_uploads
设为On,允许通过HTTP上传文件
2.upload_tmp_dir
文件上传至服务器时用于临时存储的目录,如果没指定,系统会使用默认的临时文件夹(我的机器是/tmp)。
3.upload_max_filesize
允许上传文件大小的最大值,默认为2M。
4.post_max_size
Php可接收的post数据的最大值(包括表单里的所有值的总合),默认为8M。
5.memory_limit
每个php所最占的最大内存数,这个值要大于允许上传的文件大小。
6.max_execution_time
每个php运行的最长时间(秒),默认30秒。
7.max_input_time
Php解析POST/GET数据的最长时间(秒),默认60秒。This sets the maximum time in seconds a scripts is allowed to parse input data, like POST and GET.It is measured from the mement of receiving all data on the server to the start of script execution.
其中很重要的是upload_max_filesize 和post_max_size 、memory_limit 必须要按照上传的文件设置合适,否则无法上传。
一、传统的php写的上传类。
写一个php的上传类,这个方法用到的知识全部是php的,而且技术的难点也不多。
服务端利用php的$_FILES['file']['name']来获取文件后缀名,具体的代码自己查找资料看看,这里就不多说了。
总结;这个方法可以用来上传小于2M的文件或者是图片,基本的功能可以实现。
二、利用uploadify插件
这个是利用Jquery的上传插件,上传可以带进度条,容易配置。
官网:http://www.uploadify.com/,可以下载资料和文档,里面的各个参数的详解都很清楚,而且还有php的demo,参考一下就可以很快的开发。
总结:可以上传一些大文件,和图片,而且带进度条,可以多文件上传,在WEB中会经常用。
三、利用百度的webupload
WebUploader 是由 Baidu FEX 团队开发的一款以 HTML5 为主,FLASH 为辅的现代文件上传组件。在现代的浏览器里面能充分发挥 HTML5 的优势,同时又不摒弃主流IE浏览器,沿用原来的 FLASH 运行时,兼容 IE6+,iOS 6+, android 4+。采用大文件分片并发上传,极大的提高了文件上传效率。
官网:http://fex.baidu.com/webuploader/ 同时网上也有很多的资料,不过开发起来会比较难一点,但是可以上传几个G的视频,还有上传图片可以预览,功能是非常强大的,只是开发的难度稍微大点。官网上也有demo,大家可以看看,试试。
四、swfupload的插件
这是一个jquery的上传插件,功能也非常强大,开发也比较容易,网上有很多的资料,大家可以自行查找。
总结:在web的开发中,本人建议可以使用uploadify和webupload这两个,真的很好用。
WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+。两套运行时,同样的调用方式,可供用户任意选用。
采用大文件分片并发上传,极大