PHPアクセラレータeAcceleratorの設定と使用手順を詳しく解説

php中世界最好的语言
リリース: 2023-03-27 06:22:02
オリジナル
6831 人が閲覧しました

今回は、PHP アクセラレータ eAccelerator の設定と使用手順について詳しく説明します。PHP アクセラレータ eAccelerator の設定と使用に関する 注意事項 は何ですか? 以下は実際的なケースです。

システムのパフォーマンスを向上させるために、PHP の最適化を検討しています。私は過去 2 年間で MMCache と eAccelerator を使用してきましたが、特に eAccelerator が気に入っており、今回の最適化にも使用しました。

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 プラットフォームでもよりよくサポートされます (*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 サイトにアクセスして、ソース コード パッケージの最新バージョンをダウンロードします: 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 instal
ログイン後にコピー

4. ini ファイル構成インストールが完了したら、設定 php.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
ログイン後にコピー
Zend Optimizer 3.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 のデバッグ オプションをオンにすると、ログから次のような情報が表示されます

#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(http://bart.eaccelerator.net/doc/phpdoc/)

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

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) 来释放这个锁或等待程序请求结束时自动释放这个锁。
ログイン後にコピー
<?php    
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)
例如:

<?php 
eaccelerator_cache_output(&#39;test&#39;, &#39;echo time(); phpinfo();&#39;, 30); 
?>


eaccelerator_cache_result($key, $eval_code, $ttl=0)
ログイン後にコピー

将 $eval_code 代码的执行结果缓存 $ttl 秒,($ttl参数同 eacclerator_put),类似 cache_output
例如:

<?php 
eaccelerator_cache_result(&#39;test&#39;, &#39; time() . "Hello";&#39;, 30); 
?>

eaccelerator_cache_page($key, $ttl=0)
ログイン後にコピー

将当前整页缓存 $ttl 秒。
例如:

<?php    
eaccelerator_cache_page($_SERVER[&#39;PHP_SELF&#39;].&#39;?GET=&#39;.serialize($_GET),30);
echo time();
phpinfo();
?>


eaccelerator_rm_page($key)
ログイン後にコピー

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

2、PHP代码中使用eAccelerator加速

测试下eAccelerator强大的威力:(该代码在 cli 模式下可能无效)

<?php
class test_cache {
  var $pro = &#39;hello&#39;;
 
  function test_cache() {
    echo "Object Created!<br>\n";
  }
  function func() {
    echo &#39;, the world!&#39;;
  }
  function now($t) {
    echo date(&#39;Y-m-d H:i:s&#39;, $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);
?>
ログイン後にコピー

另外,据说在著名的vBulletin 3.60Beta版里面已经集成了对eAccelerator的支持。

一段来自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(&#39;eaccelerator_get&#39;))
        {
            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[&#39;templateversion&#39;];
    }
 
    /**
    * 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 = &#39;&#39;;
            $dataitem = $this->dbobject->query_first("
                SELECT title, data FROM " . TABLE_PREFIX . "datastore
                WHERE title = &#39;" . $this->dbobject->escape_string($title) ."&#39;
            ");
            if (!empty($dataitem[&#39;title&#39;]))
            {
                $data =& $dataitem[&#39;data&#39;];
                $this->build($dataitem[&#39;title&#39;], $dataitem[&#39;data&#39;]);
            }
        }
        $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(&#39;eaccelerator_put&#39;))
        {
            trigger_error("eAccelerator not installed", E_USER_ERROR);
        }
        eaccelerator_lock($title);
        eaccelerator_put($title, $data);
        eaccelerator_unlock($title);
    }
}
?>
ログイン後にコピー

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

PHP7基于函数方式使用lib库案例代码分析

PHP找出链表中环入口节点步骤详解

以上がPHPアクセラレータeAcceleratorの設定と使用手順を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート