近日看到 Ugia 的 upu 终于发布了,上传时候显示进度的效果得以实现,但是实现方式确不到好,需要上传的时候临时打开一个 socket 端口,更多正规的服务器都是生活在防火墙后面的,让客户端直接链接他们新开的端口是不现实的。通常除了这种方式外,还有2种办法可以实现PHP显示上传进度:
第一种是直接修改PHP的source code,使得在接收上传文件的时候定期将上传进度写入文件,session,或其它共享存储中,优点是效率最高,难点在于需要针对各个版本的PHP进行修改,还需要编译,调试不便。
第二种,是用其他语言实现其中一部分功能,如perl实现的cgi,因为在上传初始阶段apache就会将权限交给perl,而perl会交给cgi脚本,这时,你写的这个cgi就可以处理上传进度供客户端回显了,难点在于需要在2种语言种共享数据,缺点是cgi效率不高,当然可以用fastcgi,这年头写fastcgi的不多了,优点当然是兼容性最好。
第三中,就是UPU的这种方式,直接让 PHP 脚本监听 Socket 端口,缺点上面说了,就是无法用在防火墙后。
TOM的网络U盘已经有一部分用户可以看到上传进度的显示了,未来也许所以用户都可以看到吧,也许始终只会对一部分用户开放。
BTW,Ugia的代码质量真的很棒!!