PHP加速 eAccelerator配置和使用指南
目錄:
一、eAccelerator介紹
1、背景
2、原理
二、安裝和配置
1、支持平臺(tái)
2、系統(tǒng)要求
3、安裝
4、php.ini文件配置
5、驗(yàn)證安裝
三、使用eAccelerator開(kāi)發(fā)PHP代碼
1、API文檔和接口說(shuō)明
2、開(kāi)發(fā)范例
四、附錄和參考資料
一、eAccelerator介紹
1、背景
eAccelerator 是一個(gè)免費(fèi)開(kāi)源的PHP加速、優(yōu)化、編譯和動(dòng)態(tài)緩存的項(xiàng)目,它可以通過(guò)緩存PHP代碼編譯后的結(jié)果來(lái)提高PHP腳本的性能,使得一向很復(fù)雜和離我們很遠(yuǎn)的PHP腳本編譯問(wèn)題完全得到解決。通過(guò)使用eAccelerator,可以?xún)?yōu)化你的PHP代碼執(zhí)行速度,降低服務(wù)器負(fù)載,可以提高PHP應(yīng)用執(zhí)行速度最高達(dá)10倍。
eAccelerator 項(xiàng)目誕生于2004年,當(dāng)時(shí)它是作為 Turck MMCache 項(xiàng)目的一個(gè)分支提出并投入開(kāi)發(fā)的。 Turck MMCache 由 Dmitry Stogov 開(kāi)發(fā),是個(gè)非常優(yōu)秀的PHP內(nèi)存緩存加速系統(tǒng),如今仍然有很大部分 eAccelerator 的代碼應(yīng)用到該項(xiàng)目中,目前該項(xiàng)目有很長(zhǎng)時(shí)間沒(méi)有更新了,對(duì)于最新的PHP5.x的支持還未推出。
2、原理
eAccelerator 通過(guò)把經(jīng)過(guò)編譯后的PHP代碼緩存到共享內(nèi)存中,并在用戶訪問(wèn)的時(shí)候直接調(diào)用從而起到高效的加速作用。它的效率非常高,從創(chuàng)建共享內(nèi)存到查找編譯后的代碼都在非常短的時(shí)間內(nèi)完成,對(duì)于不能緩存到共享內(nèi)存中的文件和代碼,eAccelerator還可以把他們緩存到系統(tǒng)磁盤(pán)上。
eAccelerator 同樣還支持PHP代碼的編譯和解釋執(zhí)行,你可以通過(guò)encoder.php腳本來(lái)對(duì)php代碼進(jìn)行編譯達(dá)到保護(hù)代碼的目的,經(jīng)過(guò)編譯后的代碼必須運(yùn)行在安裝了eAccelerator的環(huán)境下。eAccelerator編譯后的代碼不能被反編譯,它不象其他一些編譯工具那樣可以進(jìn)行反編譯,這將使得代碼更加安全和高效。
二、eAccelerator安裝配置
1、支持平臺(tái)
由于aAccelerator提供了大部分基于共享內(nèi)存的API,所以在*nix的平臺(tái)上將得到更好的支持,雖然也發(fā)布了基于windows平臺(tái)的binary版本,但我在這里就只提供基于*nix平臺(tái)的配置和說(shuō)明,目前可以支持的平臺(tái)包括Linux, FreeBSD, OpenBSD, Mac OS X, Solaris, AIX en HP-UX。
2、系統(tǒng)要求
php4 or php5
autoconf
automake
libtool
m4
eAccelerator 只支持使用 mod_php 或者 fastcgi mode 安裝的PHP
3、安裝
先去eAccelerator官方下載最新版的源碼包:eaccelerator-0.9.5-beta.tar.bz2
#cd eaccelerator-0.9.5-beta2
#export PHP_PREFIX="/usr/local" (把PHP安裝目錄導(dǎo)入到環(huán)境變量,F(xiàn)reeBSD默認(rèn)是/usr/local)
#$PHP_PREFIX/bin/phpize
#./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
#make
#make install
4、ini文件配置
安裝完成,下面開(kāi)始配置php.ini文件,eAccelerator提供了兩種配置和調(diào)用方式,分別如下。
安裝為 Zend extension 模式:
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
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"
如果你使用了thread safe模式安裝的PHP,你必須使用 “zend_extension_ts” 替換第一行的 “zend_extension”.
安裝為 PHP extension 模式:(這是大部分采用的方式)
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
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"
有關(guān)php.ini文件的詳細(xì)配置說(shuō)明,請(qǐng)參照源碼目錄的README文檔或者訪問(wèn)官方文檔:ini setting
完成安裝配置后,我們最后要?jiǎng)?chuàng)建緩存目錄
#chmod 777 /tmp/eaccelerator
5、驗(yàn)證安裝結(jié)果
通過(guò)瀏覽器訪問(wèn)您的phpinfo()頁(yè)面或者運(yùn)行 php -i 得到php配置信息,里面如果看到類(lèi)似下面的信息就表示安裝成功了。
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
with eAccelerator v0.9.5-beta2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
我的機(jī)器上同時(shí)還安裝了Zend Optimizer3.0.1,所以看到的信息如下:
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
with eAccelerator v0.9.5-beta2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
with Zend Extension Manager v1.0.10, Copyright (c) 2003-2006, by Zend Technologies
with Zend Optimizer v3.0.1, Copyright (c) 1998-2006, by Zend Technologies
如果你打開(kāi)了eAccelerator的debug選項(xiàng),可以從日志中看到類(lèi)似下面的信息
EACCELERATOR hit: "/var/www/toplee.com/blog/index.php"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-blog-header.php"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-config.php"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-settings.php"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-content/plugins/wp-cache/wp-cache-phase1.php"
...
以上信息表示文件都得到了緩存和命中。
至此,我們就完成了全部的安裝和配置,好好享受eAccelerator帶給你的驚喜吧,根據(jù)Michael的測(cè)試,效果的確相當(dāng)?shù)暮谩?/P>
三、在PHP中可以使用eAccelerator的API開(kāi)發(fā)
1、API和文檔說(shuō)明:
eAccelerator提供了便捷便捷而又穩(wěn)定的本機(jī)緩存實(shí)現(xiàn)方式,由于大部分代碼實(shí)現(xiàn)基于共享內(nèi)存,所以只能在*nix平臺(tái)中使用,Windows平臺(tái)Michael就暫時(shí)不知道何時(shí)有這方面的支持了。
eAccelerator提供如下的API接口和文件:(下述文件均在源碼包的doc/php/目錄下)
文件列表:
dasm.php
encoder.php
info.php
loader.php
session.php
shared_memory.php
接口列表:
void eaccelerator_cache_output (string $key, string $eval_code, [int $ttl = 0])
void eaccelerator_cache_page (string $key, [int $ttl = 0])
void eaccelerator_cache_result (string $key, string $code, [int $ttl = 0])
void eaccelerator_caching (boolean $flag)
void eaccelerator_clean ()
void eaccelerator_clear ()
array eaccelerator_dasm_file (mixed $filename)
mixed eaccelerator_encode (mixed $src, [mixed $prefix = ''], [string $pre_content = ''], [string $post_content = ''])
void eaccelerator_gc ()
mixed eaccelerator_get (string $key)
array eaccelerator_info ()
array eaccelerator_list_keys ()
void eaccelerator_load ()
boolean eaccelerator_lock (string $key)
void eaccelerator_optimizer (boolean $flag)
void eaccelerator_purge ()
boolean eaccelerator_put (string $key, mixed $value, [int $ttl = 0])
array eaccelerator_removed_scripts ()
boolean eaccelerator_rm (string $key)
void eaccelerator_rm_page (string $key)
boolean eaccelerator_set_session_handlers ()
boolean eaccelerator_unlock (string $key)
有關(guān)上述文檔詳細(xì)說(shuō)明請(qǐng)參考官方文檔:API Documents
下面有部分網(wǎng)友翻譯后的接口說(shuō)明:
將 $value 以 $key 為鍵名存進(jìn)緩存(php4下支持對(duì)像類(lèi)型,看源碼好像zend2里不支持了),$ttl 是這個(gè)緩存的生命周期,單位是秒,省略該參數(shù)或指定為 0 表示不限時(shí),直到服務(wù)器重啟清空為止。
eaccelerator_get($key)
根據(jù) $key 從緩存中返回相應(yīng)的 eaccelerator_put() 存進(jìn)去的數(shù)據(jù),如果這項(xiàng)緩存已經(jīng)過(guò)期或不存在那么返回值是 NULL
eaccelerator_rm($key)
根據(jù) $key 移除緩存
eaccelerator_gc()
移除清理所有已過(guò)期的 key
eaccelerator_lock($key)
為 $key 加上鎖定操作,以保證多進(jìn)程多線程操作時(shí)數(shù)據(jù)的同步。需要調(diào)用 eaccelerator_unlock($key) 來(lái)釋放這個(gè)鎖或等待程序請(qǐng)求結(jié)束時(shí)自動(dòng)釋放這個(gè)鎖。
例如:
<?php
eaccelerator_lock("count");
eaccelerator_put("count",eaccelerator_get("count")+1));
?>
eaccelerator_unlock($key)
根據(jù) $key 釋放鎖
eaccelerator_cache_output($key, $eval_code, $ttl=0)
將 $eval_code 代碼的輸出緩存 $ttl 秒,($ttl參數(shù)同 eacclerator_put)
例如:
<?php eaccelerator_cache_output('test', 'echo time(); phpinfo();', 30); ?>
eaccelerator_cache_result($key, $eval_code, $ttl=0)
將 $eval_code 代碼的執(zhí)行結(jié)果緩存 $ttl 秒,($ttl參數(shù)同 eacclerator_put),類(lèi)似 cache_output
例如:
<?php eaccelerator_cache_result('test', ' time() . "Hello";', 30); ?>
eaccelerator_cache_page($key, $ttl=0)
將當(dāng)前整頁(yè)緩存 $ttl 秒。
例如:
<?php
eaccelerator_cache_page($_SERVER['PHP_SELF'].'?GET='.serialize($_GET),30);
echo time();
phpinfo();
?>
eaccelerator_rm_page($key)
刪除由 eaccelerator_cache_page() 執(zhí)行的緩存,參數(shù)也是 $key
2、PHP代碼中使用eAccelerator加速
下面有一個(gè)測(cè)試的代碼,你可以測(cè)試一下eAccelerator強(qiáng)大的威力:(該代碼在 cli 模式下可能無(wú)效)
class test_cache {
var $pro = 'hello';
function test_cache() {
echo "Object Created!<br>\n";
}
function func() {
echo ', the world!';
}
function now($t) {
echo date('Y-m-d H:i:s', $t);
}
}
$tt = eaccelerator_get("test_tt");
if (!$tt)
{
$tt = new test_cache;
eaccelerator_put("test_tt", $tt);
echo "no cached!<br>\n";
}
else {
echo "cached<br>\n";
}
echo $tt->pro;
$tt->func();
$tt->now(time() + 86400);
?>
另外,據(jù)說(shuō)在著名的vBulletin 3.60Beta版里面已經(jīng)集成了對(duì)eAccelerator的支持,下面是一段來(lái)自vBulletin里面的代碼
// #############################################################################
// eAccelerator
/**
* Class for fetching and initializing the vBulletin datastore from eAccelerator
*
* @package vBulletin
* @version $Revision: 0.1 $
* @date $Date: 2005/06/12 13:14:18 $
*/
class vB_Datastore_eAccelerator extends vB_Datastore
{
/**
* Fetches the contents of the datastore from eAccelerator
*
* @param array Array of items to fetch from the datastore
*
* @return void
*/
function fetch($itemarray)
{
if (!function_exists('eaccelerator_get'))
{
trigger_error("eAccelerator not installed", E_USER_ERROR);
}
foreach ($this->defaultitems AS $item)
{
$this->do_fetch($item);
}
if (is_array($itemarray))
{
foreach ($itemarray AS $item)
{
$this->do_fetch($item);
}
}
$this->check_options();
// set the version number variable
$this->registry->versionnumber =& $this->registry->options['templateversion'];
}
/**
* Fetches the data from shared memory and detects errors
*
* @param string title of the datastore item
*
* @return void
*/
function do_fetch($title)
{
$data = eaccelerator_get($title);
if ($data === null)
{ // appears its not there, lets grab the data, lock the shared memory and put it in
$data = '';
$dataitem = $this->dbobject->query_first("
SELECT title, data FROM " . TABLE_PREFIX . "datastore
WHERE title = '" . $this->dbobject->escape_string($title) ."'
");
if (!empty($dataitem['title']))
{
$data =& $dataitem['data'];
$this->build($dataitem['title'], $dataitem['data']);
}
}
$this->register($title, $data);
}
/**
* Updates the appropriate cache file
*
* @param string title of the datastore item
*
* @return void
*/
function build($title, $data)
{
if (!function_exists('eaccelerator_put'))
{
trigger_error("eAccelerator not installed", E_USER_ERROR);
}
eaccelerator_lock($title);
eaccelerator_put($title, $data);
eaccelerator_unlock($title);
}
}
四、附錄和參考資料
eAccelerator 官方網(wǎng)站 :http://eaccelerator.net
Websites using eAccelerator ?
http://www.advfn.com/ (2006/03/03) Advanced Financial Network, serves over 7 million page hits per day.
http://www.domaincity.co.uk/ (2005/01/29) Andrew Hutchings - Linux Guru - Just a quick message to say we are now using eaccelerator as a replacement for mmcache on 2 of our 3 node round robin clusters, 2.5million hits per day. We will be doubling this in the next few week, as well as implementing new clusters.
http://www.ets-online.de/ (2005/02/07) Denny Reeh - System Developer - The e/t/s didactic media provides an elearning server (Distance Learning System) written in PHP. We are hosting the systems for our customers mainly by ourself. So we have 5 live-servers (freebsd, apache2, php4, eaccelerator) with 5.5 million hits per month. First without eAccelerator we should have installed more servers for good performance and secondly we improve the customer convenience by quartering the medium response time of a script.
http://www.gorgoyle.com/ (2005/08/03) Gorgoyle.com is Yet Another Debian Personal Server with just a few lost Internet wanderers passing by, powered by a glorious Celeron 433 that needed some fresh air… With eAccelerator the result is quite impressive: users say the server speed is now 10000% higher (no joke!) So thank you all and keep up the good work!!! Server: eAccelerator 0.9.5 beta 1 Apache/2.0.55 (Debian) mod_python/3.1.3 Python/2.3.5 PHP/4.4.2-1 mod_ssl/2.0.55 OpenSSL/0.9.8a mod_perl/2.0.2
http://www.mafia-inc.de/ (2005/05/24) The Mafia-Incorporated is a succesfull Browser game with around 2.500.000 page impressions each day and over 5000 users. Server: PHP Version 4.3.10-9, eAccelerator 0.9.2a, Debian , Apache 2.0.53
http://www.mondespersistants.com/ (2005/01/07) An other game oriented french website with 6 000 000 pageloads monthly. http://guildes.mondespersistants.com is a full PHP5 oo development. Theses websites are running under freebsd / apache 1.3 / php 5.0.3 / eaccelerator 0.9.2
http://www.moviemaze.de/ (2005/12/09) Markus Ostertag - Movie Maze is a large german online-magazine with trailer, wallpaper, reviews, news and much more. Currently we use three servers (Suse & Debian with Apache 2, PHP4) with eAccelerator and provide more than 3TB data to ~1 Mio. users each month.
http://www.rtvslo.si (2005/01/04) The Slovenian National RTV Station and its news/misc portal with forums. Over 3500 users and more than 37000 forum messages in a year. Two round-robin servers for the masses, and an administrator server. 6 000 000 pageloads monthly.
http://www.shroomery.org/ (2006/03/28) A site about mushrooms and mycology, serving 20,000,000 pages per month. Web and database server are identical dual 64-bit Xeons with 4GB and SCSI RAID5 running Gentoo. eAccelerator help keep our page generation time under .1 second!
http://www.sourceforge.net/ (2005/04/25) SourceForge.net is the world's largest Open Source software development web site, hosting more than 100,000 projects and over 1,000,000 registered users with a centralized resource for managing projects, issues, communications, and code. SourceForge.net has the largest repository of Open Source code and applications available on the Internet, and hosts more Open Source development products than any other site or network worldwide. SourceForge.net provides a wide variety of services to projects we host, and to the Open Source community. eAccelerator is used on the webserver cluster for their frontpage.
Companies offering hosting with eAccelerator enabled ?
http://lylix.net/ (2006/04/29) Offering webhosting w/ Apache/2.0.55, PHP 5.0.5, and eAccelerator 0.9.5 beta1 on Gentoo Linux servers. Also a provider of quality Virtual Private Server (VPS) hosting, including 32 and 64-bit platforms. Most VPS images have a pre-installed LAMP environment w/ eAccelerator installed and configured.
http://www.ulyssis.org A student organisation which provides shell and internet services for students at very cheap prices.
相關(guān)文章
php線性表順序存儲(chǔ)實(shí)現(xiàn)代碼(增刪查改)
php實(shí)現(xiàn)線性表順序存儲(chǔ)的代碼,需要的朋友可以參考下2012-02-02PHP正則表達(dá)式替換站點(diǎn)關(guān)鍵字鏈接后空白的解決方法
這篇文章主要介紹了PHP正則表達(dá)式替換站點(diǎn)關(guān)鍵字鏈接后空白的問(wèn)題解決,需要的朋友可以參考下2014-09-09php驗(yàn)證郵箱和ip地址最簡(jiǎn)單方法匯總
這篇文章為大家分享了php驗(yàn)證郵箱和ip地址最簡(jiǎn)單的方法,,需要的朋友可以參考下2015-10-10使用cookie實(shí)現(xiàn)統(tǒng)計(jì)訪問(wèn)者登陸次數(shù)
本篇文章是對(duì)使用cookie實(shí)現(xiàn)統(tǒng)計(jì)訪問(wèn)者登陸次數(shù)的代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP實(shí)現(xiàn)蛇形矩陣,回環(huán)矩陣及數(shù)字螺旋矩陣的方法分析
這篇文章主要介紹了PHP實(shí)現(xiàn)蛇形矩陣,回環(huán)矩陣及數(shù)字螺旋矩陣的方法,結(jié)合具體實(shí)例形式分析了蛇形矩陣,回環(huán)矩陣及數(shù)字螺旋矩陣的概念、表示方法及php實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-05-05- PHP Token(令牌)設(shè)計(jì) 設(shè)計(jì)目標(biāo): 避免重復(fù)提交數(shù)據(jù). 檢查來(lái)路,是否是外部提交 匹配要執(zhí)行的動(dòng)作(如果有多個(gè)邏輯在同一個(gè)頁(yè)面實(shí)現(xiàn),比如新增,刪除,修改放到一個(gè)PHP文件里操作) 這里所說(shuō)的token是在頁(yè)面顯示的時(shí)候,寫(xiě)到FORM的一個(gè)隱藏表單項(xiàng)(type=hidden). token不可明文,如果是明文,那就太危險(xiǎn)了,所以要采用一定的加密方式.密文要可逆.俺算法很白癡,所以采用了網(wǎng)上一個(gè)現(xiàn)成的方法.2008-03-03
php使用ZipArchive函數(shù)實(shí)現(xiàn)文件的壓縮與解壓縮
這篇文章主要介紹了php使用ZipArchive函數(shù)實(shí)現(xiàn)文件的壓縮與解壓縮,需要的朋友可以參考下2015-10-10