Cache de scripts PHP con eAccelerator
Otras posibilidades
Activar la cache por dominios virtuales
En aquellos casos en los que en un mismo servidor estén alojados diversos webs, puede ser conveniente activar o no el acelerador en función de estos. Es posible hacer esto mediante los parámetros de configuración y la definición de los dominios en apache, o medienta la utilización de un archivo .htaccess.
Lo primero que deberíamos hacer es modificar la configuración por defecto para que esté inactiva, poniendo a 0 los siguientes parámetros en el archivo php.ini
eaccelerator.enable="0" eaccelerator.optimizer="0" eaccelerator.compress="0"
Ahora ya podemos activar el acelerador independientemente para cada web, utilizando las siguientes líneas bien dentro de su sección VirtualHost en el archivo httpd.conf, o mediante un archivo .htaccess en la raiz del dominio.
php_value 'eaccelerator.enable' '1' php_value 'eaccelerator.optimizer' '1' php_value 'eaccelerator.compress' 1'
Consultar el estado del acelerador
Aparte de la forma de comprobar si la extensión está instalada que hemos visto tras la instalación, hay otro método que podemos utilizar, el cual además nos permite activar o desactivar la caché y comprobar qué scripts están en caché. Es suficiente con crear una página con el siguiente código PHP.
<?php if (function_exists("eaccelerator")) { eaccelerator(); } else { echo "<html><head><title>EAccelerator</title></head><body><h1 align=\"center\">EAccelerator is not installed</h1></body></html>"; } ?>
Sobra decir que esta página deberíamos protegerla bajo algún tipo de autenticación o mediante los valores de configuración eaccelerator.admin.name y eaccelerator.admin.password.
Utilizar el acelerador como caché de páginas
Aprovechando que el acelerador utiliza memoria intermedia para almacenar el código interpretado, dispone en su API de un conjunto de funciones que podemos utilizar para almacenar información en ella, de forma que podamos guardar resultados de funciones, trozos de texto, o el resultado completo de ejecutar una página.
Este es un estracto del archivo README que viene con los fuentes, donde se detalla cada una de las funciones ofrecidas en la API:
eaccelerator_put($key, $value, $ttl=0) puts the $value into shard memory for $ttl seconds. eaccelerator_get($key) returns the value from shared memory which was stored by eaccelerator_put() or null if it is not exists or was expired. eaccelerator_rm($key) removres the $key from shared memory eaccelerator_gc() removes all expired keys from shared memory eaccelerator_lock($lock) creates a lock with specified name. The lock can be released by function eaccelerator_unlock() or automatic on the end of request. For Example: <?php eaccelerator_lock("count"); eaccelerator_put("count",eaccelerator_get("count")+1)); ?> eaccelerator_unlock($lock) release lock with specified name eaccelerator_set_session_handlers() install the eaccelerator session handlers. Since PHP 4.2.0 you can install eaccelerator session handlers in "php.ini" by "session.save_handler=eaccelerator". eaccelerator_cache_output($key, $eval_code, $ttl=0) caches the output of $eval_code in shared memory for $ttl seconds. Output can be removed from cache by calling mmcach_rm() with the same $key. For Example: <?php eaccelerator_cache_output('test', 'echo time(); phpinfo();', 30); ?> eaccelerator_cache_result($key, $eval_code, $ttl=0) caches the result of $eval_code in shared memory for $ttl seconds. Result can be removed from cache by calling mmcach_rm() with the same $key. For Example: <?php eaccelerator_cache_output('test', 'time()." Hello";', 30); ?> eaccelerator_cache_page($key, $ttl=0) caches the full page for $ttl seconds. For Example: <?php eaccelerator_cache_page($_SERVER['PHP_SELF'].'?GET='.serialize($_GET),30); echo time(); phpinfo(); ?> eaccelerator_rm_page($key) removes the page which was cached by eaccelerator_cache_page() with the same $key from cache eaccelerator_encode($filename) returns the encoded bytecode of compiled file $filename eaccelerator_load($code) loads script which was encoded by eaccelerator_encode() eaccelerator_put($key, $value, $ttl=0) puts the $value into shard memory for $ttl seconds. eaccelerator_get($key) returns the value from shared memory which was stored by eaccelerator_put() or null if it is not exists or was expired. eaccelerator_rm($key) removres the $key from shared memory eaccelerator_gc() removes all expired keys from shared memory eaccelerator_lock($lock) creates a lock with specified name. The lock can be released by function eaccelerator_unlock() or automatic on the end of request. For Example: <?php eaccelerator_lock("count"); eaccelerator_put("count",eaccelerator_get("count")+1)); ?> eaccelerator_unlock($lock) release lock with specified name eaccelerator_set_session_handlers() install the eaccelerator session handlers. Since PHP 4.2.0 you can install eaccelerator session handlers in "php.ini" by "session.save_handler=eaccelerator". eaccelerator_cache_output($key, $eval_code, $ttl=0) caches the output of $eval_code in shared memory for $ttl seconds. Output can be removed from cache by calling mmcach_rm() with the same $key. For Example: <?php eaccelerator_cache_output('test', 'echo time(); phpinfo();', 30); ?> eaccelerator_cache_result($key, $eval_code, $ttl=0) caches the result of $eval_code in shared memory for $ttl seconds. Result can be removed from cache by calling mmcach_rm() with the same $key. For Example: <?php eaccelerator_cache_output('test', 'time()." Hello";', 30); ?> eaccelerator_cache_page($key, $ttl=0) caches the full page for $ttl seconds. For Example: <?php eaccelerator_cache_page($_SERVER['PHP_SELF'].'?GET='.serialize($_GET),30); echo time(); phpinfo(); ?> eaccelerator_rm_page($key) removes the page which was cached by eaccelerator_cache_page() with the same $key from cache eaccelerator_encode($filename) returns the encoded bytecode of compiled file $filename eaccelerator_load($code) loads script which was encoded by eaccelerator_encode()
Codificar el código para su distribución
Una pega que ve mucha gente a PHP es que al ser un lenguaje interpretado, el código fuente está visible y cualquiera con acceso a los archivos puede verlo y modificarlo, por lo que en algunas situaciones puede no ser conveniente. Para evitar esta situación los fuentes de eAccelerator vienen con un programa de nombre “encoder.php” que podemos utilizar para codificar nuestros programas PHP y distribuirlos codificados. Para poder ejecutarlos sería suficiente con que el servidor disponga de eAccelerator instalado, aunque también es posible ejecutarlos sin él, mediante la instalación de la extensión eLoader que viene con los fuentes de eAccelarator. Se puede obtener más información en el archivo “README.eLoader” que viene con los fuentes.
Para obtener más información sobre como funciona el codificador se puede obtener un listado con los parámetros disponibles ejecutando php -q encoder.php.
Para codificar un archivo:
php -q encoder.php -f input.php -o output.php
Para codificar una carpeta recursivamente:
php -q encoder.php -rcf input_dir -o output_dir
Más información
Páginas: 1 2











Yo suelo usar Turck-MMCache.
Es verdad que el desarrollo está estancado desde hace meses, pero no es difícil recompilar los fuentes actuales en el CVS para hacerlos funcionar con la versión de PHP que tengamos instalada.
Más que un problema de versiones, el motivo que ha hecho que me pasara a eAccelerator ha sido que en éste se van incorporando más funcionalidades y resolviendo bugs. En cualquier caso he utilizado MMCache durante mucho tiempo y sin ningún problema, es simplemente que dado que el proyecto parece paralizado, creo que tiene más sentido en instalaciones nuevas utilizar eAccelerator, sobretodo teniendo en cuenta que es practicamente equivalente.
Se dice que eAccelerator es compatible con el Encode de PHP, sin embargo los scripts “encodeados” con el Turck no pueden ser ejecutados con eAcelerator (eLoader). Aunque aún no he visto las funcionalidades del EA. (en una comparativa…) pero supongo que deben ser mejores que el viejo Turck
como hacer para que despues de ejecutarse una serie de sentencias con codigo php vuelva a otra pagina.
Hola:
Para quienes usen Cpanel, aquí una versión del tutorial que escribió Esteban de Infranetworking:
http://www.comunidadhosting.com/showthread.php?p=29771
Muchas gracias!