Explication détaillée des étapes de configuration et d'utilisation de l'accélérateur PHP eAccelerator

php中世界最好的语言
Libérer: 2023-03-27 06:22:02
original
6836 Les gens l'ont consulté

Cette fois, je vais vous apporter une explication détaillée des étapes de configuration et d'utilisation de l'accélérateur PHP eAccelerator. Quelles sont les précautions pour la configuration et l'utilisation de l'accélérateur PHP eAccelerator. cas, jetons un coup d'oeil.

Afin de mieux améliorer les performances du système, pensez à optimiser PHP. J'ai été exposé à MMCache et eAccelerator au cours des deux dernières années, et j'aime particulièrement eAccelerator. Je l'ai également choisi pour cette optimisation. .

Partagez quelques documents de configuration et d'optimisation d'eAccelerator.

1. Introduction à eAccelerator

Contexte

eAccelerator est un logiciel gratuit et ouvert. source PHP C'est un projet d'accélération, d'optimisation, de compilation et de mise en cache dynamique, qui peut améliorer les performances des scripts PHP en mettant en cache les résultats de la compilation du code PHP, résolvant complètement le problème de compilation de scripts PHP qui a toujours été complexe et loin de nous . En utilisant eAccelerator, vous pouvez optimiser la vitesse d'exécution de votre code PHP, réduire la charge du serveur et augmenter la vitesse d'exécution des applications PHP jusqu'à 10 fois.

Le projet eAccelerator est né en 2004, lorsqu'il a été proposé et développé en tant que branche du projet Turck MMCache. Turck MMCache a été développé par Dmitry Stogov. Il s'agit d'un très excellent système d'accélération du cache mémoire PHP. Aujourd'hui, une grande partie du code d'eAccelerator est toujours appliquée à ce projet. Actuellement, le projet n'a pas été mis à jour depuis longtemps. le dernier support PHP5.x n'est pas encore disponible.

2. Principe

eAccelerator obtient une accélération efficace en mettant en cache le code PHP compilé dans la mémoire partagée et en l'appelant directement lorsque l'utilisateur y accède. C'est très efficace. De la création de mémoire partagée à la recherche de code compilé, cela s'effectue en très peu de temps. Pour les fichiers et codes qui ne peuvent pas être mis en cache dans la mémoire partagée, eAccelerator peut également les mettre en cache sur le disque système.

eAccelerator prend également en charge la compilation et l'interprétation du code PHP. Vous pouvez compiler le code PHP via le script encoder.php pour protéger le code. Le code compilé doit être exécuté dans un environnement où eAccelerator est installé. Le code compilé par eAccelerator ne peut pas être décompilé, contrairement à certains autres outils de compilation qui peuvent être décompilés, ce qui rendra le code sûr et efficace.

2. Configuration de l'installation d'eAccelerator

1. Plateforme de support

Puisque aAccelerator fournit une grande Une partie de l'API est basée sur la mémoire partagée, elle sera donc mieux prise en charge sur les plates-formes *nix. Bien qu'une version binaire basée sur la plate-forme Windows ait également été publiée, je ne fournirai ici qu'une configuration et des instructions basées sur les plates-formes *nix. les plates-formes prises en charge incluent Linux, FreeBSD, OpenBSD, Mac OS X, Solaris, AIX et HP-UX.

2. Configuration système requise

  • php4 ou php5

  • autoconf

  • automake

  • libtool

  • m4

eAccelerator ne prend en charge que l'utilisation de mod_php Ou PHP installé en mode fastcgi

3. Installation

Allez d'abord sur le site officiel d'eAccelerator pour télécharger la dernière version du package de code source : 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
Copier après la connexion

4. Configuration du fichier ini

Une fois l'installation terminée, commençons à configurer le fichier php.ini eAccelerator fournit respectivement deux méthodes de configuration et d'appel.

Installation en mode extension 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"
Copier après la connexion

Si vous utilisez PHP installé en mode thread safe, vous devez utiliser "zend_extension_ts" pour remplacer "zend_extension" dans la première ligne.

Installation en mode extension PHP : (C'est la méthode utilisée par la plupart)

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"
Copier après la connexion

Pour des instructions de configuration détaillées du fichier php.ini, veuillez vous référer au document README dans la source répertoire de code ou visitez le site officiel Document : paramètre ini
Après avoir terminé la configuration de l'installation, nous devons enfin créer le répertoire de cache

#mkdir /tmp/eaccelerator
#chmod 777 /tmp/eaccelerator
Copier après la connexion

Vérifier le résultat de l'installation

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
Copier après la connexion
5. 🎜>

via le navigateur Visitez votre page phpinfo() ou exécutez php -i pour obtenir les informations de configuration PHP. Si vous voyez des informations similaires à celles-ci, l'installation est réussie.
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
Copier après la connexion


Zend Optimizer3.0.1 est également installé sur ma machine, donc les informations que je vois sont les suivantes :

<🎜><🎜>Si vous activez l'option de débogage d'eAccelerator, vous pouvez voyez-le dans le journal, j'ai vu des informations similaires à celles-ci <🎜><🎜>
#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"
Copier après la connexion

以上信息表示文件都得到了缓存和命中。
至此,完成了全部的安装和配置,好好享受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
Copier après la connexion

接口列表

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 = &#39;&#39;], [string $pre_content = &#39;&#39;], [string $post_content = &#39;&#39;])  
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)
Copier après la connexion

有关上述文档详细说明请参考官方文档:API Documents(http://bart.eaccelerator.net/doc/phpdoc/)

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

eaccelerator_put($key, $value, $ttl=0)
Copier après la connexion

将 $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) 来释放这个锁或等待程序请求结束时自动释放这个锁。
Copier après la connexion
<?php    
eaccelerator_lock("count");    
eaccelerator_put("count",eaccelerator_get("count")+1));  
?>

eaccelerator_unlock($key)
Copier après la connexion

根据 $key 释放锁

eaccelerator_cache_output($key, $eval_code, $ttl=0)
Copier après la connexion

将 $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)
Copier après la connexion

将 $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)
Copier après la connexion

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

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


eaccelerator_rm_page($key)
Copier après la connexion

删除由 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);
?>
Copier après la connexion

另外,据说在著名的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);
    }
}
?>
Copier après la connexion

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

推荐阅读:

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal