Monthly ArchiveJune 2005
程式語言 dada on June 23, 2005
eAccelerator - PHP 網頁加速及編碼
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)) {
軟體 dada on June 05, 2005
在 FreeBSD 下安裝 MySQL 4.1 ...
在 FreeBSD 下面用 ports 安裝 MySQL 4.1
如果你只要用 UTF-8 的話就算了,但是如果還是有使用 BIG5 的話..
安裝 make 的時候,記得要加上 WITH_CHARSET=big5
以下當作筆記,紀錄 MySQL database server / FreeBSD 的安裝流程:
安裝資料庫:
cd /usr/ports/databases/mysql41-server/ make WITH_CHARSET=big5 install
接下來加入這一行在 /etc/rc.conf 裡面:
mysql_enable="YES"
如果想指定不同的資料庫存放位置的話,可以在 /etc/rc.conf 內加上:
mysql_dbdir="/home/mysql"
記得這個目錄要先建立,owner 及 group 都要是 mysql,然後就可以啟動 MySQL 了:
/usr/local/etc/rc.d/mysql-server.sh start
再來要設定 root 密碼(假設密碼是 dada):
/usr/local/bin/mysqladmin -u root password 'dada'
然後我們先進入 MySQL 的交談式介面,在命令列下執行:
/usr/local/bin/mysql -u root -p
問密碼的時候就輸入您在前一步驟設定的密碼
接下來首要任務當然是讓 phpMyAdmin 能連線囉,假設我們要為 phpMyAdmin 建立的一個連線帳號名稱為 giga 密碼為 virtual,在大於符號後面輸入:
GRANT ALL PRIVILEGES ON *.* TO 'giga'@'localhost'
IDENTIFIED BY 'virtual' WITH GRANT OPTION;
這邊是假設你的 Web Server 跟 MySQL 在同一台機器上,如果不是的話,請把 localhost 改成 Web Server 的 hostname 或 IP
完成後輸入 exit 可離開交談介面
然後到你的 Web Server 上面,安裝 phpMyAdmin:
cd /usr/ports/databases/phpmyadmin make install
設定 phpMyAdmin:
vi /usr/local/www/phpMyAdmin/config.inc.php
設定以下數值:
$cfg['Servers'][$i]['auth_type'] = 'http'
如果你的 Web Server 跟 MySQL 不在同一台機器上,請把下面這一行的 localhost 改掉:
$cfg['Servers'][$i]['host'] = 'localhost'
接下來改 httpd.conf (以 apache2 為例):
vi /usr/local/etc/apache2/httpd.conf
加入以下幾行
Alias /mysql/ "/usr/local/www/phpMyAdmin" <Directory "/usr/local/www/phpMyAdmin"> Options MultiViews FollowSymLinks AllowOverride All Order deny,allow Deny from all Allow from 192.168.0.1 Allow from 192.168.0.2 </Directory>
以上是設定只允許兩個 IP 連線,請依據你的需求更改,最後重新啟動 Web Server:
/usr/local/etc/rc.d/apache2.sh stop /usr/ocal/etc/rc.d/apache2.sh start
然後就可以用瀏覽器連到:
http://your.web.server/mysql/
輸入之前建立給 phpMyAdmin 用的帳號密碼就應該可以進去了..
成功進去後就可以開始做你想做的事了!
上面步驟以上所建立給 phpMyAdmin 用的帳號,會擁有全部的權限,建議可以做一些調整,拿掉不需要的部分,這樣的調整可以在 phpMyAdmin 的權限頁面中直接完成
另外,如果你有兩台 MySQL Server,想要設定 MySQL 的 Replication 功能,
請參考之前寫的另外一篇文章「Replication of MySQL database」
另外,如果要用 PHP 連接 MySQL 4.1,使用 BIG5 編碼的資料庫,記得在連線後執行:
$charset = mysql_query( "SET NAMES 'big5'", $dblink);
或者直接在 my.cnf 中加入底下這行(如果你確定所有的 DB 都是使用 BIG5 編碼的話):
init_connect='SET NAMES big5'