PHP加速 eAccelerator配置和使用指南_php技巧

WBOY
发布: 2016-05-17 09:32:12
原创
3226 人浏览过

前一段时间完成了服务器从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年,当时它是作为 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官方下载最新版的源码包:eaccelerator-0.9.5-beta.tar.bz2

#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

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

安装为 Zend extension 模式:

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"

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

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

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文档或者访问官方文档:ini setting

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

#mkdir /tmp/eaccelerator
#chmod 777 /tmp/eaccelerator

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

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

我的机器上同时还安装了Zend Optimizer3.0.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
    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

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

#tail /var/log/httpd/eAccelerator_log
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带给你的惊喜吧,根据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

接口列表:

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)

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

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

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) 来释放这个锁或等待程序请求结束时自动释放这个锁。
  例如:
 

    
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)
  例如:
 
eaccelerator_cache_output('test', 'echo time(); phpinfo();', 30); ?>

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

eaccelerator_cache_page($key, $ttl=0)
  将当前整页缓存 $ttl 秒。
  例如:
 

eaccelerator_cache_page($_SERVER['PHP_SELF'].'?GET='.serialize($_GET),30);
echo time();
phpinfo();
?>

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

2、PHP代码中使用eAccelerator加速

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


class test_cache {
 
var $pro = '你好';

 
函数test_cache( ) {
    
回声 "对象已创建!
n";
 
}
 
函数 函数() {
    
回声 ',世界!';
 
}
 
功能 现在($t ) {
    
回声 日期( '年-月-日 H:i:s'$t);
 
}
}

$ tt = eaccelerator_get("test_tt") ;
如果 (!$tt)
{
 
$tt = test_cache;
 
eaccelerator_put("test_tt ", $tt);
 
回声 没有缓存!
n;
}
其他 {
 
回声 已缓存
n;
}

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

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

复制代码 代码如下:

// #############################################################################
// eAccelerator

/**
* 用于从 eAccelerator 获取和初始化 vBulletin 数据存储的类
*
* @package vBulletin
* @version $Revision: 0.1 $
* @date $Date: 2005/06/12 13:14:18 $
*/
class vB_Datastore_eAccelerator extends vB_Datastore
{
/**
* 从 eAccelerator 中获取数据存储的内容
*
* @param array 要从数据存储中获取的项目数组
*
* @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'];
}

/**
* 从共享内存中获取数据并检测错误
*
* @param string 数据存储项的标题
*
* @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);
}




/**
* 更新相应的缓存文件
*
* @param string 数据存储项的标题
*
* @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 官方网站:http://eaccelerator.net
使用 eAccelerator 的网站?

http://www.advfn.com/ (2006/03/03) 高级金融网络,每天提供超过 700 万次页面点击。
http://www.domaincity.co.uk/ (2005/01/29) Andrew Hutchings - Linux Guru - 只是一条简短的消息,说明我们现在在 3 个节点中的 2 个节点上使用 eaccelerator 作为 mmcache 的替代品循环集群,每天250万次点击。我们将在接下来的几周内将其加倍,并实施新的集群。
http://www.ets-online.de/ (2005/02/07) Denny Reeh - 系统开发人员 - e/t/s 教学媒体提供了一个用 PHP 编写的电子学习服务器(远程学习系统)。我们主要由我们自己为客户托管系统。因此,我们有 5 个实时服务器(freebsd、apache2、php4、eaccelerator),每月点击量为 550 万次。首先,如果没有 eAccelerator,我们应该安装更多的服务器以获得良好的性能;其次,我们通过将脚本的中等响应时间分成四份来提高客户的便利性。
http://www.gorgoyle.com/ (2005/08/03) Gorgoyle.com 是另一个 Debian 个人服务器,只有一些迷路的互联网流浪者路过,由需要新鲜空气的辉煌 Celeron 433 提供支持... 使用 eAccelerator 的结果非常令人印象深刻:用户说服务器速度现在提高了 10000%(不是开玩笑!)所以谢谢大家,继续努力!服务器: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) Mafia-Incorporated 是一款成功的浏览器游戏,每天的页面浏览量约为 2,500,000 次,拥有超过 5000 名用户。服务器:PHP 版本 4.3.10-9、eAccelerator 0.9.2a、Debian、Apache 2.0.53
http://www.mondespersistants.com/ (2005/01/07) 另一个面向游戏的法国网站,拥有 6 000 个用户每月 000 次页面加载。 http://guildes.mondespersistants.com 是一个完整的 PHP5 oo 开发。这些网站运行在 freebsd / apache 1.3 / php 5.0.3 / eaccelerator 0.9.2
http://www.movi​​emaze.de/ (2005/12/09) Markus Ostertag - 电影迷宫是一个大型的德国在线 -杂志包含预告片、壁纸、评论、新闻等等。目前,我们使用三台服务器(带有 Apache 2、PHP4 的 Suse 和 Debian)和 eAccelerator,并向约 1 Mio 提供超过 3TB 的数据。每个月的用户。
http://www.rtvslo.si (2005/01/04) 斯洛文尼亚国家 RTV 电视台及其新闻/杂项门户网站和论坛。一年超过3500名用户和超过37000条论坛消息。两台用于大众的循环服务器和一台管理员服务器。每月 6 000 000 次页面加载。
http://www.shroomery.org/ (2006/03/28) 一个关于蘑菇和真菌学的网站,每月提供 20,000,000 个页面。 Web 和数据库服务器是相同的双 64 位 Xeon,具有 4GB 和运行 Gentoo 的 SCSI RAID5。 eAccelerator 帮助我们将页面生成时间控制在 0.1 秒以下!

http://www.sourceforge.net/ (2005/04/25) SourceForge.net 是世界上最大的开源软件开发网站,托管超过 100,000 个项目和超过 1,000,000 名注册用户,并拥有一个集中的用于管理项目、问题、通信和代码的资源。 SourceForge.net 拥有互联网上最大的开源代码和应用程​​序存储库,并且托管的开源开发产品比全球任何其他站点或网络都多。 SourceForge.net 为我们托管的项目和开源社区提供广泛的服务。 eAccelerator 用于其首页的网络服务器集群。
提供启用 eAccelerator 托管的公司?

http://lylix.net/ (2006/04/29) 在 Gentoo Linux 服务器上提供带有 Apache/2.0.55、PHP 5.0.5 和 eAccelerator 0.9.5 beta1 的虚拟主机。同时也是优质虚拟专用服务器 (VPS) 托管提供商,包括 32 位和 64 位平台。大多数 VPS 映像都预装了 LAMP 环境,并安装和配置了 eAccelerator。
http://www.ulyssis.org 一个学生组织,以非常便宜的价格为学生提供 shell 和互联网服务。
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!