specific multiple change php apache multiple-versions

multiple - ubuntu 16.04 change php version



Dígale a Apache que use una versión específica de PHP instalada usando phpbrew (5)

Escribí esto, porque me estaba molestando.

Por defecto, el phpbrew switch cambiará la versión de la CLI. Para actualizar Apache, deberá indicarle que use el archivo .so recién generado. En Ubuntu, este archivo se creará como /usr/lib/apache2/modules/libphp$VERSION.so .

Para que se genere este archivo .so , debe instalar PHP como:

phpbrew install php-5.6.16 +default +apxs2

De todos modos, aquí está el script de shell que uso para cambiar las versiones de PHP. El conmutador fallará si no se encuentra el archivo .so y solicitará privilegios de sudo para reiniciar Apache.

/ home / luker / bin / phpbrewswitch

#!/usr/bin/env bash VERSION=$1 SOFILE=/usr/lib/apache2/modules/libphp$VERSION.so CONFFILE5=/etc/apache2/mods-available/php5.load CONFFILE7=/etc/apache2/mods-available/php7.load source ~/.phpbrew/bashrc if [ -f $SOFILE ]; then phpbrew switch $VERSION phpbrew list if [[ $VERSION == 7* ]]; then FILECONTENTS="LoadModule php7_module $SOFILE" CONFFILE=$CONFFILE7 sudo a2enmod php7 sudo a2dismod php5 else FILECONTENTS="LoadModule php5_module $SOFILE" CONFFILE=$CONFFILE5 sudo a2enmod php5 sudo a2dismod php7 fi; echo $FILECONTENTS > $CONFFILE echo "AddType application/x-httpd-php .php" >> $CONFFILE echo "Updated $CONFFILE" sudo service apache2 restart else echo $VERSION "is not configured for apache" phpbrew list fi

Uso

Intentando cambiar a una versión de PHP que no fue construida para Apache:

[21:02:55] luker [~]$ phpbrewswitch 5.4.45 5.4.45 is not configured for apache php-5.6.16 php-5.6.10 * php-5.5.30 php-5.4.45

Cambio exitoso a una versión de PHP que tiene un archivo .so existente:

[21:03:55] luker [~]$ phpbrewswitch 5.6.16 * php-5.6.16 php-5.6.10 php-5.5.30 php-5.4.45 Updated /etc/apache2/mods-available/php5.load

Tenía el PHP, MySQL y la pila de Apache instalados para el desarrollo. Esa instalación está utilizando archivos de configuración de:

/etc/apache2/ /etc/php5/

Más tarde instalé múltiples versiones de PHP usando phpbrew . Todas las versiones son accesibles y conmutables desde CLI. Pero Apache siempre permanece en la versión predeterminada que no se instaló usando phpbrew .

Aquí hay una lista de mis versiones de PHP instaladas.

$ phpbrew list Installed versions: php-5.4.13 (/home/admin1/.phpbrew/php/php-5.4.13) +default -- --with-bz2=/usr php-5.5.5 (/home/admin1/.phpbrew/php/php-5.5.5) php-5.3.27 (/home/admin1/.phpbrew/php/php-5.3.27)

He intentado cambiar las rutas de los archivos de configuración para que apunten al PHP de phpbrew. Pero nada parece estar funcionando.

¿Cómo puedo decirle a Apache que use la versión PHP de phpbrew?


La solución que encontré para administrar varias versiones de PHP con un servidor Apache es ejecutar PHP-FPM y FastCGI en lugar de mod_php . De esta manera puedo tener varias versiones de PHP en ejecución, y seleccionar qué sitios de mi máquina de desarrollo quiero ejecutar en qué versión de PHP.

Necesitará volver a compilar sus versiones de PHP con el indicador de phpbrew de +fpm lugar de +apxs2 , iniciarlos con el comando de phpbrew fpm start , instalar el libapache2-mod-fastcgi Apache libapache2-mod-fastcgi , y probablemente deshabilitar apache mod_php - pero es bastante hábil una vez que está trabajando. Puedo probar el mismo sitio con varias versiones de PHP simplemente configurando un host virtual diferente que apunta al mismo código, pero diferentes sockets de PHP-FPM.

