@hakre De acuerdo, usar FPM haría menos probable que múltiples versiones se afecten entre sí cuando se carguen como un módulo de Apache :)
Ja͢ck
@Jack: Argh, no módulo Apache, FCGI;)
hakre
Hasta ahora he probado phpbrew y php-version pero ambos parecen fallar al compilar PHP.
buen culo
Respuestas:
17
Una forma de hacer esto es tener su versión principal de php configurada con mod_php y ejecutar todas las demás a través de cgi rápido en diferentes puertos (es decir, 81, 82, 83, etc.). Sin embargo, esto no garantizará un comportamiento totalmente consistente.
Una idea: para PHP 5.2.1, use el puerto 10521. Para 5.0.0, use 10500 :)
Wayne
2
Otra opción sería ejecutarlo usando CGI (o FastCGI) en diferentes rutas, es decir, / cgi500 /, / cgi528 /, ...
Gray Panther
En caso de que esté en Debian y quiera usar empaquetado, le recomiendo usar debootstrap para crear un sistema chroot que contenga su versión de PHP, luego configure Apache dentro del sistema chroot'ed.
Max Tsepkov
23
Con CentOS, puede hacerlo usando una combinación de fastcgi para una versión de PHP y php-fpm para la otra, como se describe aquí:
3. Compile e instale php 5.2 y 5.3 desde la fuente
Para php 5.2 y 5.3, podemos encontrar muchos paquetes rpm en Internet. Sin embargo, todos entran en conflicto con el php que viene con CentOS, así que será mejor que los construyamos e instalemos desde soure, esto no es difícil, el punto es instalar php en una ubicación diferente.
Sin embargo, cuando instalamos php como un módulo de apache, solo podemos usar una versión de php al mismo tiempo. Si necesitamos ejecutar una versión diferente de php en el mismo servidor, al mismo tiempo, por ejemplo, un host virtual diferente puede necesitar una versión diferente de php. Afortunadamente, los geniales FastCGI y PHP-FPM pueden ayudar.
Edite /etc/php53/php-fpm.conf, cambie algunas configuraciones. Este paso es principalmente para descomentar algunas configuraciones, puede ajustar el valor si lo desea.
Sin embargo, esta es una respuesta de enlace único. Incluya los detalles relevantes en la respuesta en lugar de confiar completamente en el otro sitio. Los enlaces tienen el molesto problema de que pueden desaparecer y, de esta manera, SO aún no contiene la información relevante.
Maarten Bodewes
Es posible que desee buscar en CloudLinux. Es una solución de pago, pero tiene un precio aceptable.
transilvlad
1
¡Respuesta correcta! Aquí está la misma solución para Ubuntu: howtoforge.com/…
Tobias Gaertner
10
Tener varias instancias de apache + php nunca me gustó mucho, pero probablemente sea la forma más fácil de hacerlo. Si no te apetece KISS ... aquí tienes una idea.
Ponga su apache en funcionamiento e intente configurarlo como debian y ubuntu, por ejemplo, tenga directorios para los módulos cargados. Su configuración de apache puede usar líneas como esta:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Luego construya su primera versión de php y asígnele un prefijo que tenga el número de versión contenido explícitamente, por ejemplo, /usr/local/php/5.2.8, /usr/local/php/5.2.6 ...
Para cambiar de versión, todo lo que tiene que hacer es cambiar los archivos de carga y configuración del directorio que apache incluye para los de otra versión. Puede automatizar eso con un simple script bash (elimine el archivo real, copie el archivo de versiones alternativas en su lugar y reinicie Apache.
Una ventaja de esta configuración es que todo es constante, siempre que mantenga php.ini igual en términos de opciones y módulos (lo que tendría que hacer con CGI de todos modos). Todos están pasando por SAPI. Sus aplicaciones no necesitarán ningún cambio en absoluto, ni necesitarán usar URL relativas.
Creo que esto debería funcionar, pero, de nuevo, no lo he probado ni es probable que lo haga, ya que no tengo los mismos requisitos que tú. Sin embargo, comente si alguna vez lo intenta.
Un método alternativo (si está bien ejecutar una única versión de PHP a la vez) es definir varios servicios de Apache, cada uno de los cuales utilizará una versión de PHP diferente.
En primer lugar, condiciones de uso en el archivo de configuración de Apache:
Ahora puede iniciar uno de los servicios anteriores a la vez (debe apagar uno antes de iniciar el otro).
Si ha instalado anteriormente Apache como servicio, puede eliminarlo usando el siguiente comando (reemplace el nombre del servicio con el que ha usado):
apache -k uninstall -n Apache224
Una nota más es que yo personalmente uso un "programa de icono de área de notificación" llamado "Seobiseu" para iniciar y detener los servicios según sea necesario. Le he agregado los dos servicios anteriores.
En realidad, es una solución muy inteligente. Si desea ejecutar varios servicios en paralelo, puede incluir Listen 80y Listen 81en cada uno ifdefine, respectivamente.
caiosm1005
Buena idea, pero la pregunta es sobre un servidor LAMP, no un servidor WAMP.
Vinicius Monteiro
4
Entendiendo que probablemente está hablando de una máquina local / de escritorio y probablemente le gustaría seguir hablando de una máquina local / de escritorio, le ofreceré una alternativa en caso de que pueda ayudarlo a usted oa alguien más:
Configure múltiples instancias de servidor virtual en la nube y comparta su código entre ellas como un repositorio de git (o mercurial, supongo, aunque no tengo experiencia personal, todo lo que realmente necesita es algo descentralizado). Esto tiene la ventaja de brindarle una experiencia de producción lo más cercana posible, y si tiene experiencia en la configuración de servidores, entonces no es tan complicado (o costoso, si solo desea poner en marcha un servidor, haga lo que tenga que hacer, luego gírelo hacia abajo nuevamente, entonces está hablando de unos pocos centavos para decir 50 centavos, hasta unos pocos dólares si simplemente lo deja funcionando).
Hago todo el desarrollo de mi proyecto en la nube en estos días y me ha resultado mucho más sencillo administrar la infraestructura de lo que nunca lo hice al usar instalaciones locales / no virtualizadas, y hace que este tipo de escenario en paralelo sea bastante sencillo. Solo quería lanzar la idea si no la hubieras considerado.
Acabo de degradar con éxito de PHP5.3 en Ubuntu 10.
Para hacer esto utilicé el siguiente script:
#! /bin/sh
php_packages=`dpkg -l | grep php | awk '{print $2}'`
sudo apt-get remove $php_packages
sed s/lucid/karmic/g /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/karmic.list
sudo mkdir -p /etc/apt/preferences.d/
for package in $php_packages;
doecho"Package: $package
Pin: release a=karmic
Pin-Priority: 991
" | sudo tee -a /etc/apt/preferences.d/php
done
sudo apt-get update
sudo apt-get install $php_packages
Para cualquiera que no sepa cómo ejecutar scripts desde la línea de comandos, aquí hay un breve tutorial:
1. cd ~/
2. mkdir bin
3. sudo nano ~/bin/myscriptname.sh
4. paste in the script code I have posted above this
5. ctrl+x (this exits and prompts for you to save)
6. chmod u+x myscriptname.sh
Estos 6 pasos crean un script en una carpeta llamada "bin" en su directorio personal. A continuación, puede ejecutar este script llamando al siguiente comando:
buen guión, aunque karmic no funcionó para mí porque estaba en Power PC. Solo usé el script para eliminar mi instalación actual y luego construí manualmente 2.14
Jason
2
Rasmus Lerdorf, quien creó PHP, mantiene una solución Vagrant activa que parece resolver sus necesidades. Permite cambiar rápidamente entre versiones de PHP, que actualmente admite más de 20 versiones diferentes. Viene de fábrica con un servidor nginx, pero se puede cambiar fácilmente a apache2 con una configuración preconfigurada. También es compatible con MySQL listo para usar.
De esta manera tendrá acceso a todas las versiones de PHP, desplegables en dos de los servidores web principales, en una bonita caja vagabunda, mantenida por el gran hombre detrás de PHP.
Esta es probablemente, en mi humilde opinión, la 'mejor' respuesta: una máquina virtual diferente para cada versión (pero ¿puede ejecutar varias versiones en una dirección IP?). Pero qué irónico que el creador de php deba hacer esto: el mayor defecto de php debe ser la falta de compatibilidad entre versiones, lo que hace que Joomla, por ejemplo, sea casi inútil.
EML
0
Tengo varios proyectos en ejecución en mi caja. Si ya ha instalado más de una versión, este script bash debería ayudarle a cambiar fácilmente. En este momento tengo php5, php5.6 y php7.0, que a menudo cambio de un lado a otro dependiendo del proyecto en el que estoy trabajando. Aquí está mi código.
Siéntete libre de copiar. Asegúrese de comprender cómo funciona el código. Esto es para webhostin. mi caja local mis mods se almacenan en / etc / apache2 / mods-enabled /
#!/bin/bash# This file is for switching php versions. # To run this file you must use bash, not sh# # OS: Ubuntu 14.04 but should work on any linux# Example: bash phpswitch.sh 7.0# Written by Daniel Pflieger# growlingflea at g mail dot com
NEWVERSION=$1#this is the git directory target#get the active php enabled mod by getting the array of files and store#it to a variableVAR=$(ls /etc/apache2/mods-enabled/php*)
#parse the returned variables and get the version of php that is active.
IFS=' ' read -r -a array <<< "$VAR"array[0]=${array[0]#*php}array[0]=${array[0]%.conf}
#confirm that the newversion veriable isn't empty.. if it is tell user #current version and exitif [ "$NEWVERSION" = "" ]; then
echo current version is ${array[0]}. To change version please useargumentexit 1
fiOLDVERSION=${array[0]}
#confirmtotheuserthisiswhattheywanttodoecho "Updatephp" ${OLDVERSION} to ${NEWVERSION}
#givetheusertheopportunitytouseCTRL-Ctoexitotjusthitreturnreadx
#calla2dismodfunction: thisdeactivatethecurrentphpversionsudoa2dismodphp${OLDVERSION}
#callthea2enmodversion. Thisenablesthenewmodesudoa2enmodphp${NEWVERSION}
echo "Restartservice??"
readx
#restartapachesudoserviceapache2restart
Para las pruebas, simplemente ejecuto varias instancias de httpd en diferentes direcciones IP, por lo que tengo php7 ejecutándose en 192.168.0.70 y php5.6 ejecutándose en 192.168.0.56. En producción, tengo un sitio que ejecuta un antiguo oscommerce con php5.3 y solo tengo un archivo de configuración diferente para el sitio
También es una forma limpia de tener diferentes php.iniarchivos para diferentes sitios. Si solo tiene un par de sitios, es una buena manera de mantener las cosas organizadas y no tiene que preocuparse por más de un sitio a la vez cuando actualiza algo
Respuestas:
Una forma de hacer esto es tener su versión principal de php configurada con mod_php y ejecutar todas las demás a través de cgi rápido en diferentes puertos (es decir, 81, 82, 83, etc.). Sin embargo, esto no garantizará un comportamiento totalmente consistente.
fuente
Con CentOS, puede hacerlo usando una combinación de fastcgi para una versión de PHP y php-fpm para la otra, como se describe aquí:
https://web.archive.org/web/20130707085630/http://linuxplayer.org/2011/05/intall-multiple-version-of-php-on-one-server
Basado en CentOS 5.6, solo para Apache
1. Habilite el repositorio rpmforge y epel yum
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm sudo rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm sudo rpm -ivh epel-release-5-4.noarch.rpm
2. Instale php-5.1
La serie CentOS / RHEL 5.x tiene php-5.1 en la caja, simplemente instálelo con yum, por ejemplo:
3. Compile e instale php 5.2 y 5.3 desde la fuente
Para php 5.2 y 5.3, podemos encontrar muchos paquetes rpm en Internet. Sin embargo, todos entran en conflicto con el php que viene con CentOS, así que será mejor que los construyamos e instalemos desde soure, esto no es difícil, el punto es instalar php en una ubicación diferente.
Sin embargo, cuando instalamos php como un módulo de apache, solo podemos usar una versión de php al mismo tiempo. Si necesitamos ejecutar una versión diferente de php en el mismo servidor, al mismo tiempo, por ejemplo, un host virtual diferente puede necesitar una versión diferente de php. Afortunadamente, los geniales FastCGI y PHP-FPM pueden ayudar.
Compile e instale php-5.2 con fastcgi habilitado
1) Instale los paquetes de desarrollo necesarios
2) Compilar e instalar
wget http://cn.php.net/get/php-5.2.17.tar.bz2/from/this/mirror tar -xjf php-5.2.17.tar.bz2 cd php-5.2.17 ./configure --prefix=/usr/local/php52 \ --with-config-file-path=/etc/php52 \ --with-config-file-scan-dir=/etc/php52/php.d \ --with-libdir=lib64 \ --with-mysql \ --with-mysqli \ --enable-fastcgi \ --enable-force-cgi-redirect \ --enable-mbstring \ --disable-debug \ --disable-rpath \ --with-bz2 \ --with-curl \ --with-gettext \ --with-iconv \ --with-openssl \ --with-gd \ --with-mcrypt \ --with-pcre-regex \ --with-zlib make -j4 > /dev/null sudo make install sudo mkdir /etc/php52 sudo cp php.ini-recommended /etc/php52/php.ini
3) crea un script de envoltura fastcgi
crear archivo /usr/local/php52/bin/fcgiwrapper.sh
#!/bin/bash PHP_FCGI_MAX_REQUESTS=10000 export PHP_FCGI_MAX_REQUESTS exec /usr/local/php52/bin/php-cgi chmod a+x /usr/local/php52/bin/fcgiwrapper.sh Build and install php-5.3 with fpm enabled wget http://cn.php.net/get/php-5.3.6.tar.bz2/from/this/mirror tar -xjf php-5.3.6.tar.bz2 cd php-5.3.6 ./configure --prefix=/usr/local/php53 \ --with-config-file-path=/etc/php53 \ --with-config-file-scan-dir=/etc/php53/php.d \ --enable-fpm \ --with-fpm-user=apache \ --with-fpm-group=apache \ --with-libdir=lib64 \ --with-mysql \ --with-mysqli \ --enable-mbstring \ --disable-debug \ --disable-rpath \ --with-bz2 \ --with-curl \ --with-gettext \ --with-iconv \ --with-openssl \ --with-gd \ --with-mcrypt \ --with-pcre-regex \ --with-zlib make -j4 && sudo make install sudo mkdir /etc/php53 sudo cp php.ini-production /etc/php53/php.ini sed -i -e 's#php_fpm_CONF=\${prefix}/etc/php-fpm.conf#php_fpm_CONF=/etc/php53/php-fpm.conf#' \ sapi/fpm/init.d.php-fpm sudo cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm sudo chmod a+x /etc/init.d/php-fpm sudo /sbin/chkconfig --add php-fpm sudo /sbin/chkconfig php-fpm on sudo cp sapi/fpm/php-fpm.conf /etc/php53/
Configurar php-fpm
Edite /etc/php53/php-fpm.conf, cambie algunas configuraciones. Este paso es principalmente para descomentar algunas configuraciones, puede ajustar el valor si lo desea.
pid = run/php-fpm.pid listen = 127.0.0.1:9000 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 20
Entonces, comience fpm
Instalar y configurar mod_fastcgi, mod_fcgid
sudo yum install libtool httpd-devel apr-devel wget http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz tar -xzf mod_fastcgi-current.tar.gz cd mod_fastcgi-2.4.6 cp Makefile.AP2 Makefile sudo make top_dir=/usr/lib64/httpd/ install sudo sh -c "echo 'LoadModule fastcgi_module modules/mod_fastcgi.so' > /etc/httpd/conf.d/mod_fastcgi.conf" yum install mod_fcgid
Configurar y probar hosts virtuales
1) Agregue la siguiente línea a / etc / hosts
127.0.0.1 web1.example.com web2.example.com web3.example.com
2) Cree la raíz del documento web y coloque un index.php debajo para mostrar el cambio phpinfo a la raíz del usuario, ejecute
mkdir /var/www/fcgi-bin for i in {1..3}; do web_root=/var/www/web$i mkdir $web_root echo "<?php phpinfo(); ?>" > $web_root/index.php done
Nota: Se requiere el directorio vacío / var / www / fcgi-bin, NO LO QUITE MÁS TARDE
3) Cree el archivo de configuración de Apache (adjúntelo a httpd.conf)
NameVirtualHost *:80 # module settings # mod_fcgid <IfModule mod_fcgid.c> idletimeout 3600 processlifetime 7200 maxprocesscount 17 maxrequestsperprocess 16 ipcconnecttimeout 60 ipccommtimeout 90 </IfModule> # mod_fastcgi with php-fpm <IfModule mod_fastcgi.c> FastCgiExternalServer /var/www/fcgi-bin/php-fpm -host 127.0.0.1:9000 </IfModule> # virtual hosts... ################################################################# #1st virtual host, use mod_php, run php-5.1 ################################################################# <VirtualHost *:80> ServerName web1.example.com DocumentRoot "/var/www/web1" <ifmodule mod_php5.c> <FilesMatch \.php$> AddHandler php5-script .php </FilesMatch> </IfModule> <Directory "/var/www/web1"> DirectoryIndex index.php index.html index.htm Options -Indexes FollowSymLinks Order allow,deny Allow from all </Directory> </VirtualHost> ################################################################# #2nd virtual host, use mod_fcgid, run php-5.2 ################################################################# <VirtualHost *:80> ServerName web2.example.com DocumentRoot "/var/www/web2" <IfModule mod_fcgid.c> AddHandler fcgid-script .php FCGIWrapper /usr/local/php52/bin/fcgiwrapper.sh </IfModule> <Directory "/var/www/web2"> DirectoryIndex index.php index.html index.htm Options -Indexes FollowSymLinks +ExecCGI Order allow,deny Allow from all </Directory> </VirtualHost> ################################################################# #3rd virtual host, use mod_fastcgi + php-fpm, run php-5.3 ################################################################# <VirtualHost *:80> ServerName web3.example.com DocumentRoot "/var/www/web3" <IfModule mod_fastcgi.c> ScriptAlias /fcgi-bin/ /var/www/fcgi-bin/ AddHandler php5-fastcgi .php Action php5-fastcgi /fcgi-bin/php-fpm </IfModule> <Directory "/var/www/web3"> DirectoryIndex index.php index.html index.htm Options -Indexes FollowSymLinks +ExecCGI Order allow,deny Allow from all </Directory> </VirtualHost>
4) reinicia Apache. visite los 3 sitios respetuosamente para ver phpinfo y validar el resultado. es decir:
http://web1.example.com http://web2.example.com http://web3.example.com
Si todo está bien, puede usar uno de los 3 hosts virtuales como plantilla para crear un nuevo host virtual, con la versión de php deseada.
fuente
Tener varias instancias de apache + php nunca me gustó mucho, pero probablemente sea la forma más fácil de hacerlo. Si no te apetece KISS ... aquí tienes una idea.
Ponga su apache en funcionamiento e intente configurarlo como debian y ubuntu, por ejemplo, tenga directorios para los módulos cargados. Su configuración de apache puede usar líneas como esta:
Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf
Luego construya su primera versión de php y asígnele un prefijo que tenga el número de versión contenido explícitamente, por ejemplo, /usr/local/php/5.2.8, /usr/local/php/5.2.6 ...
El conf / load se vería así:
php5.2.6.load
LoadModule php5_module /usr/local/php/5.2.6/libphp5.so
php5.2.8.load
LoadModule php5_module /usr/local/php/5.2.8/libphp5.so
Para cambiar de versión, todo lo que tiene que hacer es cambiar los archivos de carga y configuración del directorio que apache incluye para los de otra versión. Puede automatizar eso con un simple script bash (elimine el archivo real, copie el archivo de versiones alternativas en su lugar y reinicie Apache.
Una ventaja de esta configuración es que todo es constante, siempre que mantenga php.ini igual en términos de opciones y módulos (lo que tendría que hacer con CGI de todos modos). Todos están pasando por SAPI. Sus aplicaciones no necesitarán ningún cambio en absoluto, ni necesitarán usar URL relativas.
Creo que esto debería funcionar, pero, de nuevo, no lo he probado ni es probable que lo haga, ya que no tengo los mismos requisitos que tú. Sin embargo, comente si alguna vez lo intenta.
fuente
Nota: El siguiente método funcionará en Windows.
Un método alternativo (si está bien ejecutar una única versión de PHP a la vez) es definir varios servicios de Apache, cada uno de los cuales utilizará una versión de PHP diferente.
En primer lugar, condiciones de uso en el archivo de configuración de Apache:
<ifdefine php54> SetEnv PHPRC C:/apache/php54/ ScriptAlias /php/ "C:/apache/php54/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php-cgi.exe" </ifdefine> <ifdefine php55> SetEnv PHPRC C:/apache/php55/ ScriptAlias /php/ "C:/apache/php55/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php-cgi.exe" </ifdefine>
Ahora, usando httpd.exe, cree dos servicios separados desde la línea de comando (elevado a administrador):
Ahora puede iniciar uno de los servicios anteriores a la vez (debe apagar uno antes de iniciar el otro).
Si ha instalado anteriormente Apache como servicio, puede eliminarlo usando el siguiente comando (reemplace el nombre del servicio con el que ha usado):
Una nota más es que yo personalmente uso un "programa de icono de área de notificación" llamado "Seobiseu" para iniciar y detener los servicios según sea necesario. Le he agregado los dos servicios anteriores.
fuente
Listen 80
yListen 81
en cada unoifdefine
, respectivamente.Entendiendo que probablemente está hablando de una máquina local / de escritorio y probablemente le gustaría seguir hablando de una máquina local / de escritorio, le ofreceré una alternativa en caso de que pueda ayudarlo a usted oa alguien más:
Configure múltiples instancias de servidor virtual en la nube y comparta su código entre ellas como un repositorio de git (o mercurial, supongo, aunque no tengo experiencia personal, todo lo que realmente necesita es algo descentralizado). Esto tiene la ventaja de brindarle una experiencia de producción lo más cercana posible, y si tiene experiencia en la configuración de servidores, entonces no es tan complicado (o costoso, si solo desea poner en marcha un servidor, haga lo que tenga que hacer, luego gírelo hacia abajo nuevamente, entonces está hablando de unos pocos centavos para decir 50 centavos, hasta unos pocos dólares si simplemente lo deja funcionando).
Hago todo el desarrollo de mi proyecto en la nube en estos días y me ha resultado mucho más sencillo administrar la infraestructura de lo que nunca lo hice al usar instalaciones locales / no virtualizadas, y hace que este tipo de escenario en paralelo sea bastante sencillo. Solo quería lanzar la idea si no la hubieras considerado.
fuente
Acabo de degradar con éxito de PHP5.3 en Ubuntu 10.
Para hacer esto utilicé el siguiente script:
#! /bin/sh php_packages=`dpkg -l | grep php | awk '{print $2}'` sudo apt-get remove $php_packages sed s/lucid/karmic/g /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/karmic.list sudo mkdir -p /etc/apt/preferences.d/ for package in $php_packages; do echo "Package: $package Pin: release a=karmic Pin-Priority: 991 " | sudo tee -a /etc/apt/preferences.d/php done sudo apt-get update sudo apt-get install $php_packages
Para cualquiera que no sepa cómo ejecutar scripts desde la línea de comandos, aquí hay un breve tutorial:
1. cd ~/ 2. mkdir bin 3. sudo nano ~/bin/myscriptname.sh 4. paste in the script code I have posted above this 5. ctrl+x (this exits and prompts for you to save) 6. chmod u+x myscriptname.sh
Estos 6 pasos crean un script en una carpeta llamada "bin" en su directorio personal. A continuación, puede ejecutar este script llamando al siguiente comando:
¡Oulia!
¡Espero que esto ayude a alguno de ustedes!
Como referencia, aquí es donde obtuve el guión: PHP5.2.10 para Ubuntu 10
Hay varias personas allí confirmando que esto funciona, y funcionó de maravilla para mí.
fuente
Rasmus Lerdorf, quien creó PHP, mantiene una solución Vagrant activa que parece resolver sus necesidades. Permite cambiar rápidamente entre versiones de PHP, que actualmente admite más de 20 versiones diferentes. Viene de fábrica con un servidor nginx, pero se puede cambiar fácilmente a apache2 con una configuración preconfigurada. También es compatible con MySQL listo para usar.
De esta manera tendrá acceso a todas las versiones de PHP, desplegables en dos de los servidores web principales, en una bonita caja vagabunda, mantenida por el gran hombre detrás de PHP.
Para obtener más información, me gustaría referirme a la charla del sr. Lerdorf en https://youtu.be/6XnysJAyThs?t=2864
El repositorio de github que contiene la solución Vagrant se encuentra en https://github.com/rlerdorf/php7dev
fuente
Tengo varios proyectos en ejecución en mi caja. Si ya ha instalado más de una versión, este script bash debería ayudarle a cambiar fácilmente. En este momento tengo php5, php5.6 y php7.0, que a menudo cambio de un lado a otro dependiendo del proyecto en el que estoy trabajando. Aquí está mi código.
Siéntete libre de copiar. Asegúrese de comprender cómo funciona el código. Esto es para webhostin. mi caja local mis mods se almacenan en / etc / apache2 / mods-enabled /
#!/bin/bash # This file is for switching php versions. # To run this file you must use bash, not sh # # OS: Ubuntu 14.04 but should work on any linux # Example: bash phpswitch.sh 7.0 # Written by Daniel Pflieger # growlingflea at g mail dot com NEWVERSION=$1 #this is the git directory target #get the active php enabled mod by getting the array of files and store #it to a variable VAR=$(ls /etc/apache2/mods-enabled/php*) #parse the returned variables and get the version of php that is active. IFS=' ' read -r -a array <<< "$VAR" array[0]=${array[0]#*php} array[0]=${array[0]%.conf} #confirm that the newversion veriable isn't empty.. if it is tell user #current version and exit if [ "$NEWVERSION" = "" ]; then echo current version is ${array[0]}. To change version please use argument exit 1 fi OLDVERSION=${array[0]} #confirm to the user this is what they want to do echo "Update php" ${OLDVERSION} to ${NEWVERSION} #give the user the opportunity to use CTRL-C to exit ot just hit return read x #call a2dismod function: this deactivate the current php version sudo a2dismod php${OLDVERSION} #call the a2enmod version. This enables the new mode sudo a2enmod php${NEWVERSION} echo "Restart service??" read x #restart apache sudo service apache2 restart
fuente
Para las pruebas, simplemente ejecuto varias instancias de httpd en diferentes direcciones IP, por lo que tengo php7 ejecutándose en 192.168.0.70 y php5.6 ejecutándose en 192.168.0.56. En producción, tengo un sitio que ejecuta un antiguo oscommerce con php5.3 y solo tengo un archivo de configuración diferente para el sitio
También es una forma limpia de tener diferentes
php.ini
archivos para diferentes sitios. Si solo tiene un par de sitios, es una buena manera de mantener las cosas organizadas y no tiene que preocuparse por más de un sitio a la vez cuando actualiza algofuente