A la hora de ejecutar PHP de forma eficiente, nos toca aprender un par de cosas sobre cachés, desactivar logs, etc. de igual forma que Apache. En este artículo describo directamente como cambiar algunas cuestiones de configuración, instalar XCaché, Zend Optimizer y Suhosin para que se ejecuten con PHP. Recomiendo tomarse un tiempo con cada tema para investigarlo bien y comprenderlo.
La configuración
En un servidor en producción, convienen los siguientes cambios en la configuración de php.ini:
Nos aseguramos que no desvelamos la versión de PHP:
expose_php = Off
Aumentar el límite de memoria si sabemos que algún script puede necesitarla:
memory_limit = 64M
Nos aseguramos de no mostrar ningún tipo de error si algo falla (para evitar desvelar paths y otra información que pudiera ser sensible)
display_errors = Off
Y si queremos ganar algo de velocidad, no es mala idea desactivar el logging de errores también. Se supone que el servidor en producción no es para debugging:
log_errors = Off
Instalando Zend Optimizer
Los beneficios del gratuito Zend Optimizer son básicamente que permite ejecutar archivos codificados con Zend Encoder y en algunos casos puede ganarse hasta un 40% de velocidad al ejecutar código PHP. Aunque existe controversia en cuanto a esto, siendo un paquete oficial de Zend (los autores de PHP), resulta por lógica mucho más confiable que cualquier otro paquete de terceros que podamos utilizar.
# wget http://downloads.zend.com/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
# tar xvzf ZendOptimizer*
# cd ZendOpt*
# ./install.sh
El proceso terminará por añadir al archivo php.ini un bloque encabezado con [Zend]
# php -v
Debería retornar ahora algo como
PHP x.x.x
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
La configuración de SUHOSIN y XCACHE, cuya instalación veremos ahora, debería ir ENCIMA del bloque [Zend]. De lo contrario al arrancar PHP se quejará con un error como este:
PHP Fatal error: [Zend Optimizer] Zend Optimizer 3.3.3 is incompatible with XCache 1.2.2 in Unknown on line 0
Instalando SUHOSIN
SUHOSIN añade una capa de seguridad a PHP. Sin profundizar, diríamos que es lo mismo que la detección heurística de los antivirus, ya que no protege realmente contra problemas conocidos, sino que protege puntos débiles del mismo núcleo de PHP. Es un proyecto de un ex-programador de seguridad de PHP.
# wget http://download.suhosin.org/suhosin-0.9.27.tgz
# tar xvzf suhosin*
# cd suhosin*
# phpize
# ./configure
# make
# make install
Asegurarse que el archivo generado “suhosin.so” está en el directorio de módulos de php necesario (puede ser /usr/lib/php/modules o bien otro)
Añadir, ENCIMA del bloque de [Zend] en php.ini:
extension = suhosin.so
Instalando XCACHE
XCache se autodescribe como un cacheador de opcode PHP que es rápido, estable, muy probado y que se usa en servidores en producción con muchas visitas. El aumento del rendimiento se nota: sólo tenemos que pensar que en lugar de interpretarse los scripts PHP cada vez y ejecutar el código, directamente se ejecuta el código ya interpretado que está en caché.
Aunque personalmente vengo utilizando ‘PHP opcode cachers’ como EAccelerator y Turck MMCACHE desde hace tiempo, este XCache ha funcionado bien y ha resultado dar menos problemas con los cambios de versión de PHP.
# yum install php-devel
# wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
# tar -zxf xcache-*.tar.gz
# cd xcache-*
# phpize
# ./configure –enable-xcache
# make
# make install
Asegurarse que el archivo generado “xcache.so” está en el directorio de módulos de php necesario (puede ser /usr/lib/php/modules o bien otro)
Añadir la siguiente configuración al php.ini (si lo metemos como archivo INI en /etc/php.d/ no podremos controlar el orden de cargado y no funcionará)
Nota: Primero debe ir la config. de Suhosin, luego XCACHE y finalmente el bloque del Zend Optimizer.
[xcache-common]
zend_extension = /usr/lib/php/modules/xcache.so
[xcache.admin]
xcache.admin.user = «admin»
xcache.admin.pass = «md5password»
[xcache]
xcache.shm_scheme = «mmap»
xcache.size = 64M
xcache.count = 1
xcache.slots = 8K
xcache.ttl = 0
xcache.gc_interval = 0
xcache.var_size = 0M
xcache.var_count = 1
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 3000
xcache.test = Off
xcache.readonly_protection = Off
xcache.mmap_path = «/dev/zero»
xcache.coredump_directory = «/tmp/xcache»
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off
[xcache.coverager]
xcache.coverager = Off
xcache.coveragedump_directory = «»
Al final, deberíamos terminar con una salida de “php -v” parecida a esta y sin errores:
# php -v
PHP x.x.x
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
with XCache v1.2.2, Copyright (c) 2005-2007, by mOo
with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
with Suhosin v0.9.27, Copyright (c) 2007, by SektionEins GmbH
with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
Muchas gracias, muy util la instalacion de estos 3, son basicos y elementales.
Salu2
a mi me sale todo menos
zend extension manager esta no la tengo, ¿debo instalarla?
según tus necesidades antonio, pero es recomendable para acelerar php, eso si tienes eacelerator no hace falta porque este usa un modulo de zend optimizer 😀
Hola, yo tengo Centos, ahora no corre mi apache por lo que acabo de hacer con esta config, no se que hacer, me puedes echar la mano ?
cuando reinicio el apache me sale:
———————————————————————
Stopping httpd: [FAILED]
Starting httpd: [Mon Mar 08 03:21:28 2010] [warn] module jk_module is already loaded, skipping
(98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
[FAILED]
——————————————————————-
y cuando corro php -v me sale:
——————————————————————
Failed loading /usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache.so: /usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache.so: cannot open shared object file: No such file or directory
PHP Warning: Module ‘suhosin’ already loaded in Unknown on line 0
PHP Fatal error: [ionCube Loader] The Loader must appear as the first entry in the php.ini file in Unknown on line 0
———————————————————————
Agradesco tu ayuda porque mi servidor está en producción y mis clientes me están matando.
Gracias.
revisa la configuracion de apache httpd.conf y php.ini amigo , esta claro que no tienes bien cargados los modulos de php en el php.ini
Cuando instalo zend optimizer al final no resetea automaticamente apache me aparece como falla, lo reseo manualmente y me da el Ok, pero al correr el comando php.ini no me carga zend
perdon no cuando corro php.ini sino php -v
Marco que te sale en consola cuando pones php -v ‘??