ホームページ  >  記事  >  バックエンド開発  >  PHP アクセラレータ eAccelerator の構成と使用ガイド

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

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

php アクセラレータ eAccelerator の設定と使用ガイド

1. 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 は、PHP コードのコンパイルと解釈もサポートしています。encoder.php スクリプトを使用して PHP コードをコンパイルして、コードを保護できます。コンパイルされたコードは、eAccelerator がインストールされている環境で実行する必要があります。逆コンパイル可能な他のコンパイル ツールとは異なり、eAccelerator によってコンパイルされたコードは逆コンパイルできません。これにより、コードの安全性と効率が向上します。

2. eAccelerator のインストールと構成

1. サポートされるプラットフォーム
aAccelerator は共有メモリに基づいてほとんどの API を提供するため、*nix プラットフォームでのサポートが強化されますが、Windows プラットフォームに基づいたバイナリ バージョンもリリースされていますが、私は構成と命令のみに基づいています。 *nix プラットフォームでは、現在サポートされているプラ​​ットフォームには、Linux、FreeBSD、OpenBSD、Mac OS X、Solaris、AIX、HP-UX が含まれます。

2. システム要件
php4 または php5
autoconf
automake
libtool
m4
eAccelerator は、mod_php または fastcgi モードを使用してインストールされた PHP のみをサポートします

?

3. インストール
まず、eAccelerator の公式 Web サイトにアクセスして、ソース コード パッケージの最新バージョンをダウンロードします: http://sourceforge.net/projects/eaccelerator/

#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 ファイルの設定
インストールが完了したら、eAccelerator には次の 2 つの設定メソッドと呼び出しメソッドが用意されています。

Zend 拡張モードとしてインストール:

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"

?

スレッド セーフ モードでインストールされた PHP を使用する場合は、最初の行の "zend_extension" を "zend_extension_ts" に置き換える必要があります。

PHP 拡張モードとしてインストール: (これが最も採用されている方法です)

?

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 設定にアクセスしてください

インストールと構成が完了したら、最後にキャッシュ ディレクトリを作成する必要があります

?

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

?5. インストール結果を確認します
ブラウザーから phpinfo() ページにアクセスするか、php -i を実行して、次のような情報が表示された場合は、インストールが成功したことを意味します。

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

?

eAccelerator のデバッグ オプションをオンにすると、ログに次のような情報が表示されます

#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 がもたらす驚きをお楽しみください。マイケルのテストによれば、その効果は確かに非常に良好です。

?

3. PHP で eAccelerator の API 開発を使用できます

1. API とドキュメントの説明:

eAccelerator は、便利で安定したローカル キャッシュ実装を提供します。コード実装のほとんどは共有メモリに基づいているため、これが 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 ドキュメント

?

2. eAccelerator を使用して PHP コードを高速化します

以下にテスト コードがあります。eAccelerator の強力な能力をテストできます: (このコードは cli モードでは有効ではない可能性があります)

?

<?php
class 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);
?>

?

さらに、eAccelerator のサポートは有名な vBulletin 3.60Beta バージョンに統合されていると言われています。以下は vBulletin のコードです

<?php
// #############################################################################
// eAccelerator
 
/**
* Class for fetching and initializing the vBulletin datastore from eAccelerator
*
* @package    vBulletin
* @version    $Revision: 0.1 $
* @date        $Date: 2005/06/12 13:14:18 $
*/
class vB_Datastore_eAccelerator extends vB_Datastore
{
    /**
    * Fetches the contents of the datastore from eAccelerator
    *
    * @param    array    Array of items to fetch from the datastore
    *
    * @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'];
    }
 
    /**
    * Fetches the data from shared memory and detects errors
    *
    * @param    string    title of the datastore item
    *
    * @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);
    }
 
 
 
 
    /**
    * Updates the appropriate cache file
    *
    * @param    string    title of the datastore item
    *
    * @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);
    }
}
?>

?

4. 付録および参考資料
eAccelerator 公式 Web サイト: http://eaccelerator.net

?

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