Distintas versiones de PHP por directorio en PLESK

Publicado en Snippets · 17 junio 2016.

En un proyecto que estoy desarrollando a un cliente nos encontramos con un problema: la página web nueva tenía que ir con PHP7 para obtener todas las ventajas de esta versión de PHP. Sin embargo, como complemento al proyecto web, había otra aplicación web(como puede ser una wiki ) en un subdirectorio del dominio que necesitaba de una versión de PHP5.5 debido a que sus desarrolladores aún están trabajando para darle soporte de PHP7. Esto que es fácil de configurar en un servidor "vanilla" se torna francamente complicado para un server con PLESK. Aquí trataré de explicar como lo resolví.

El objetivo es configurar el dominio https://example.com/ con PHP7 y dentro de este( más concretamente en https://example.com/wiki ) queremos instalar una wik con soporte PHP5.5.

Como requisitos previos, sobreentenderé que tienes instaladas las dos versiones de PHP-Plesk necesarias( en este caso PHP 5.5 y PHP7 ) como Fast-CGI sobre un Apache. Además,que tienes creado el dominio example.com con soporte PHP7. Creo que no hay que decir que trabajaremos con un linux( ¿ hay alguién aún que le de por utilizar PHP bajo Windows ? ), más concretamente con CENTOS.

Una vez dado de alta el dominio de example.com usando la interfaz de PLESK, en nuestro servidor se crean, o añadimos, las siguientes estructuras de archivos:

  • /var/www/vhosts/system/example.com/conf Dónde están los archivos de configuración de Apache creado por PLESK
  • /var/www/vhosts/system/example.com/conf/vhost.conf: Archivo dónde vamos a poner nuestra adaptación a los archivos de Apache de PLESK
  • /var/www/vhosts/example.com/ : archivos PHP de nuestra aplicación en PHP7
  • /var/www/vhosts/example.com/wiki/ : archivos PHP de nuestra aplicación en PHP5.5

Uno de los fastidios de PLESK es que no te permite modificar su configuración de Apache, tan sólo te da la opción de incluir un archivo(vhost.conf) para adaptar, con muchas liimtaciones, ciertas carácteristicas del dominio. Dicho esto, vamos a crear ese archivo vhost.conf( en /var/www/vhosts/system/example.com/conf/ ) con el siguiente contenido: Cuando definimos un domino con CGI o Fast-CGI estamos especificando a Apache que los archivos PHP son interpretados por un programa( o comando ) externo a él. Estos programas se les denomina handler. Lo contrario a los handlers es cuando definimos a PHP como módulo, es decir, cuando la ejecución de PHP corre a cargo integramente de Apache.

Los handlers de Fast-CGI se le asigna mediante la directiva de Apache: fcgid-script. Como PLESK ya ha asignado el fcgid-script por nosotros, y no lo podemos modificar, lo único que nos queda es eliminar dicha asignación( RemoveHandler fcgid-script ) para el directorio de la wiki( Directory /var/www/vhosts/example.com/wiki ) que es el que va a ir con PHP5.5.

Lo siguiente es asignar un nuevo Handler, sin embargo, hay que recordar que estamos bajo PLESK con lo que no será tarea fácil. Básicamente, porque no tenemos opción de pasar variables a nuestros handler. Estas variables nos permitiría definir sobre que PHP.INI basará su configuración el handler, su tiempo máximo de ejecución o indicarle al handler que será lanzado bajo Fast-CGI. La única manera de solucionar el escollo de las variables es creando nuestro propio handler.

Nuestro handler cambiará algunas variables de entorno( las antes dicha ) y llamará al handler verdadero. En informática, un prorama que adapta o mejora la funcionalidad de algún otro se llama programa envoltorio o wrapper. Si te fijas en el código anterior( FCGIWrapper /var/www/vhosts/example.com/cgi-bin/cgi_wrapper_php5 .php ) le estamos informando a Apache que hemos creado un wrapper de un handler Fast-CGI y que lo queremos usar como handler. Las directivas anteriores ( AddType y Action ) sirven para que sepa que lo que hará ese handler es procesar archivos PHP( y nos aseguramos de ello con Files ~ (.php) ). Finalmente, también le comunicamos que queremos que active la opción de interpretación de archivos por CGI( Options +ExecCGI ), opción que por defecto está deshabilitada por seguridad.

El wrapper(de nombre: cgi_wrapper_php5 ) debe crearse( touch /var/www/vhosts/example.com/cgi-bin/cgi_wrapper_php5 ) dentro del directorio cgi-bin en la raiz dónde están los archivos de nuestro proyecto. Seguramente ya esté creado. También le debemos dar permiso de ejecución( chmod ug+x /var/www/vhosts/example.com/cgi-bin/cgi_wrapper_php5 ) y tenga el mismo usuario y grupo que los demás archivos del dominio ( chown example:psa /var/www/vhosts/example.com/cgi-bin/cgi_wrapper_php5 ). Su contenido será el siguiente: Fíjate como al principio hemos asignamos valores a algunas variables y entre ellas, hemos especificado que PHP.INI debe usar el handler. Asegúrate de que esté creado dicho archivo PHP.INI Puedes usar el que ya estará creado en la misma ruta( /var/www/vhosts/system/example.com/etc/php.ini ), pero modificando lo que necesites.

Finalmente llamamos al handler de PHP 5.5 original(exec /opt/plesk/php/5.5/bin/php-cgi ). Recuerda que en shell script las líneas comentadas empiezan por almohadilla(#) y por tanto, esas líneas no tendrán efecto. Por lo que si quieres otra versión de PHP añade una almohadilla al inicio de la línea del handler actual (# exec /opt/plesk/php/5.5/bin/php-cgi ) y quítasela a la línea del handler que quieras usar.

Ya sólo nos queda que Apache tome todos los cambios que hemos realizado. Para ello primero hay que decirle a PLESK que recargue la información del dominio example.com ejecutando: /usr/local/psa/admin/sbin/httpdmng --reconfigure-domain example.com y, aunque no debería ser necesario, le decimos a apache que refresque su configuración: /etc/init.d/httpd reload

Ya con eso tenemos el dominio example.com con PHP7 y el directorio /wiki de example.com trabajando con PHP 5.5. Si ahora quisieramos lo mismo para un WordPress en un directorio /blog pero con PHP 5.3, sería necesario crear una nueva directiva Directory( Directory /var/www/vhosts/example.com/blog ) y crear un nuevo wrapper de handler pero que ejecute el handler de 5.3 en vez de 5.5. Por lo demás, todo igual.

Espero que sirva a más de uno.

¡ Compártelo !
Este sitio utiliza cookies propias y de terceros para mejorar tu experiencia con el sitio web. Al continuar con la navegación consideramos que acepta su uso.