原扩展来源: http://pdoru.from.ro/upload-progress-meter
这是一个让您可以在WEB上载中显示上载进度的一个方案.
这个扩展是针对 php 5.2.0 以下及 php4 所有版本设计的, 需要对 php 源码进行打补丁并安装该扩展才可以使用, 具体请有需要
者阅读相关说明.
原扩展是通过临时文件来交换存取进度数据的, 一秒读写一次文件, 效率不好且费IO; 由于我这边机器全都配装了 eAccelerator 扩展
故修改了一下 upload_progress_meter.c 文件, 让扩展支持以 eAccelerator 的 shm/disk 方式来存取交换数据, 期望提升一些
效率.
扩展改法比较简单, 附件中的 upc_meter_eA.c 下载后去覆盖原扩展目录中 upload_progres_meter.c 然后重新编译即可
然后设定相应的 php.ini 的选项:
upload_progress_meter.store_method = "eacc"
upload_progress_meter.eacc.key_template = "upc_ekey_%s"
然后重启 web server 就可以了.
此外,这个扩展修改清理了一些没意义的ini选项,原选项仅保留:
upload_progress_meter.store_method 和 upload_progress_meter.file.filename_template
--------------
[2006/01/08]
下载包使用说明: 下载的包是一个完整的 extension 代码包, 而关于php本身的 patch 需要自行安装,参见上面网址.
使用方法在适当的地方解开这个包,进入 upload_progress_meter/ 目录, 按如下步骤执行
phpize
./configure --with-upload_progress_meter-eacc
make install
..
然后再按说明修改 php.ini
[ 本帖最后由 hightman 于 2007-1-8 16:37 编辑 ]
upm_vs_eA.tar.gz
HonestQiao 回复于:2007-01-07 10:39:37
引用:原帖由 hightman 于 2007-1-7 10:30 发表
原扩展来源: http://pdoru.from.ro/upload-progress-meter
这是一个让您可以在WEB上载中显示上载进度的一个方案.
这个扩展是针对 php 5.2.0 以下及 php4 所有版本设计的, 需要对 php 源码进行打 ...
会否导致攻击把EA可用内存吃光?
hightman 回复于:2007-01-07 10:47:28
引用:原帖由 HonestQiao 于 2007-1-7 10:39 发表
会否导致攻击把EA可用内存吃光?
:shock:
似乎理论上存在这样子的可能性. 只要量够大够密集... 不过此时是否 web server 已经受不了了呢?
因为php_session 一结束就会删除这块数据,并不会造成泄漏 (假设这里的设计和编写没有错误)
像file方式也一样,可以通过大量的刷制造把硬盘占满... 就像有人刷WEB把LOG刷暴一样
yueliangdao0608 回复于:2007-01-07 23:34:19
进度条可以用JS模拟嘛。感觉这个没必要。
HonestQiao 回复于:2007-01-07 23:39:38
引用:原帖由 yueliangdao0608 于 2007-1-7 23:34 发表
进度条可以用JS模拟嘛。感觉这个没必要。
但是那不是真实的,而这个显示的是当前的真实上传进度,。
hightman 回复于:2007-01-08 16:39:08
下载包更新,修正 eAccelerator 自身的 name_space 潜规则引起的BUG
由于上载进度发生在读取HTTP的POST数据过程,似乎此时_SERVER['SERVER_NAME'] 等还没初始化...
此外,扩展包加入了 --with-upload_progress_meter-eacc 的配置开关, 清楚一点
hightman 回复于:2007-01-09 10:20:37
实战应用实例: http://hi.twomice.net/upm/test.php
lyhiving 回复于:2007-01-09 15:38:32
传不了20M以上的
hightman 回复于:2007-01-09 17:07:05
引用:原帖由 lyhiving 于 2007-1-9 15:38 发表
传不了20M以上的
这是在PHP.INI里设置的, 而且传过大的文件也不应该是由WEB(HTTP)来作
seasee 回复于:2007-01-10 08:56:25
请加精
HonestQiao 回复于:2007-01-10 09:10:51
引用:原帖由 seasee 于 2007-1-10 08:56 发表
请加精
加精加精,加你个大头鬼。
引用: 本主题由 HonestQiao 于 2007-1-7 10:59 加入精华
showsa 回复于:2007-01-10 12:59:21
怎么没有超市限制?
要是N多文件 都上传到99%停止 ,那内存岂不是都给吃光了
flytod 回复于:2007-01-10 22:33:48
我们是通过放在memcached里面来做的。
hightman 回复于:2007-01-10 23:26:02
啊??每次上载文件还去连接memcached服务器存取进度数据,那不是更不好了...
特别是客户端显示进度每次请求(大约一秒)就要读一次进度数据的.
dulao5 回复于:2007-01-11 09:24:39
我觉得将来浏览器一定会有查询上传进度的接口的。
lyhiving 回复于:2007-01-11 14:07:20
引用:原帖由 hightman 于 2007-1-9 17:07 发表
这是在PHP.INI里设置的, 而且传过大的文件也不应该是由WEB(HTTP)来作
之前upie那边好像有一个是通过socket来实现的
感觉良好
|