linux下yum安裝PHP APC與使用執行個體_PHP教程

來源:互聯網
上載者:User
今天要做一個大檔案上傳進度效果,後來網上說有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函數:

代碼如下 複製代碼


/*添加變數到資料存放區
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(目標文...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.