php_apc.dll下载和说明

时间:2011-11-24 10:26 作者:php 点击:
第一步,在php.ini文件中添加拓展设置 extension=php_apc.dll ,同时添加一条开关 apc.rfc1867 = on。 第二步,把dll文件放到扩展库目录下。可以在这里http://pecl4win.php.net/ext.php/php_apc.dll下载

  

本地下载

php_apc.dll

 http://www.phpzy.com/uploads/soft/php_apc.rar

PHP 5.2.0增加了一个取得文件上传状况的扩展。因为它不是放在PHP引擎内核中,所以如果对主机的有配置权限的话,你可以把这个扩展添加到任何PHP版本上而不必安装5.2.0版本。

PHP 5.2.0增加了一个取得文件上传状况的扩展。因为它不是放在PHP引擎内核中,所以如果对主机的有配置权限的话,你可以把这个扩展添加到任何PHP版本上而不必安装5.2.0版本。

      第一步,在php.ini文件中添加拓展设置 extension=php_apc.dll ,同时添加一条开关 apc.rfc1867 = on。

      第二步,把dll文件放到扩展库目录下。可以在这里http://pecl4win.php.net/ext.php/php_apc.dll下载。

     第三步,restart WEB Server 就ok了。

      怎么使用呢?道理很简单。对上传的文件添加一个标记,就可以在其它的php程序中用这个标记访问它。这个标记通常叫做挂钩(Hook)。在上传文件的那个表单里面添加一个名字为APC_UPLOAD_PROGRESS的隐藏域(就如同限制文件大小的那个MaxFileSize隐藏域)。‘upload_’ 加上这个隐藏域的值就是用于访问文件的钩子。例如:
<input type="hidden" name="APC_UPLOAD_PROGRESS" value="<?php echo uniqid(mt_srand())?>">
为什么钩子的值是用php的uniqid()函数取得呢?因为很多人同时上传文件的话,不同文件的钩子不能相同啊。系统会把 APC_UPLOAD_PROGRESS域的值前面加上'upload_'生成钩子名称。在其它的php程序中就可以用apc_fetch()这个函数得到该文件的一系列信息了。假设APC_UPLOAD_PROGRESS的值是45c7f4d0b5f5b,那么在php中就可以这样:
$status=apc_fetch('upload_'.'45c7f4d0b5f5b');
得到相关数组变量$status,其中$status['current']为当前已上传大小(byte),$status['total']为文件总大小,上传完毕时$status['done']的值等于1。
      至于客户端嘛当然是用JS取得APC_UPLOAD_PROGRESS的值了,当然还有AJAX。我们得到的上传进度并不是理想连续的,如想获得更好的用户体验,需要在客户端用JS作进一步处理。
      在写这篇文档的时候,各空间商们基本没有采用版本5.2.0,文件异步上传只能使用一个折中的解决方式。此前真正的异步上传业界一直没有实现。国外有一个真正异步上传的例子,但它是在服务端用perl语言获取上传文件的信息,如果空间仅支持php不支持perl那就没辙。目前很多专做文件分享的网站都是由于具有系统配置权限从而添加了相应的服务器支持才实现的。这次php5.2.0发布的这个扩展,提供了真正的解决途径,只可惜空间商们不一定迅速采用这个版本。
      目前使用的折中的解决方法是利用一个隐藏起来不显示的iframe。这个隐藏起来的iframe是真正用于上传文件的。用另一个文件域让用户选择文件,当用户选择了上传的文件之后,用JS取得用户的文件的路径然后赋值给那个隐藏的iframe中的文件域,令iframe中的表单提交。这时那个显示的文件域可以被替换为图片或者文字什么的提示用户正在上传。用上传完毕后返回的JS作完毕处理。这个方法要求熟悉JS。另外它不是真正的异步,你会发现上传的时候浏览器处于正在打开页面的状态,例如IE的地球图标在转动。关于文件异步上传就说这么多了。
首先下载php_apc.dll动态链接库。这个可以到php下载网站和pecl下载网站中寻找,

这里特别提一下这个模块尚不支持php5.3,(模式5.2几个靠后的版本也不支持)。

APC的缓存分两部分:系统缓存和用户数据缓存.

下载后,放到php/ext模块下,命名为php_apc.dll然后配置php.ini文件。

[apc]

extension=php_apc.dll
apc.rfc1867 = on
upload_max_filesize = 100M
apc.max_file_size = 200M
post_max_size = 1000M
max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒
max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit = 128M ;每个PHP页面所吃掉的最大内存,默认8M

然后我们测试一下能否使用,我们可以用phpinfo()函数查看,apc模块时候存在,当然了,直接使用一下,看看怎么用,这个缓存使用起来到很方便,因为就几个函数供使用

