《PHP基础教程之PHP文件上传进度处理》由会员分享,可在线阅读,更多相关《PHP基础教程之PHP文件上传进度处理(7页珍藏版)》请在金锄头文库上搜索。
1、 http:/www.mobiletrain.org/ 北京千锋互联科技有限公司 版权所有 PHPPHP 基础教程之基础教程之 PHPPHP 文件上传进度处理文件上传进度处理 当文件过大,或者用户网络状态一般,通常上传过程需要一段时间,如果这时候让用户白屏等待的话,相信大部分用户都会直接关掉应用,所以一个监控上传进度,并实时向用户报告的需求就被产品汪摆在了桌面上。 一个高逼格的上传进度提示, 会让你的应用瞬间变成被仰望的存在。 PHP 在 5.4 之前,总是需要安装额外的扩展才能监控到文件上传进度。而从 5.4 开始,引入 session.upload_progress 的新特性,我们只需要在
2、 php.ini 中开启配置,即可通过session 监控文件上传进度。在 php.ini 中。 注意:本章学习需要有注意:本章学习需要有 sessionsession 基础和基础和 javascriptjavascript 和和 ajaxajax 基础。基础。 我们需要配置,注意查看和修改 php.ini 文件: 配置项配置项 说明说明 session.upload_progress.enabled 是否启用上传进度报告(默认开启) 1 为开启,0 为关闭 session.upload_progress.cleanup 是否在上传完成后及时删除进度数据(默认开启, 推荐开启) session
3、.upload_progress.prefix=upload_progress_ 进度数据将存储在_SESSIONsession.upload_progress.prefix . _POSTsession.upload_progress.name session.upload_progress.name=PHP_SESSION_UPLOAD_PROGRESS 如果_POSTsession.upload_progress.name没有被设置, 则不会报告进度. http:/www.mobiletrain.org/ 北京千锋互联科技有限公司 版权所有 配置项配置项 说明说明 session.upl
4、oad_progress.freq=1% 更新进度的频率(已经处理的字节数), 也支持百分比表示%. session.upload_progress.min_freq=1.0 更新进度的时间间隔(秒级) 开启了配置, 我们可以通过 session, 来记录一个完整的文件上传进度。 在 session 中,会出现一个如下结果的数组: 1. $_SESSION“upload_progress_test“ = array( 2. /请求时间 3. “start_time“ = 1234567890, 4. / 上传文件总大小 5. “content_length“ = 57343257, 6. /已
5、经处理的大小 7. “bytes_processed“ = 453489, 8. /当所有上传处理完成后为 TRUE,未完成为 false 9. “done“ = false, 10. 11. “files“ = array( 12. 0 = array( 13. /表单中上传框的名字 14. 15. “field_name“ = “file1“, 16. 17. /上传文件的名称 18. “name“ = “test1.avi“, 19. 20. /缓存文件,上传的文件即保存在这里 21. “tmp_name“ = “/tmp/phpxxxxxx“, http:/www.mobiletrai
6、n.org/ 北京千锋互联科技有限公司 版权所有 22. 23. /文件上传的错误信息 24. “error“ = 0, 25. 26. /是否上传完成,当这个文件处理完成后会变成 TRUE 27. “done“ = true, 28. 29. /这个文件开始处理时间 30. “start_time“ = 1234567890, 31. 32. /这个文件已经处理的大小 33. “bytes_processed“ = 57343250, 34. ), 35. 36. 1 = array( 37. “field_name“ = “file2“, 38. “name“ = “test2.avi“,
7、 39. “tmp_name“ = NULL, 40. “error“ = 0, 41. “done“ = false, 42. “start_time“ = 1234567899, 43. “bytes_processed“ = 54554, 44. ), 45. ) 46. ); 这个数组详细记录了文件上传的进度,已经处理完的文件状态为 true。下面,我们通过一个 jQuery 的 AJAX 实例,来学习一下文件上传进度的流程。 http:/www.mobiletrain.org/ 北京千锋互联科技有限公司 版权所有 首先,在表单中,需要添加一个 type=hidden 的 input
8、标签,标签 value 为自定义(建议使用有一定意义的值,因为这个值将要在后台用到) 1. 2. “ value=“test“ / 3. 4. 5. 6. 7. 0% 8. 这里,添加了一个 ID 为 progress 的 div,作为展示上传进度的容器。我们通过 js 的setTimeout(), 定时执行 ajax 来获取文件上传进度, 后台文件返回文件上传的进度百分比。 1. 2. 3. function fetch_progress() 4. $.get(progress.php, : test, function(data) 5. var progress = parseInt(da
9、ta); 6. $(#progress .label).html(progress + %); 7. if(progress 上面这段代码,就是通过 JQ 的 ajax,每 0.1 秒返回一次文件上传进度。并把进度百分比在 div 标签中显示。 后台代码, 需要分为两个部分, upload.php 处理上传文件。 progress.php 获取 session中的上传进度,并返回进度百分比。 这里文件上传就不再赘述,详细步骤参见上文,upload.php: 1. 主要关注 progress.php: http:/www.mobiletrain.org/ 北京千锋互联科技有限公司 版权所有 1. 到这里,文件进度的代码就已经完成了,配合前端,我们就可以做一个炫酷的文件上传功能啦!