ホームページ >php教程 >php手册 >PHP アクセラレーション eAccelerator の構成と使用ガイド

PHP アクセラレーション eAccelerator の構成と使用ガイド

WBOY
WBOYオリジナル
2016-06-13 12:23:142619ブラウズ

前一段时间完成了服务器从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)
$key をキー名として $value をキャッシュに保存します (オブジェクトタイプは php4 でサポートされていますが、ソースコードを見ると、 zend2 ではサポートされていないようです)、 $ttl はこのキャッシュのライフサイクル (秒単位) です。このパラメータを省略するか、0 を指定すると、サーバーが再起動されてクリアされるまでの時間制限がありません。

eaccelerator_get($key)
$key に従って、キャッシュから対応する eaccelerator_put() に格納されたデータを返します。キャッシュの有効期限が切れているか、キャッシュが存在しない場合、戻り値は NULL
です。
eaccelerator_rm($key)
$key に従ってキャッシュを削除します

eaccelerator_gc()
期限切れのキーをすべて削除してクリーンアップします

eaccelerator_lock($key)
$key とロック操作の場合、マルチプロセスおよびマルチスレッド操作中のデータ同期を確保します。 eaccelerator_unlock($key) を呼び出してこのロックを解放するか、プログラム要求によってこのロックが自動的に解放されるのを待つ必要があります。
例:

eaccelerator_lock("カウント");
eaccelerator_put( " カウント",eaccelerator_get("カウント) ") 1));
?>

eaccelerator_unlock($key)
$key に従ってロックを解除します

eaccelerator_cache_output($key, $eval_code, $ttl=0)
$eval_code コードの出力を $ttl 秒間キャッシュします ($ttl パラメーターは eacclerator_put と同じです)
例:
eaccelerator_cache_output('テスト', 'エコー時間( );', 30) ; ?>

eaccelerator_cache_result($key, $eval_code, $ttl=0)
$ttl の $eval_code コードの実行結果をキャッシュします。秒、($ttl パラメータは eaccelerator_put と同じです)、cache_output
に似ています。 例:
eaccelerator_cache_result('テスト', ' time() . "こんにちは";' , 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 模式下可能无效)


クラス test_cache {
var $pro = 'こんにちは';

関数 test_cache( ) {
エコー "オブジェクト作成しました!
n";
}
関数 関数() {
エコー '、世界!';
}
関数 現在($t ) {
エコー 日付( 'Y-m-d H:i:s', $t);
}
}

$ tt = eaccelerator_get("test_tt") ;
if (!$tt)
{
$tt = 新規 test_cache;
eaccelerator_put("test_tt ", $tt);
echo "キャッシュされていません!
n";
}
else {
echo "キャッシュされました
n";
}

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

さらに、eAccelerator のサポートは有名な vBulletin 3.60Beta バージョンに統合されていると言われています。以下は 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 がインストールされていません", 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(); // バージョン番号変数を設定します
$this->registry->versionnumber =& $this->registry->options['templateversion']
}

/* *
* 共有メモリからデータを取得し、エラーを検出します
*
* @param データストア項目の文字列タイトル
*
* @return void
*/
function do_fetch($title)
{
$data = eaccelerator_get($title);
if ($data === null)
{ // が表示されますそこにはありません。データを取得し、共有メモリをロックして、
$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 データストア アイテムの文字列タイトル
*
* @return void
*/
function build($title, $data)
{
if (!function_exists('eaccelerator_put'))
{
trigger_error("eAccelerator がインストールされていません", E_USER_ERROR) );
}
eaccelerator_lock($title);
eaccelerator_unlock($title);
四、付录和参考资料
eAccelerator 官方网站 :http://eaccelerator.net
eAccelerator を使用している Web サイト ?

http://www.advfn.com/ (2006/03/03) Advanced Financial Network は、1 日あたり 700 万を超えるページ ヒットを処理します。
http://www.domaincity.co.uk/ (2005/01/29) Andrew Hutchings - Linux の第一人者 - 3 つのノードのうち 2 つで mmcache の代わりに eaccelerator を使用しているという簡単なメッセージです。ラウンド ロビン クラスター、1 日あたり 250 万ヒット。今後数週間でこれを 2 倍にし、新しいクラスターを実装する予定です。
http://www.ets-online.de/ (2005/02/07) Denny Reeh - システム開発者 - e/t/s 教材メディアは、PHP で書かれた e ラーニング サーバー (遠隔学習システム) を提供しています。弊社では、お客様向けのシステムを主に自社でホスティングしております。したがって、5 つのライブサーバー (freebsd、apache2、php4、eaccelerator) があり、毎月 550 万件のヒットがあります。まず、eAccelerator がなければ、パフォーマンスを向上させるためにより多くのサーバーをインストールする必要がありました。次に、スクリプトの中程度の応答時間を 4 分の 1 にすることで顧客の利便性を向上させました。
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) The 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 の他のゲーム指向のフランスの Web サイト月間 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 - Movie Maze はドイツの大手オンラインです-トレーラー、壁紙、レビュー、ニュースなどが掲載された雑誌。現在、eAccelerator を備えた 3 台のサーバー (Apache 2、PHP4 を備えた Suse および Debian) を使用し、3 TB を超えるデータを ~1 Mio に提供しています。毎月のユーザー。
http://www.rtvslo.si (2005/01/04) スロベニア国立 RTV 局とフォーラムを備えたニュース/その他のポータル。年間 3,500 人を超えるユーザーと 37,000 件を超えるフォーラム メッセージ。一般向けの 2 つのラウンドロビン サーバーと 1 つの管理者サーバー。毎月 6,000,000 ページロード。
http://www.shroomery.org/ (2006/03/28) 月間 20,000,000 ページの、キノコと菌学に関するサイト。 Web サーバーとデータベース サーバーは、Gentoo を実行する 4GB および SCSI RAID5 を備えた同一のデュアル 64 ビット Xeon です。 eAccelerator は、ページ生成時間を 0.1 秒未満に抑えるのに役立ちます。

http://www.sourceforge.net/ (2005/04/25) SourceForge.net は世界最大のオープン ソース ソフトウェア開発 Web サイトであり、100,000 を超えるプロジェクトと 1,000,000 人を超える登録ユーザーを一元的にホストしています。プロジェクト、問題、コミュニケーション、コードを管理するためのリソース。 SourceForge.net には、インターネット上で利用できるオープン ソース コードとアプリケーションの最大のリポジトリがあり、世界中のどのサイトやネットワークよりも多くのオープン ソース開発製品をホストしています。 SourceForge.net は、私たちがホストするプロジェクトやオープンソース コミュニティにさまざまなサービスを提供します。 eAccelerator は、フロントページの Web サーバー クラスターで使用されます。
eAccelerator を有効にしたホスティングを提供している企業はありますか?

http://lylix.net/ (2006/04/29) Gentoo Linux サーバー上で Apache/2.0.55、PHP 5.0.5、および eAccelerator 0.9.5 beta1 を使用したウェブホスティングを提供します。 32 ビットおよび 64 ビット プラットフォームを含む、高品質の仮想プライベート サーバー (VPS) ホスティングのプロバイダーでもあります。ほとんどの VPS イメージには、eAccelerator がインストールおよび構成された LAMP 環境がプリインストールされています。
http://www.ulyssis.org 学生にシェルおよびインターネット サービスを非常に安い価格で提供する学生団体。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。