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高级应用的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30348