PHP加速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年,当时它是作为
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官方下载最新版的源码包:
#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模式:
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模式:(这是大部分采用的方式)
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文档或者访问官方文档:
完成安装配置后,我们最后要创建缓存目录
#chmod777/tmp/eaccelerator
5、验证安装结果
通过浏览器访问您的phpinfo()页面或者运行php-i得到php配置信息,里面如果看到类似下面的信息就表示安装成功了。
ZendEnginev2.1.0,Copyright(c)1998-2006ZendTechnologies
witheAcceleratorv0.9.5-beta2,Copyright(c)2004-2006eAccelerator,byeAccelerator
我的机器上同时还安装了ZendOptimizer3.0.1,所以看到的信息如下:
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选项,可以从日志中看到类似下面的信息
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/目录下)
文件列表:
dasm.php
encoder.php
info.php
loader.php
session.php
shared_memory.php
接口列表:
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)
有关上述文档详细说明请参考官方文档:
下面有部分网友翻译后的接口说明:
将$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)来释放这个锁或等待程序请求结束时自动释放这个锁。
例如:
eaccelerator_unlock($key)
根据$key释放锁
eaccelerator_cache_output($key,$eval_code,$ttl=0)
将$eval_code代码的输出缓存$ttl秒,($ttl参数同eacclerator_put)
例如:
eaccelerator_cache_result($key,$eval_code,$ttl=0)
将$eval_code代码的执行结果缓存$ttl秒,($ttl参数同eacclerator_put),类似cache_output
例如:
eaccelerator_cache_page($key,$ttl=0)
将当前整页缓存$ttl秒。
例如:
eaccelerator_rm_page($key)
删除由 eaccelerator_cache_page()执行的缓存,参数也是$key
2、PHP代码中使用eAccelerator加速
下面有一个测试的代码,你可以测试一下eAccelerator强大的威力:(该代码在cli模式下可能无效)