eAccelerator 配置(PHP代碼加速器)
eAccelerator是一個自由開放源碼php加速器,最佳化和動態內容緩衝,提高了php指令碼的緩衝效能,使得PHP指令碼在編譯的狀態下,對伺服器的開銷幾乎完全消除。 它還有對指令碼起最佳化作用,以加快其執行效率。使您的PHP程式碼執效率能提高1-10倍;
?
首先您要安裝好PHP,然後再來編譯安裝 eaccelerator,過程如下。
我們從官方下的版本是 eaccelerator-0.9.5.2.tar.bz2
編譯安裝;
# tar xvf eaccelerator-0.9.5.2.tar.bz2
# cd cd eaccelerator-0.9.5.2
# export PHP_PREFIX="/usr"
# $PHP_PREFIX/bin/phpize
# ./configure \ --enable-eaccelerator=shared \ --with-php-config=$PHP_PREFIX/bin/php-config
# make
# make install
註:通過export 來設定php所在的安裝路徑變數,我的PHP是安裝在/usr目錄下,系統用redhat。其它系統如果預設安裝也大體差不多;如果不一樣,就自己指定一下;
完成安裝後,eaccelerator.so模組位於 /usr/lib/php/extensions目錄中,您的系統如果和我不一樣,您自己應該安裝在哪了; # echo "/usr/lib/php/extensions" > /etc/ld.so.conf
# ldconfig 註:更新動態連結程式庫地址;
修改設定檔;
我們首先要修改;php.ini,然後重啟Apache;
在php.ini檔案中,加入;
zend_extension="/usr/lib/php/extensions/eaccelerator.so" 註:模組的具體位置;
eaccelerator.shm_size="16" 註:共用記憶體大小;
eaccelerator.cache_dir="/home/eaccelerator" 註:緩衝目錄;
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9" 註:其中,模組的具體位置必須正確,以您的系統為準;共用記憶體大小可以自己調整,感覺16M還是可以的,根據伺服器的情況,你自己調一下。
緩衝目錄可以自己指定,我們在這裡指定的是 /home目錄上的 eaccelerator 目錄,如果沒有,自己建立一個;許可權是0777;
以上的配置是把 eaccelerator 做為 Zend 的擴充模組來編譯的辦法。如果您的PHP是用安裝模式編譯的,要把 zend_extension改為zend_extension_ts 。
如果您是把 eaccelerator 做為 PHP的一個擴充,要用下面的配置 ;
extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/home/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
是不是生效了,您要查看 /home/eaccelerator 目錄中,當Apache伺服器啟動了,你隨便點幾個頁面,如果在這個目錄中,出現檔案了。那就是生效了。如果沒任何檔案,就要找原因了 …… 這兩個設定檔,是不是管用。要你自己根據情況來修改。
# mkdir /home/eaccelerator
# chmod 777 /home/eaccelerator 註:建立緩衝目錄池,許可權是777
?
?
eaccelerator.shm_size="32"
eAccelerator 可以使用的共用記憶體的數量 (以兆為單位) . "0" 是指作業系統的預設值. 預設值是 "0".可根據伺服器的實際情況來調整,16,32,64,128都是可以的。
eaccelerator.cache_dir="/home/php/tmp"
這個目錄是給磁碟緩衝使用. eAccelerator 在這裡儲存預先編譯好的代碼, 進程資料, 內容以及使用者的自訂內容. 同樣的資料也能被儲存在共用記憶體中 (這樣可以提高訪問速度). 預設的設定是 "/tmp/eaccelerator".
eaccelerator.enable="1"
開啟或關閉 eAccelerator。"1" 為開啟,"0" 為關閉。預設值為 "1"。
eaccelerator.optimizer="1"
啟或關閉內部最佳化器,可以提升代碼執行速度。"1" 為開啟,"0" 為關閉。預設值為 "1"。
eaccelerator.check_mtime="1"
開啟或者關閉 PHP 的檔案修改檢查. "1" 是指開啟, "0" 是指關閉. 如果您在修改以後重新編譯 PHP 的檔案,那麼您應當設定為 "1". 預設值是 "1".
eaccelerator.debug="0"
開啟或關閉調試日誌記錄。"1" 為開啟,"0" 為關閉。預設值為 "0"。會將快取命中得記錄寫入日誌。
eaccelerator.filter=""
判斷哪些 PHP 檔案必須緩衝。您可以指定緩衝和不緩衝的檔案類型(如 "*.php *.phtml"等)
如果參數以 "!" 開頭,則匹配這些參數的檔案被忽略緩衝。預設值為 "",即,所有 PHP 檔案都將被緩衝。
eaccelerator.shm_max="0"
當使用 " eaccelerator_put() " 函數時禁止其向共用記憶體中儲存過大的檔案。該參數指定允許儲存的最大值,單位:位元組 (10240, 10K, 1M)。"0" 為不限制。預設值為 "0"。
eaccelerator.shm_ttl="0"
當 eAccelerator 擷取新指令碼的共用記憶體大小失敗時,它將從共用記憶體中刪除所有在最後 "shm_ttl" 秒內沒有存取的指令碼緩衝。預設值為 "0",即:不從共用內春中刪除任何快取檔案。
eaccelerator.shm_prune_period="0"
當 eAccelerator 擷取新指令碼的共用記憶體大小失敗時,他將試圖從共用記憶體中刪除早於"shm_prune_period" 秒的緩衝指令碼。預設值為 "0",即:不從共用內春中刪除任何快取檔案。
eaccelerator.shm_only="0"
允許或禁止將已編譯指令碼緩衝在磁碟上。該選項對 session 資料和內容快取無效判定。預設值為 "0",即:使用磁碟和共用記憶體進行緩衝。
eaccelerator.compress="1"
允許或禁止壓縮內容緩衝。預設值為 "1",即:允許壓縮。
eaccelerator.compress_level="9"
指定內容緩衝的壓縮等級。預設值為 "9",為最高等級。
eaccelerator.keys = "disk_only"
eaccelerator.session = "disk_only"
eaccelerator.content = "disk_only"
設定內容緩衝的存放的地方,可以設定為:
shm_and_disk 在共用快取和硬碟(預設值)
shm 預設存在共用記憶體,如果共用記憶體已滿或大小超過 "eaccelerator.shm_max" 的值,就存到硬碟
shm_only 只存放在共用記憶體
disk_only 只存放在硬碟
none 不快取資料
eaccelerator.allowed_admin_path = "/var/www/html/web/eaccelerator"
這是控制台的地址
安裝包裡有個control.php,你把它複製到網站的任意目錄,可以用它查看和管理,這個必須指定,否則查看緩衝內容的時候會出錯
最後,來看一下我的 eAccelerator 設定
; eaccelerator
[eaccelerator]
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="128"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.keys = "disk_only"
eaccelerator.sessions = "disk_only"
eaccelerator.content = "disk_only"
eaccelerator.allowed_admin_path = "/var/www/html/web/eaccelerator"
另外,再說下 eAccelerator 的安裝
# wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6.tar.bz2
# tar -jxvf eaccelerator-0.9.6.tar.bz2
# cd eaccelerator-0.9.6
# /usr/local/php/bin/phpize
# ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config
# make && make install
-------------------------------------
open_basedir 設定後不能訪問的解決方案之一
Warning: Unknown: open_basedir restriction in effect. File() is not within the allowed path(s): (.:/tmp/) in Unknown on line 0
Fatal error: Can’t load /XX/index.php, open_basedir restriction. in Unknown on line 0
出現了很多次這樣的問題了,感覺都無從下手,總覺得與系統和php有關, 今天又出現了, 想來想去都覺得不奇怪, 後面開始重新編譯php, php的擴充都沒編譯,發現設定open_basedir的時候,卻沒有出錯^^^?? ,?? 從這個資訊覺得有些可以利用的,把自己方案所需的擴充都安裝進去,重啟apache的時候,卻發現有出現這個錯誤, 把php.ini中設定的擴充一個一個的關閉,開始排查,後面吧eaccelerator注釋掉後,重啟apache並沒有出現錯誤, 定位問題出現eaccelerator, 在用google查了下,發現eaccelerator 0.9.6後的版本跟以前的有些改變,把open_basedir給限制了,這時我們要把限制去掉才行
下載eaccelerator 0.9.6後先不要安裝,解包後找到eaccelerator.c這個檔案,開啟第1156行,這樣的:
if (PG(open_basedir) && php_check_open_basedir(realname TSRMLS_CC)) {
修改成:
if (PG(open_basedir) && php_check_open_basedir(file_handle->filename TSRMLS_CC)) {
修改後在進行編譯,就ok了