Hosting con phpSuExec

Uno de los servidores contratados de hosting de la Fundación donde trabajo fue actualizado recientemente. Inicialmente tenía PHP4 y desarrollaron en él un sistema de información basado en la variable register_globals encendida. Ahora con PHP5 register_globals se encuentra desactivada por defecto y por ende, nada funciona.

La solución es muy sencilla, agregar la siguiente línea al archivo .htaccess que se encuentra en el raíz del sitio web.

    <ifmodule mod_php5.c>
        php_flag register_globals on
    </ifmodule>

Sin embargo esto no funcionó para el servidor. Por el contrario generaba un error 500. Investigué un poco mas y empecé a esclarecer la situación. Al parecer la actualización del hosting se realizó utilizando phpSuExec (1) que es la apropiación de PHP del soporte suExec que provee Apache. Esto permite que el demonio de Apache que atiende las peticiones de los diferentes dominios alojados en un hosting compartido se ejecute bajo el mismo usuario de la cuenta mejorando con esto la seguridad de las cuentas individuales. Esto trae consigo otras repercusiones como las observadas, en especial, la que impide que se definan variables PHP en el archivo .htaccess; conclusión: la solución anterior ya no es válida.

Con phpSuExec se deben crear archivos php.ini que se ubican, al igual que los .htaccess, en el árbol web del sitio, en ellos se definen las variables PHP necesarias. A diferencia de los segundos, el alcance de los archivos php.ini es local al mismo directorio, es decir, no es recursivo, así que en rigor es necesario crear en (o enlazar a) el archivo php.ini a cada uno de los directorios donde se necesite.

Esta restricción resulta altamente tediosa, tanto por la tarea mecánica misma de andar copiando archivos como por la de mantenerlos actualizados y ubicados en los directorios que son. Por suerte (y gracias al sitio de Jumba Support Wiki) encontré que es posible indicarle a Apache que un php.ini específico es el que tendrá vigencia a lo largo y ancho del árbol de directorios web utilizando una directiva PHPRC en el .htaccess. Esto nos evitará la necesidad de andar copiando/enlazando archivos en cada subdirectorio, claro está que es útil solamente en el caso en que necesitemos un único php.ini para todo el sitio (99% de los casos ?).

Para implementar esta solución se debe crear/editar un archivo .htaccess en el directorio raíz del sitio web e incluír la siguiente línea.

    SetEnv PHPRC /home/proyecto/public_html

Téngase en cuenta que la ruta /home/proyecto/public_html deberá ser la ruta real donde se ubicará le archivo php.ini.

Leave a Reply

Your email address will not be published. Required fields are marked *