Aquí hay un ejemplo de un archivo de configuración Apache 2.4 /etc/apache2/mods-enables/fastcgi.conf con 2 versiones de PHP instaladas a través de phpbrew:

<IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi FastCgiIpcDir /var/lib/apache2/fastcgi AddType application/x-httpd-fastphp5 .php Action application/x-httpd-fastphp5 /php5-fcgi # This is for php 5.6.28 FastCgiExternalServer /usr/lib/cgi-bin/php56-cgi -socket /home/{USERNAME}/.phpbrew/php/php-5.6.28/var/run/php-fpm.sock -pass-header Authorization # This is for php 7.0.13 FastCgiExternalServer /usr/lib/cgi-bin/php70-cgi -socket /home/{USERNAME}/.phpbrew/php/php-7.0.13/var/run/php-fpm.sock -pass-header Authorization # this seems to be required by Apache 2.4.10 <Directory /usr/lib/cgi-bin> Require all granted </Directory> </IfModule>

Luego, en la configuración de Virtualhost de su "sitio" de apache, puede especificar qué versión de PHP se ejecutará con un Alias ​​así:

<VirtualHost *:80> # ServerName, ServerAdmin, etc DocumentRoot /var/www/my-site-code # Then point the php5-fcgi handler to a specific version of PHP # Here is PHP7, as defined in the fastcgi.conf file Alias /php5-fcgi /usr/lib/cgi-bin/php70-cgi </VirtualHost>



Necesitas construir un PHP con apxs2 :

1) Asegúrese de haber instalado sudo apt-get install apache2-dev .

2) Ejecute phpbrew install 5.4.22 +apxs2=/usr/bin/apxs2

Entonces debería ver el archivo de módulo construido en su archivo de configuración de Apache.


Si phpbrew instala con éxito la versión php con + apxs2 ext, debería tener un nuevo archivo ".so" dentro de la biblioteca de módulos de apache2 (usr / lib / apache2 / modules no / etc / apache2 / mods-available).

Debería haber un php5.load o php7.load creado dentro de la carpeta / etc / apache2 / mods-available que apunta al archivo .so mencionado.

El archivo .so que figura en esos archivos .load es la versión que se carga.

Para cambiar entre una versión php5 y php7 use a2enmod / a2dismod php5 php7.

Necesitas recargar apache2 después de cambiar la configuración.

Si los archivos php se están mostrando como texto sin formato, debe agregar esto al archivo php * .load:

Aplicación AddType / x-httpd-php .php

O para evitar tener que editar los archivos de carga php cada vez que instale una nueva versión, puede configurar esto globalmente en su archivo de configuración apache2:

Aplicación SetHandler / x-httpd-php

Estas instrucciones están destinadas a un servidor de desarrollo.

Mi guión personal para esto:

#!/bin/bash i=1 c=1 options=() while [ $c -gt 0 ] do v=$(phpbrew list | sed -n "${i}p") if [ -z "$v" ]; then c=0 elif [ -n "$v" ]; then options+=("$v") fi i=$[$i+1] done count=0 printf "/n" echo ''Available versions:'' for i in "${options[@]}" do echo "$i $[$count+1]" count=$[$count+1] done printf "/n" echo ''Which version should be enabled?'' read selected chosen="${options[$selected - 1]}" chosen="$(echo -e "${chosen}" | tr -d ''[:space:]'')" chosen="$(echo -e "${chosen}" | sed ''s//*//g'')" chosen="$(echo -e "${chosen}" | sed ''s/php-//g'')" echo -e "php-${chosen} to be enabled." source $HOME/.phpbrew/bashrc phpbrew switch php-${chosen} if [[ $chosen =~ ^5 ]]; then sudo a2dismod php7 sudo a2enmod php5 sudo service apache2 reload elif [[ $chosen =~ ^7 ]]; then sudo a2dismod php5 sudo a2enmod php7 sudo service apache2 reload else echo ''This script only works on php 5 and 7''; fi

El script ejecuta phpbrew list en su nombre y le permite seleccionar la versión con las teclas numéricas. A continuación, ejecuta el conmutador phpbrew y también activa o desactiva los módulos apache2 y reinicia el servidor.