程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> linux下yum安裝PHP APC與使用實例

linux下yum安裝PHP APC與使用實例

編輯:關於PHP編程

今天要做一個大文件上傳進度效果,後來網上說有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://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緩存類:

 代碼如下 復制代碼

<?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 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()緩存頻繁變更的用戶數據,會出現一些奇異現象。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved