zl程序教程

您现在的位置是:首页 >  后端

当前栏目

PHP加速eAccelerator配置和使用指南

PHP配置 加速 使用指南 eAccelerator
2023-06-13 09:14:10 时间
前一段时间完成了服务器从FreeBSD4.10到6.1的升级,同时把PHP也升级到了最新的PHP5.1.4,Apache也升级到了最新的Apache2.2,为了更好的提高系统的性能考虑对PHP再进行一些优化,前两年接触过MMCache和eAccelerator,尤其对eAccelerator非常喜欢,这次优化也选择了它,下面整理一些文档和大家分享。

目录:
一、eAccelerator介绍
1、背景
2、原理
二、安装和配置
1、支持平台
2、系统要求
3、安装
4、php.ini文件配置
5、验证安装
三、使用eAccelerator开发PHP代码
1、API文档和接口说明
2、开发范例
四、附录和参考资料

一、eAccelerator介绍

1、背景
eAccelerator是一个免费开源的PHP加速、优化、编译和动态缓存的项目,它可以通过缓存PHP代码编译后的结果来提高PHP脚本的性能,使得一向很复杂和离我们很远的PHP脚本编译问题完全得到解决。通过使用eAccelerator,可以优化你的PHP代码执行速度,降低服务器负载,可以提高PHP应用执行速度最高达10倍。

eAccelerator项目诞生于2004年,当时它是作为TurckMMCache项目的一个分支提出并投入开发的。TurckMMCache由DmitryStogov开发,是个非常优秀的PHP内存缓存加速系统,如今仍然有很大部分eAccelerator的代码应用到该项目中,目前该项目有很长时间没有更新了,对于最新的PHP5.x的支持还未推出。

2、原理
eAccelerator通过把经过编译后的PHP代码缓存到共享内存中,并在用户访问的时候直接调用从而起到高效的加速作用。它的效率非常高,从创建共享内存到查找编译后的代码都在非常短的时间内完成,对于不能缓存到共享内存中的文件和代码,eAccelerator还可以把他们缓存到系统磁盘上。

eAccelerator同样还支持PHP代码的编译和解释执行,你可以通过encoder.php脚本来对php代码进行编译达到保护代码的目的,经过编译后的代码必须运行在安装了eAccelerator的环境下。eAccelerator编译后的代码不能被反编译,它不象其他一些编译工具那样可以进行反编译,这将使得代码更加安全和高效。

二、eAccelerator安装配置

1、支持平台
由于aAccelerator提供了大部分基于共享内存的API,所以在*nix的平台上将得到更好的支持,虽然也发布了基于windows平台的binary版本,但我在这里就只提供基于*nix平台的配置和说明,目前可以支持的平台包括Linux,FreeBSD,OpenBSD,MacOSX,Solaris,AIXenHP-UX。

2、系统要求
php4orphp5
autoconf
automake
libtool
m4
eAccelerator只支持使用mod_php或者fastcgimode安装的PHP

3、安装
先去eAccelerator官方下载最新版的源码包:eaccelerator-0.9.5-beta.tar.bz2

#tar-zxvf./eaccelerator-0.9.5-beta2.tar.bz2
#cdeaccelerator-0.9.5-beta2
#exportPHP_PREFIX="/usr/local"(把PHP安装目录导入到环境变量,FreeBSD默认是/usr/local)
#$PHP_PREFIX/bin/phpize
#./configure--enable-eaccelerator=shared--with-php-config=$PHP_PREFIX/bin/php-config
#make
#makeinstall

4、ini文件配置
安装完成,下面开始配置php.ini文件,eAccelerator提供了两种配置和调用方式,分别如下。

安装为Zendextension模式:

zend_extension="/usr/local/lib/php/20050922/eaccelerator.so"
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"

如果你使用了threadsafe模式安装的PHP,你必须使用“zend_extension_ts”替换第一行的“zend_extension”.

安装为PHPextension模式:(这是大部分采用的方式)

extension="eaccelerator.so"
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"

有关php.ini文件的详细配置说明,请参照源码目录的README文档或者访问官方文档:inisetting

完成安装配置后,我们最后要创建缓存目录

#mkdir/tmp/eaccelerator
#chmod777/tmp/eaccelerator

5、验证安装结果
通过浏览器访问您的phpinfo()页面或者运行php-i得到php配置信息,里面如果看到类似下面的信息就表示安装成功了。

ThisprogrammakesuseoftheZendScriptingLanguageEngine:
ZendEnginev2.1.0,Copyright(c)1998-2006ZendTechnologies
   witheAcceleratorv0.9.5-beta2,Copyright(c)2004-2006eAccelerator,byeAccelerator

我的机器上同时还安装了ZendOptimizer3.0.1,所以看到的信息如下:

ThisprogrammakesuseoftheZendScriptingLanguageEngine:
ZendEnginev2.1.0,Copyright(c)1998-2006ZendTechnologies
   witheAcceleratorv0.9.5-beta2,Copyright(c)2004-2006eAccelerator,byeAccelerator
   withZendExtensionManagerv1.0.10,Copyright(c)2003-2006,byZendTechnologies
   withZendOptimizerv3.0.1,Copyright(c)1998-2006,byZendTechnologies

如果你打开了eAccelerator的debug选项,可以从日志中看到类似下面的信息

#tail/var/log/httpd/eAccelerator_log
EACCELERATORhit:"/var/www/toplee.com/blog/index.php"
EACCELERATORhit:"/var/www/toplee.com/blog/wp-blog-header.php"
EACCELERATORhit:"/var/www/toplee.com/blog/wp-config.php"
EACCELERATORhit:"/var/www/toplee.com/blog/wp-settings.php"
EACCELERATORhit:"/var/www/toplee.com/blog/wp-content/plugins/wp-cache/wp-cache-phase1.php"
...

以上信息表示文件都得到了缓存和命中。

至此,我们就完成了全部的安装和配置,好好享受eAccelerator带给你的惊喜吧,根据Michael的测试,效果的确相当的好。

三、在PHP中可以使用eAccelerator的API开发

1、API和文档说明:

eAccelerator提供了便捷便捷而又稳定的本机缓存实现方式,由于大部分代码实现基于共享内存,所以只能在*nix平台中使用,Windows平台Michael就暂时不知道何时有这方面的支持了。
eAccelerator提供如下的API接口和文件:(下述文件均在源码包的doc/php/目录下)

文件列表:

cache.php
dasm.php
encoder.php
info.php
loader.php
session.php
shared_memory.php

接口列表:

arrayeaccelerator_cached_scripts()
voideaccelerator_cache_output(string$key,string$eval_code,[int$ttl=0])
voideaccelerator_cache_page(string$key,[int$ttl=0])
voideaccelerator_cache_result(string$key,string$code,[int$ttl=0])
voideaccelerator_caching(boolean$flag)
voideaccelerator_clean()
voideaccelerator_clear()
arrayeaccelerator_dasm_file(mixed$filename)
mixedeaccelerator_encode(mixed$src,[mixed$prefix=""],[string$pre_content=""],[string$post_content=""]) 
voideaccelerator_gc()
mixedeaccelerator_get(string$key) 
arrayeaccelerator_info()
arrayeaccelerator_list_keys()
voideaccelerator_load()
booleaneaccelerator_lock(string$key)
voideaccelerator_optimizer(boolean$flag) 
voideaccelerator_purge()
booleaneaccelerator_put(string$key,mixed$value,[int$ttl=0])
arrayeaccelerator_removed_scripts()
booleaneaccelerator_rm(string$key)
voideaccelerator_rm_page(string$key) 
booleaneaccelerator_set_session_handlers()
booleaneaccelerator_unlock(string$key)

有关上述文档详细说明请参考官方文档:APIDocuments

下面有部分网友翻译后的接口说明:

eaccelerator_put($key,$value,$ttl=0)
 将$value以$key为键名存进缓存(php4下支持对像类型,看源码好像zend2里不支持了),$ttl是这个缓存的生命周期,单位是秒,省略该参数或指定为0表示不限时,直到服务器重启清空为止。

eaccelerator_get($key)
 根据$key从缓存中返回相应的eaccelerator_put()存进去的数据,如果这项缓存已经过期或不存在那么返回值是NULL

eaccelerator_rm($key)
 根据$key移除缓存

eaccelerator_gc()
 移除清理所有已过期的key

eaccelerator_lock($key)
 为$key加上锁定操作,以保证多进程多线程操作时数据的同步。需要调用eaccelerator_unlock($key)来释放这个锁或等待程序请求结束时自动释放这个锁。
 例如:
 <?php
   eaccelerator_lock("count");
   eaccelerator_put("count",eaccelerator_get("count")+1));
 ?>

eaccelerator_unlock($key)
 根据$key释放锁

eaccelerator_cache_output($key,$eval_code,$ttl=0)
 将$eval_code代码的输出缓存$ttl秒,($ttl参数同eacclerator_put)
 例如:
 <?phpeaccelerator_cache_output("test","echotime();phpinfo();",30);?>

eaccelerator_cache_result($key,$eval_code,$ttl=0)
 将$eval_code代码的执行结果缓存$ttl秒,($ttl参数同eacclerator_put),类似cache_output
 例如:
 <?phpeaccelerator_cache_result("test","time()."Hello";",30);?>

eaccelerator_cache_page($key,$ttl=0)
 将当前整页缓存$ttl秒。
 例如:
 <?php
   eaccelerator_cache_page($_SERVER["PHP_SELF"]."?GET=".serialize($_GET),30);
   echotime();
   phpinfo();
 ?>

eaccelerator_rm_page($key)
 删除由 eaccelerator_cache_page()执行的缓存,参数也是$key

2、PHP代码中使用eAccelerator加速

下面有一个测试的代码,你可以测试一下eAccelerator强大的威力:(该代码在cli模式下可能无效)

<?php
classtest_cache{
 var$pro="hello";

 functiontest_cache(){
   echo"ObjectCreated!<br>\n";
 }
 functionfunc(){
   echo",theworld!";
 }
 functionnow($t){
   echodate("Y-m-dH:i:s",$t);
 }
}

$tt=eaccelerator_get("test_tt");
if(!$tt)
{
 $tt=newtest_cache;
 eaccelerator_put("test_tt",$tt);
 echo"nocached!<br>\n";
}
else{
 echo"cached<br>\n";
}

echo$tt->pro;
$tt->func();
$tt->now(time()+86400);
?>

另外,据说在著名的vBulletin3.60Beta版里面已经集成了对eAccelerator的支持,下面是一段来自vBulletin里面的代码

复制代码代码如下:
//#############################################################################
//eAccelerator

