linux下yum安装PHPAPC与使用实例_PHP教程
                        
                            时间:2021-07-01 10:21:17
                            帮助过:19人阅读
							                        
                     
                    
                    今天要做一个大文件上传进度效果,后来网上说有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:
添加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函数:
	  
		| 代码如下 |  | 
	  
		| 
 /*添加变量到数据存储bool apc_add ( string $key , mixed $var [, int $ttl = 0 ] )
 如果key存在了,不会覆盖,但返回false
 */
 apc_add('url','http://www.111cn.Net');
 
 /*从缓存中取出存储的变量
 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缓存类:
	  
		| 代码如下 |  | 
	  
		| 
 /*********************************************************************************
 * 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 www.phpddt.com');
 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()缓存频繁变更的用户数据,会出现一些奇异现象。
	  
	
http://www.bkjia.com/PHPjc/629903.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/629903.htmlTechArticle今天要做一个大文件上传进度效果,后来网上说有php apc可以实现,后来百度了一下php apc信息,PHP APC提供两种缓存功能,即缓存Opcode(目标文...