eAccelerator – PHP 網頁加速及編碼軟體
http://eaccelerator.net/HomeUk
eAccelerator 是一套開放原始碼的網頁加速軟體,它能加快 PHP 網頁的執行速度。其原理是把原始 PHP 程式碼編譯過 (compiled) 的二進位碼快取起來,下次執行同一個程式時,就不需要再編譯一次,可以節省很多時間
同時,eAccelerator 還有保護 PHP 原始碼的效果,透過 eAccelerator 提供的 encoder 程式,程式開發者不需要再把 PHP 程式碼公開出去就可以提供服務,對於商業軟體的開發有很大的幫助
以下簡介在 FreeBSD 上面安裝與使用 eAccelerator 的過程
首先,請先確定您的機器上面已經安裝了 Apache Web Server 及 PHP 模組,Web Server 部分,eAccelerator 支援 Apache 1.3 與 2.0,PHP 則是支援 mod_php4 與 mod_php5,eAccelerator 並不支援 PHP 以 CGI 模式執行。
1. 安裝 eAccelerator
# cd /usr/ports/www/eaccelerator/
# make install
2. 啟用 eAccelerator extension
# vi /usr/local/etc/php/extensions.ini
在檔案的最後面加上:
extension=eaccelerator.so
請注意: extension=eaccelerator.so 一定要加上 extension=session.so 之後,否則會發生錯誤
3. 設定 php.ini
# cd /usr/local/etc/
# vi php.ini
如果你還沒有設定過 php.ini 的話,建議從 php.ini-recommended 拷貝一份來改:
# cp -i php.ini-recommended php.ini
# chmod 644 php.ini
在 php.ini 設定檔的最後面加上這些設定:
eaccelerator.shm_size="16"
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="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
每個設定參數的功能請參考 http://eaccelerator.net/IniSettingsUk 的說明
4. 建立快取暫存目錄
# mkdir /tmp/eaccelerator
# chmod 0777 /tmp/eaccelerator
5. 重新啟動 Apache,大功告成
# /usr/local/rc.d/apache2.sh stop
# /usr/local/rc.d/apache2.sh start
安裝完畢之後,您所有的程式都不須修改,自動就可以享受速度加倍的好處了,eAccelerator 會把快取的檔案放在 /tmp/eaccelerator/ 下面
eAccelerator 也有提供線上監控的介面,就像 phpinfo() 一樣,只要呼叫 eaccelerator() 即可,寫一個網頁如下即可:
<?
eaccelerator();
?>
當然,最好還是把這個網頁經由一些安全機制保護起來。除了你自己對網頁加上權限控管外,你也可以使用 eAccelerator 提供的保護機制,設定方法如下:
執行 /usr/local/share/examples/eaccelerator/eaccelerator_password.php 這支程式:
# php /usr/local/share/examples/eaccelerator/eaccelerator_password.php
Changing password for eAccelerator Web Interface (eaccelerator.php)
Enter admin name: dada
New admin password: 12345
Retype new admin password: 12345
Add the following lines into your php.ini and restart HTTPD
eaccelerator.admin.name="dada"
eaccelerator.admin.password="$1$oEX8dazK$7F5FMsJQejEh2Vdazjkqd."
輸入想要設定的帳號密碼(藍色部分)後,這支程式會產生編碼過後的資訊(綠色部分),然後把綠色部分的兩行貼到 php.ini 中,重新啟動 Apache 就可以了。eAccelerator 提供的保護機制是使用 HTTP 認證方式..
這個介面長得就像這樣子:
http://photo.giga.net.tw/photo/2029/original/20050623131051-0001.jpg
裡面提供簡單的管理功能,同時會告訴你那個網頁已經被快取了
eAccelerator 提供的網頁編碼功能
eAccelerator 提供一支小程式,可對網頁做編碼,詳細使用方法可執行
# /usr/local/bin/encoder
執行後會看到簡單的使用說明:
Usage: encoder [options] source_file_name
encoder [options] source_file_name...
encoder [options] source_directory_name...
Options:
-s suffix
encode files only with following suffix (default is "php")
-a
encode all files (no by default)
-l
follow symbolic links (no by default)
-r
encode directories recursively (no by default)
-c
copy files those shouldn't be encoded (no by default)
-f
overwrite existing files (no by default)
-w
exclude check for eaccelerator_load() and subsequent warning
-o target
If you encode only one script then 'target' specifyes an output
file name. If you encode directory or several files at once
then 'target' specifyes an output directory name.
Examples:
encoder some_file.php
encoder some_file.php -o some_encoded_file.php
encoder *.php -o some_dir
encoder ~/public_html/x -rcf -sphp -sinc -o ~/public_html/y
稍微玩一下應該就知道怎麼用了…
使用 encoder 去對 PHP 程式編碼,會產生另外一個檔案,你也可以對整個目錄作轉換,例如:
# encoder myhome -rcf -sphp -sinc -o myhome_encoded
這個命令會把 myhome/ 目錄下所有的 php / inc 結尾的檔案作編碼,並存放到 myhome_encoded 下面,同時,由於指定了 -c 這個選項,其他格式、不需編碼的檔案,如 jpg/gif/html/js 等,也會原封不動複製一份到 myhome_encoded 下面,這樣方便你直接以這個目錄來提供服務。
選項 -r 代表 recursively 的功能,可以幫你同時處理所有子目錄,不過有個討厭的地方就是,encoder 幫你建立的子目錄,目錄權限竟然是 0777,感覺很不好,所以我習慣上會自己去改 encoder 這支程式
# chmod u+w /usr/local/bin/encoder
# vi /usr/local/bin/encoder
然後,搜尋 0777 ,改成 0755 就可以了
--- /usr/local/bin/encoder.orig Wed Jun 22 09:30:49 2005
+++ /usr/local/bin/encoder Wed Jun 22 09:40:07 2005
@@ -99,7 +99,7 @@
function eaccelerator_mkdir($dir, $f, $web) {
if (!empty($dir)) {
- if (!@mkdir($dir,0777)) {
+ if (!@mkdir($dir,0755)) {
if (!$f) {
$error = "Can't create destination directory \"$dir\"";
if (file_exists($dir)) {