/**
*ClassforfetchingandinitializingthevBulletindatastorefromeAccelerator
*
*@packagevBulletin
*@version$Revision:0.1$
*@date$Date:2005/06/1213:14:18$
*/
classvB_Datastore_eAcceleratorextendsvB_Datastore
{
/**
*FetchesthecontentsofthedatastorefromeAccelerator
*
*@paramarrayArrayofitemstofetchfromthedatastore
*
*@returnvoid
*/
functionfetch($itemarray)
{
if(!function_exists("eaccelerator_get"))
{
trigger_error("eAcceleratornotinstalled",E_USER_ERROR);
}

foreach($this->defaultitemsAS$item)
{
$this->do_fetch($item);
}

if(is_array($itemarray))
{
foreach($itemarrayAS$item)
{
$this->do_fetch($item);
}
}

$this->check_options();

//settheversionnumbervariable
$this->registry->versionnumber=&$this->registry->options["templateversion"];
}

/**
*Fetchesthedatafromsharedmemoryanddetectserrors
*
*@paramstringtitleofthedatastoreitem
*
*@returnvoid
*/
functiondo_fetch($title)
{
$data=eaccelerator_get($title);
if($data===null)
{//appearsitsnotthere,letsgrabthedata,lockthesharedmemoryandputitin
$data="";
$dataitem=$this->dbobject->query_first("
SELECTtitle,dataFROM".TABLE_PREFIX."datastore
WHEREtitle="".$this->dbobject->escape_string($title).""
");
if(!empty($dataitem["title"]))
{
$data=&$dataitem["data"];
$this->build($dataitem["title"],$dataitem["data"]);
}
}
$this->register($title,$data);
}




/**
*Updatestheappropriatecachefile
*
*@paramstringtitleofthedatastoreitem
*
*@returnvoid
*/
functionbuild($title,$data)
{
if(!function_exists("eaccelerator_put"))
{
trigger_error("eAcceleratornotinstalled",E_USER_ERROR);
}
eaccelerator_lock($title);
eaccelerator_put($title,$data);
eaccelerator_unlock($title);
}
}

四、附录和参考资料
eAccelerator官方网站:http://eaccelerator.net
WebsitesusingeAccelerator?

http://www.advfn.com/(2006/03/03)AdvancedFinancialNetwork,servesover7millionpagehitsperday.
http://www.domaincity.co.uk/(2005/01/29)AndrewHutchings-LinuxGuru-Justaquickmessagetosaywearenowusingeacceleratorasareplacementformmcacheon2ofour3noderoundrobinclusters,2.5millionhitsperday.Wewillbedoublingthisinthenextfewweek,aswellasimplementingnewclusters.
http://www.ets-online.de/(2005/02/07)DennyReeh-SystemDeveloper-Thee/t/sdidacticmediaprovidesanelearningserver(DistanceLearningSystem)writteninPHP.Wearehostingthesystemsforourcustomersmainlybyourself.Sowehave5live-servers(freebsd,apache2,php4,eaccelerator)with5.5millionhitspermonth.FirstwithouteAcceleratorweshouldhaveinstalledmoreserversforgoodperformanceandsecondlyweimprovethecustomerconveniencebyquarteringthemediumresponsetimeofascript.
http://www.gorgoyle.com/(2005/08/03)Gorgoyle.comisYetAnotherDebianPersonalServerwithjustafewlostInternetwandererspassingby,poweredbyagloriousCeleron433thatneededsomefreshair…WitheAcceleratortheresultisquiteimpressive:userssaytheserverspeedisnow10000%higher(nojoke!)Sothankyouallandkeepupthegoodwork!!!Server:eAccelerator0.9.5beta1Apache/2.0.55(Debian)mod_python/3.1.3Python/2.3.5PHP/4.4.2-1mod_ssl/2.0.55OpenSSL/0.9.8amod_perl/2.0.2
http://www.mafia-inc.de/(2005/05/24)TheMafia-IncorporatedisasuccesfullBrowsergamewitharound2.500.000pageimpressionseachdayandover5000users.Server:PHPVersion4.3.10-9,eAccelerator0.9.2a,Debian,Apache2.0.53
http://www.mondespersistants.com/(2005/01/07)Anothergameorientedfrenchwebsitewith6000000pageloadsmonthly.http://guildes.mondespersistants.comisafullPHP5oodevelopment.Theseswebsitesarerunningunderfreebsd/apache1.3/php5.0.3/eaccelerator0.9.2
http://www.moviemaze.de/(2005/12/09)MarkusOstertag-MovieMazeisalargegermanonline-magazinewithtrailer,wallpaper,reviews,newsandmuchmore.Currentlyweusethreeservers(Suse&DebianwithApache2,PHP4)witheAcceleratorandprovidemorethan3TBdatato~1Mio.userseachmonth.
http://www.rtvslo.si(2005/01/04)TheSlovenianNationalRTVStationanditsnews/miscportalwithforums.Over3500usersandmorethan37000forummessagesinayear.Tworound-robinserversforthemasses,andanadministratorserver.6000000pageloadsmonthly.
http://www.shroomery.org/(2006/03/28)Asiteaboutmushroomsandmycology,serving20,000,000pagespermonth.Webanddatabaseserverareidenticaldual64-bitXeonswith4GBandSCSIRAID5runningGentoo.eAcceleratorhelpkeepourpagegenerationtimeunder.1second!

http://www.sourceforge.net/(2005/04/25)SourceForge.netistheworld"slargestOpenSourcesoftwaredevelopmentwebsite,hostingmorethan100,000projectsandover1,000,000registereduserswithacentralizedresourceformanagingprojects,issues,communications,andcode.SourceForge.nethasthelargestrepositoryofOpenSourcecodeandapplicationsavailableontheInternet,andhostsmoreOpenSourcedevelopmentproductsthananyothersiteornetworkworldwide.SourceForge.netprovidesawidevarietyofservicestoprojectswehost,andtotheOpenSourcecommunity.eAcceleratorisusedonthewebserverclusterfortheirfrontpage.
CompaniesofferinghostingwitheAcceleratorenabled?

http://lylix.net/(2006/04/29)Offeringwebhostingw/Apache/2.0.55,PHP5.0.5,andeAccelerator0.9.5beta1onGentooLinuxservers.AlsoaproviderofqualityVirtualPrivateServer(VPS)hosting,including32and64-bitplatforms.MostVPSimageshaveapre-installedLAMPenvironmentw/eAcceleratorinstalledandconfigured.
http://www.ulyssis.orgAstudentorganisationwhichprovidesshellandinternetservicesforstudentsatverycheapprices.