apc_clear_cache() 清除apc缓存内容
默认(无参数)时,只清除系统缓存,要清除用户缓存,需用'user'参数   //这个不知道怎么用,郁闷了半天。apc_define_constants ( string key, array constants [, bool case_sensitive] )
将数组constants以常量加入缓存apc_load_constants (string Key)
取出常量缓存apc_store ( string key, mixed var [, int ttl] )
在缓存中保存数据apc_fetch ( string key )
获得apc_store保存的缓存内容apc_delete ( string key )
apc.enabled = 1

   是否启用APC,如果APC被静态编译进PHP又想禁用它,这是唯一的办法

   apc.shm_segments = 1

为编译器缓冲区分配的共享内存块数量(建议值为1) 如果APC耗尽了共享内存,并且已将apc.shm_size指令设为系统允许的最大值,你可以尝试增大此值。

   apc.shm_size = 64 每个共享内存块的大小(以MB为单位,建议值为128~256) 有些系统(包括大多数BSD变种)默认的共享内存块大小非常少

   apc.optimization = 9

优化级别(建议值为 0 ) 。; 正整数值表示启用优化器,值越高则使用越激进的优化。; 更高的值可能有非常有限的速度提升,但目前尚在试验中

   apc.num_files_hint = 1000

Web服务器上可能被包含或被请求的不同源文件的大致数量(建议值为1024~4096)。如果你不能确定,则设为 0 ;此设定主要用于拥有数千个源文件的站点。

   apc.ttl = 0

; 缓存条目在缓冲区中允许逗留的秒数。0 表示永不超时。建议值为7200~36000。

; 设为 0 意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。

   apc.gc_ttl = 7200

; 缓存条目在垃圾回收表中能够存在的秒数。此值提供了一个安全措施,即使一个服务器进程在执行缓存的源文件时崩溃,而且该源文件已经被修改,为旧版本分配的内存也不会被回收,直到达到此TTL值为止。设为零将禁用此特性

   apc.cache_by_default = On

; 是否默认对所有文件启用缓冲。若设为Off并与以加号开头的apc.filters指令一起用,则文件仅在匹配过滤器时才被缓存。

   apc.slam_defense = 0

;SYS(反对使用该指令,建议该用apc.write_lock指令)在非常繁忙的服务器上,无论是启动服务还是修改文件,都可能由于多个进程企图同时缓存一个文件而导致竞争条件。 这个指令用于设置进程在处理未被缓存的文件时跳过缓存步骤的百分率。 比如设为75表示在遇到未被缓存的文件时有75%的概率不进行缓存,从而减少碰撞几率。 鼓励设为 0 来禁用这个特性。

   apc.file_update_protection = 2

;SYS 当你在一个运行中的服务器上修改文件时,你应当执行原子操作。也就是先写进一个临时文件,然后将该文件重命名(mv)到最终的名字。文本编辑器以及 cp, tar 等程序却并不是这样操作的,从而导致有可能缓冲了残缺的文件。默认值 2 表示在访问文件时如果发现修改时间距离访问时间小于 2 秒则不做缓冲。那个不幸的访问者可能得到残缺的内容,但是这种坏影响却不会通过缓存扩大化。如果你能确保所有的更新操作都是原子操作,那么可以用 0 关闭此特性。如果你的系统由于大量的IO操作导致更新缓慢,你就需要增大此值。

   apc.enable_cli = 0

是否为CLI版本启用APC功能,仅用于测试和调试目的才打开此指令

   apc.stat=On

; 是否启用脚本更新检查。改变这个指令值要非常小心。默认值 On 表示APC在每次请求脚本时都检查脚本是否被更新, 如果被更新则自动重新编译和缓存编译后的内容。但这样做对性能有不利影响。如果设为 Off 则表示不进行检查,从而使性能得到大幅提高。但是为了使更新的内容生效,你必须重启Web服务器。这个指令对于include/require的文件同样有效。但是需要注意的是,

; 如果你使用的是相对路径,APC就必须在每一次include/require时都进行检查以定位文件。

; 而使用绝对路径则可以跳过检查,所以鼓励你使用绝对路径进行include/require操作


  系统缓存 是自动使用的,是指APC把PHP文件源码的编译结果缓存起来,然后在再次调用时先对比时间标记。如果未过期,则使用缓存代码运行。默认缓存 3600s(一小时).但是这样仍会浪费大量CPU时间.因此可以在php.ini中设置system缓存为永不过期(apc.ttl=0).不过如果这样设置,改运php代码后需要restart一下您的web服务器(比如apache…).目前对APC的性能测试一般指的是这一层cache;

  用户数据缓存 由用户在编写php代码时用apc_store和apc_fetch函数操作读取、写入的.如果量不大的话我建议可以使用一下.如果量大,我建议使用memcache会更好. 如果要享受APC带来的缓存大文件上传进度的特性,需要在php.ini中将apc.rfc1867设为1,并且在表单中加一个隐藏域APC_UPLOAD_PROGRESS,这个域的值可以随机生成一个hash,以确何唯一
 

 


标签(Tag):
------分隔线----------------------------
推荐内容
热点内容