首页 > 学技术 > 技术网文 > PHP > 正文

[原创] 在PHP4中带进度条上载扩展(upm)加入eAccelerator存取支持


来源 chinaunix.net 酷勤网整理

原扩展来源: 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来实现的 
感觉良好




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=882181
转载请注明作者名及原文出处



收藏本页到: