apc方法实现php上传多个文件原理剖析

我们在上传多个文件的时候可能往往需要很长的等待时间,而且受网络和软件等的影响,经常会出现超时及上传失败的现象。如何在php上传多个文件时实时的得到文件上传进度,以及如何避开php和其他因素的限制上传任意大小的文件呢?

经验总结:示例php上传文件代码
五分钟解决php上传文件代码演示
挖掘php上传文件类型原理实现
三步ftp实现php上传文件代码剖析
两种php上传文件大小限制解决方案

php同asp等其他语言对上传文件的处理方式不同,asp中可以用request.binaryread流式的读取客户端提交的数据。php是把文件存放在临时文件夹中,在文件上传完成后才能够获取其信息以及对其进行操作。如果在上传过程中我们能够得到其临时文件的文件名,我们就可以通过判断临时文件的大小来来得到上传进度,不过好像没有办法得到。所以我们只能通过其他方式,就是利用php的socket扩展建立一个简单的服务器,把数据post到这个服务器上,然后再用我们自己的机制来处理。

先说说流程,首先用php的socket函数库建立一个临时的http服务器,在某一端口监听,然后把 ip地址和端口号通知客户端,客户端把上传表单提交(临时服务器), 临时服务器接受客户端请求,并读取post数据,分析并获取客户端上传的文件信息,把文件保存在服务器上,然后关闭临时服务器,释放资源,上传完成。有点绕,不过思路还是简单的。

稍后我会发布一个类库,暂定名为:ugia visual php uploader, 这样大家就可以在程序中很方便的调用了。php上传多个文件效果如下:

php上传多个文件之apc实现方法:

安装apc,参照官方文档安装,可以使用pecl模块安装方法快速简捷,这里不说明配置php.ini,设置参数 apc.rfc1867=1 ,使apc支持上传进度条功能,在apc源码说明文档里面有说明代码范例:

} else { if($_server[‘request_method’]==’post’) { //上传失败 } elseif (!empty($_get[‘sessid’])) { $unique_id = $_get[‘sessid’]; echo json_encode($uploadvalues);

Posted in 未分类