一、eAccelerator介绍
1、背景
eAccelerator 是一个免费开源的PHP加速、优化、编译和动态缓存的项目,它可以通过缓存PHP代码编译后的结果来提高PHP脚本的性能,使得一向很复杂和离我们很远的 PHP脚本编译问题完全得到解决。通过使用eAccelerator,可以优化你的PHP代码执行速度,降低服务器负载,可以提高PHP应用执行速度最高 达10倍。
eAccelerator 项目诞生于2004年,当时它是作为 Turck MMCache 项 目的一个分支提出并投入开发的。 Turck MMCache 由 Dmitry Stogov 开发,是个非常优秀的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, Mac OS X, Solaris, AIX en HP-UX。
2、系统要求
php4 or php5
autoconf
automake
libtool
m4
eAccelerator 只支持使用 mod_php 或者 fastcgi mode 安装的PHP
?
3、安装
先去eAccelerator官方下载最新版的源码包:http://sourceforge.net/projects/eaccelerator/
1 | #tar -zxvf ./eaccelerator-0.9.5-beta2.tar.bz2#cd eaccelerator-0.9.5-beta2#export PHP_PREFIX= "/usr/local" (把PHP安装目录导入到环境变量,FreeBSD默认是/usr/local)# $PHP_PREFIX /bin/phpize#./configure --enable-eaccelerator=shared --with-php-config= $PHP_PREFIX /bin/php-config#make#make install
|
Copy after login
?
4、ini文件配置
安装完成,下面开始配置php.ini文件,eAccelerator提供了两种配置和调用方式,分别如下。
安装为 Zend extension 模式:
1 | 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"
|
Copy after login
?
如果你使用了thread safe模式安装的PHP,你必须使用 “zend_extension_ts” 替换第一行的 “zend_extension”.
安装为 PHP extension 模式:(这是大部分采用的方式)
?
1 | 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"
|
Copy after login
?
有关php.ini文件的详细配置说明,请参照源码目录的README文档或者访问官方文档:ini setting
完成安装配置后,我们最后要创建缓存目录
?
1 | # mkdir /tmp/eaccelerator# chmod 777 /tmp/eaccelerator
|
Copy after login
?5、验证安装结果
通过浏览器访问您的phpinfo()页面或者运行 php -i 得到php配置信息,里面如果看到类似下面的信息就表示安装成功了。
1 | This program makes use of the Zend Scripting Language Engine:Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies with eAccelerator v0.9.5-beta2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
|
Copy after login
?
如果你打开了eAccelerator的debug选项,可以从日志中看到类似下面的信息
1 | #tail / var /log/httpd/eAccelerator_logEACCELERATOR 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" ...
|
Copy after login
?
以上信息表示文件都得到了缓存和命中。
至此,我们就完成了全部的安装和配置,好好享受eAccelerator带给你的惊喜吧,根据Michael的测试,效果的确相当的好。
?
三、在PHP中可以使用eAccelerator的API开发
1、API和文档说明:
eAccelerator提供了便捷便捷而又稳定的本机缓存实现方式,由于大部分代码实现基于共享内存,所以只能在*nix平台中使用,Windows平台Michael就暂时不知道何时有这方面的支持了。
eAccelerator提供如下的API接口和文件:(下述文件均在源码包的doc/php/目录下)
文件列表:
?
1 | cache.phpdasm.phpencoder.phpinfo.phploader.phpsession.phpshared_memory.php
|
Copy after login
?
接口列表:
1 | array eaccelerator_cached_scripts ()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 )
|
Copy after login
?有关上述文档详细说明请参考官方文档:API Documents
?
2、PHP代码中使用eAccelerator加速
下面有一个测试的代码,你可以测试一下eAccelerator强大的威力:(该代码在 cli 模式下可能无效)
?
1 | <?phpclass 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);?>
|
Copy after login
?
另外,据说在著名的vBulletin 3.60Beta版里面已经集成了对eAccelerator的支持,下面是一段来自vBulletin里面的代码
?
四、附录和参考资料
eAccelerator 官方网站 :http://eaccelerator.net
?