好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

linux下yum安装PHP APC与使用实例 - php高级应用

linux下yum安装PHP APC与使用实例

今天要做一个大文件上传进度效果,后来网上说有php apc可以实现,后来百度了一下php apc信息,PHP APC提供两种缓存功能,即缓存Opcode(目标文件),我们称之为apc_compiler_cache,同时它还提供一些接口用于PHP开发人员将用户数据驻留在内存中,我们称之为apc_user_cache,想用一下APC缓存到底效果如何,无奈在windows找不到相应版本的php-apc.dll扩展文件,只好在linux下安装了,不用源码方式安装,直接yum就行了.

首先要安装apc的依赖包,代码如下:

yum install php-pear php-devel httpd-devel pcre-devel gcc make

然后使用pecl安装apc,代码如下:pecl install apc

添加apc扩展到配置文件,代码如下:

echo "extension=apc.so" > /etc/php.d/apc.ini

最后记得重启服务器,代码如下:

service httpd restart 

然后用PHP的phpinfo()函数可以检测到.

APC缓存函数实例: 在APC中我们也可以享受APC带来的缓存大文件上传进度的特性,需要在php.ini中将apc.rfc1867设为1,并且在表单中加一个隐藏域 APC_UPLOAD_PROGRESS,这个域的值可以随机生成一个hash,以确保唯一.

APC有很多设置,你可以在php.ini中对它设置,代码如下:

[APC]  apc.enabled = 1  apc.shm_segments = 1  apc.shm_size = 64  apc.max_file_size = 10M  apc.stat=1 

我试用了下PHP中常见的APC函数,代码如下:

<?php    /*添加变量到数据存储   bool apc_add ( string $key , mixed $var [, int $ttl = 0 ] )   如果key存在了,不会覆盖,但返回false   */   apc_add( 'url' , 'http://HdhCmsTestphpfensi测试数据' );    /*从缓存中取出存储的变量   mixed apc_fetch ( mixed $key [, bool &$success ] )   */   var_dump(apc_fetch( 'url' ));    /*使用 apc_store() 存储的变量,.key是唯一的,所以 两个值使用同一个名称,原来的将被新的值覆盖   bool apc_store ( string $key , mixed $var [, int $ttl = 0 ] )   */   apc_store( 'var' , '新的变量' );    /*从用户缓存中删除某个变量   mixed apc_delete ( string $key )   */   apc_delete( 'url' );    /*清楚apc缓存   bool apc_clear_cache ([ string $cache_type ] )   */   apc_clear_cache( 'user' );    /*检查APC中是否存在某个或者某些key,如果Key存在的话返回 TRUE , 否则返回 FALSE   mixed apc_exists ( mixed $keys )   */   if (apc_exsists( 'url' )){    echo   "这个key真存在" ;  } else {    echo   "貌似这个key是不存在的" ;  }    /*递增一个储存的数字,成功时返回 key 的当前值, 或者在失败时返回 FALSE   int apc_inc ( string $key [, int $step = 1 [, bool &$success ]] )   */   apc_store( 'anumber' , 42);  $ret  = apc_inc( 'anumber' , 1,  $fail );  var_dump( $ret );  var_dump( $fail );    /*递减一个存储变量的数字,成功时返回 key 的当前值, 或者在失败时返回 FALSE   int apc_dec ( string $key [, int $step = 1 [, bool &$success ]] )   */   $ret  = apc_dec( 'astring' , 1,  $fail );  var_dump( $ret );  var_dump( $fail );  ?> 

另外提供一个很好用的APC缓存类,代码如下:

<?php    /*********************************************************************************    * APC缓存类,版权(摘自InitPHP框架)   ***********************************************************************************/   class  MyApc {      /**     * Apc缓存-设置缓存     * 设置缓存key,value和缓存时间     * @param  string $key   KEY值     * @param  string $value 值     * @param  string $time  缓存时间     */     public   function  set_cache( $key ,  $value ,  $time  = 0) {      if  ( $time  == 0)  $time  = null;  //null情况下永久缓存      return  apc_store( $key ,  $value ,  $time );;   }        /**     * Apc缓存-获取缓存     * 通过KEY获取缓存数据     * @param  string $key   KEY值     */     public   function  get_cache( $key ) {     return  apc_fetch( $key );   }      /**     * Apc缓存-清除一个缓存     * 从memcache中删除一条缓存     * @param  string $key   KEY值     */     public   function  clear( $key ) {     return  apc_delete( $key );   }      /**     * Apc缓存-清空所有缓存     * 不建议使用该功能     * @return     */     public   function  clear_all() {    apc_clear_cache( 'user' );  //清除用户缓存      return  apc_clear_cache();  //清楚缓存    }      /**     * 检查APC缓存是否存在     * @param  string $key   KEY值     */     public   function  exists( $key ) {     return  apc_exists( $key );   }      /**     * 字段自增-用于记数     * @param string $key  KEY值     * @param int    $step 新增的step值     */     public   function  inc( $key ,  $step ) {     return  apc_inc( $key , (int)  $step );   }      /**     * 字段自减-用于记数     * @param string $key  KEY值     * @param int    $step 新增的step值     */     public   function  dec( $key ,  $step ) {     return  apc_dec( $key , (int)  $step );   }      /**     * 返回APC缓存信息     */     public   function  info() {     return  apc_cache_info();   }  }    //使用方法如下:   $apc  =  new  MyApc();  $apc ->set_cache( 'key' , 'test by HdhCmsTestphpfensi测试数据' );  print_r( $apc ->get_cache( 'key' ));  ?> 

总结:

1,使用Spinlocks锁机制,能够达到最佳性能。

2,APC提供了apc.php,用于监控与管理APC缓存。不要忘记修改管理员名和密码

3,APC默认通过mmap匿名映射创建共享内存,缓存对象都存放在这块]大型]的内存空间。由APC自行管理该共享内存

4,我们需要通过统计调整apc.shm_size、apc.num_files_hints、apc.user_entries_hint的值。直到最佳

5,好吧,我承认apc.stat = 0 可以获得更佳的性能。要我做什么都可以接受.

6,PHP预定义常量,可以使用apc_define_constants()函数。不过据APC开发者介绍说pecl hidef性能更佳,抛异define吧,它是低效的。

7,函数apc_store(),对于系统设置等PHP变量,生命周期是整个应用(从httpd守护进程直到httpd守护进程关闭),使用APC比Memcached会更好。必竟不要经过网络传输协议tcp。

8,APC不适于通过函数apc_store()缓存频繁变更的用户数据,会出现一些奇异现象.

查看更多关于linux下yum安装PHP APC与使用实例 - php高级应用的详细内容...

  阅读:50次