en ubuntu hay apache.conf en / etc / apache2, también pensé en esto, tal vez en el futuro haga algún paquete que sea muy útil para los desarrolladores web
Puede hacer esto con suPHP, no estoy seguro de los detalles
Marco Ceppi
1
¿Hay algo como Python Virtualenv para tener implementaciones limpias y aisladas de PHP?
lenzai
¿Ha considerado configurar servidores virtuales de Ubuntu utilizando el software de virtualización que usa sin cabeza? Me sorprendería si lo que quieres hacer no está bien servido (sin juego de palabras) por tal configuración.
Simon Hoare
1
Defina lo que significa "cambiar fácilmente". Utilicé esto para el trabajo: mi servidor web estaba usando PHP .phpy .php5archivos diferentes. También puede configurar su servidor WWW para usar diferentes versiones de PHP para diferentes puertos (como http://localhost:80y http://localhost:8080) o diferentes dominios (como http://localphp52y http://localphp53) dejando intacta toda la estructura restante de las carpetas para que pueda comparar fácilmente la ejecución de una aplicación web en dos entornos cambiando el actual URL
cprn
Respuestas:
61
Puede usar un administrador de versiones php para lograr esto. Existen diferentes gestores de versiones disponibles como:
Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
Nanne
2
Simplemente revise los enlaces que tienen muy buena documentación en sus sitios. ¿De verdad quieres que copie y pegue cosas de su sitio web?
aneeshep
77
Irónicamente, una de las razones para no solo publicar enlaces es linkrot, por lo que esta publicación ahora sufre.
MirroredFate
@aneeshep, no copiar y pegar su documentación, sino extractos relevantes y algunas líneas sobre lo que es un "administrador de versiones php" y cómo usarlo / configurarlo para ese problema específico sería realmente bienvenido.
Matthieu el
20
Usted puede ejecutar 2 versiones de PHP diferentes a la vez, pero no es tan fácil como apt-conseguirlos. Debe ejecutar una versión instalada por separado y servirla de acuerdo con la configuración de su configuración de apache.
Puedes hacer esto usando fastcgi, por ejemplo: básicamente lo que estás buscando es la configuración que ves en esta página . Agrega un controlador diferente en su configuración según la situación / puerto / dominio que necesita. El truco, después de instalar ambas versiones, es este paso:
=== de esa página ==
El último paso fue crear hosts virtuales. Al final tengo tres archivos en / etc / apache2 / sites-enabled: 000-default, php5.3.17 y php5.4.7 con los siguientes contenidos
defecto:
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www
<Directory "/var/www">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
AddHandler php-cgi .php
Action php-cgi /php-fcgi/php5317.fcgi
</Directory>
</VirtualHost>
php5.3.17:
<VirtualHost *:80>
ServerName 5317.localhost
DocumentRoot /var/www
<Directory "/var/www">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
AddHandler php-cgi .php
Action php-cgi /php-fcgi/php5317.fcgi
</Directory>
</VirtualHost>
php5.4.7:
<VirtualHost *:80>
ServerName 547.localhost
DocumentRoot /var/www
<Directory "/var/www">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
AddHandler php-cgi .php
Action php-cgi /php-fcgi/php547.fcgi
</Directory>
</VirtualHost>
Vea para la instalación completa la pregunta vinculada . No olvides mirar los dos enlaces en el encabezado también, se ven como buenos tutoriales (pero menos comprimidos). Esto y eso
(No se preocupe por el hecho de que la pregunta vinculada es una gran pregunta sin respuesta aceptada. El método debería (y funciona) bien, pero el usuario olvidó usarlo <?phpy lo usó <?con etiquetas cortas desactivadas, vea los comentarios)
Instalé php 5.6 y 7.0, pero además de todos los consejos, siguió ejecutando 5.6, por lo que este comando ahorra el día (en mi caso, elegí la opción 1 y reinicio apache):
Igual que el script de "Growling Flea", pero con nuevas versiones.
Agregar el PPA
Los paquetes PHP 5.6 y PHP 7.0 son de un PPA de terceros, no provistos por los repositorios oficiales de Ubuntu de Canonical. Los PPA que recomiendo aquí son de Ondřej Surý, que empaqueta PHP para Debian (que luego es usado por Ubuntu), así que si bien no es un repositorio oficial, ¡no es exactamente al azar! El PPA en sí está
aquí
Para agregar el PPA a su configuración:
sudo add-apt-repository ppa:ondrej/php
Entonces también queremos obtener información sobre lo que se ofrece en este nuevo PPA, así que ejecute:
sudo apt-get update
Instalar nuevas versiones de PHP
Ya tenía algunos de los paquetes php5 instalados, pero no desinstalé nada, solo dejé que resolviera lo que quería hacer cuando le pedí que instalara las nuevas versiones:
sudo apt-get install php5.6 php7.0
Esto dio lugar a muchas quejas de apt y muchos conflictos. La primera resolución sugerida fue eliminar todos los paquetes php5 de stock para poder instalar PHP 5.6, así que acepté la primera sugerencia.
Utilizo apache, por lo que esta configuración me dio apache con los módulos php5.6 y php7.0 disponibles, y el módulo php5.6 realmente cargado.
Además del PHP en sí, todas las extensiones y otras herramientas que esperaría con PHP están disponibles para ambas versiones de PHP, por lo que es muy fácil agregar los módulos que necesita. Estaba muy, muy impresionado con lo bien que se hace esto.
Configurar y cambiar versiones
Ahora tiene dos versiones completamente separadas de PHP instaladas en su sistema, así que echemos un vistazo a dónde se fueron todas las piezas.
Todos los archivos de configuración están en /etc/php/5.6y /etc/php/7.0
respectivamente: aquí es donde puede configurar qué extensiones se cargan, establecer la configuración ini y todo lo demás para cada versión de forma aislada.
Soy un usuario de Apache, y como mencioné, ambos módulos están disponibles. Entonces, para cambiar de uno a otro, tengo que hacer:
sudo a2dismod php5.6
sudo a2enmod php7.0
sudo service apache2 restart
Desde la línea de comandos, tengo php5.6 y php7.0 disponibles como comandos. También todavía tengo un comando php: busque en / etc / Alternatives para ver que se vincula simbólicamente a una versión particular de PHP cli *. También puede verificar rápidamente cuál está usando el suyo ejecutando php -v.
* más específicamente, ejecute qué php para ver qué versión de PHP se está utilizando, pero esto probablemente apuntará /usr/bin/php, lo que para mí es en sí mismo un enlace simbólico al /etc/alternatives/phpcomando.
Trabajando con extensiones
Este PPA viene con el paquete php-pear habitual que ofrece el comando pecl para ambas versiones de PHP, por lo que cualquier extensión disponible a través de PECL se puede instalar de la manera habitual. También necesitará los encabezados relevantes para instalar php5.6-dev o php7.0-dev.
Cuando finalice la instalación de pecl, recibirá una nota para agregar el archivo * .so a su php.ini; de hecho, lo mejor que puede hacer aquí es mirar lo que está en /etc/php/mods-available. Ya habrá algunos módulos aquí, cada uno en su propio archivo con el nombre de la extensión y terminando en .ini. Puede copiar uno para usarlo como plantilla o crear el suyo propio y poner toda la configuración relevante para la extensión (como mínimo, lo que necesita extension=[extensionName].so).
Una vez que la nueva extensión esté en mods disponibles, habilítela y luego verifíquela haciendo:
sudo phpenmod extension
php -m
Esto creará los enlaces simbólicos en los lugares correctos para que su versión actual de PHP cargue este módulo, y debería verlo en la lista de módulos de salida del php -m. Consejo profesional: si no lo ve en la salida, desplácese hasta la parte superior de la salida y vea si hay algún mensaje de error útil allí.
Instale PHP 5.3 por primera vez. Descargar fuentes php
md5sum Downloads/php-5.3.10.tar.bz2
mkdir ~/Sources
cd ~Sources/
cp -Rf ../Downloads/php-5.3.10.tar.bz2 .
tar xjf php-5.3.10.tar.bz2
cd php-5.3.10/
sudo mkdir /usr/local/php/php_5.3.10
Instale PHP5.6 por primera vez. Descargar fuentes php
md5sum Downloads/php-5.6.11.tar.bz2
mkdir ~/Sources
cd ~Sources/
cp -Rf ../Downloads/php-5.6.11.tar.bz2 .
tar xjf php-5.6.11.tar.bz2
cd php-5.6.11/
sudo mkdir /usr/local/php/php-5.6.11
Script manager versiones PHP: Cree un archivo llamado php.shy póngalo en /bin/:
#!/bin/bash
opcion=0
cat << CABECERAMENU
Opciones del menu
1=> PHP 5.3.102=> PHP 5.6.11
CABECERAMENU
echo -n "Ingrese su eleccion: "
read opcion
echo
case $opcion in"1")
rm /etc/apache2/php.conf
ln -s /usr/local/php/php_5.3.10.conf /etc/apache2/php.conf
/etc/init.d/apache2 restart
;;"2")
rm /etc/apache2/php.conf
ln -s /usr/local/php/php_5.6.11.conf /etc/apache2/php.conf
/etc/init.d/apache2 restart
;;*)
echo "Opcion no valida";;esac
Compila e instala php 5.3:
cd ~/Sources/php-5.3.10/
sudo ./configure --prefix=/usr/local/php/php_5.3.10 --with-config-file-path=/usr/local/php/php_5.3.10/lib --with-mysql --with-libdir=/lib/x86_64-linux-gnu --with-apxs2=/usr/bin/apxs2 --enable-zip --with-gd --with-curl --with-xmlrpc --with-freetype-dir=/usr/lib/x86_64-linux-gnu --with-jpeg-dir=/usr/lib/x86_64-linux-gnu --with-pdo-mysql --with-pdo-pgsql --enable-soap
sudo make clean
sudo make
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/lib/apache2/modules/libphp5.*
sudo make install
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/local/php/php-5.3.10/modules/libphp5.so
sudo mv /usr/lib/apache2/modules/libphp5.so /usr/local/php/php_5.3.10/modules/
ls -lhart /usr/local/php/php_5.3.10/modules/
sudo a2dismod php5
sudo service apache2 restart
Compila e instala php 5.6
cd ~/Sources/php-5.6.11
sudo ./configure --prefix=/usr/local/php/php_5.6.11 --with-config-file-path=/usr/local/php/php_5.6.11/lib --with-mysql --with-libdir=/lib/x86_64-linux-gnu --with-apxs2=/usr/bin/apxs2 --enable-zip --with-gd --with-curl --with-xmlrpc --enable-calendar --enable-sockets --with-freetype-dir=/usr/lib/x86_64-linux-gnu --with-jpeg-dir=/usr/lib/x86_64-linux-gnu --with-pdo-mysql --with-pdo-pgsql --enable-soap
sudo make clean
sudo make
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/lib/apache2/modules/libphp5.*
sudo make install
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/local/php/php_5.6.11/modules/libphp5.so
sudo mv /usr/lib/apache2/modules/libphp5.so /usr/local/php/php_5.6.11/modules
ls -lhart /usr/local/php/php_5.6.11/modules
sudo a2dismod php5
sudo service apache2 restart
Vamos a usarlos:
$ sudo php.sh
Opciones del menu
1 => PHP 5.3.10
2 => PHP 5.6.11
Ingrese su eleccion: 1
* Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
Una sola instancia de apache no puede ejecutar dos versiones diferentes de PHP simultáneamente (al menos hasta donde yo sé).
No se pueden instalar dos versiones diferentes de PHP desde los paquetes, ya que entrarán en conflicto (e intente sobrescribir los mismos directorios).
Solución:
para b) Compile "la otra" versión de PHP desde la fuente, manualmente (o si lo prefiere, tome la fuente del paquete apropiado y modifíquelo para evitar conflictos y modificar las rutas de instalación)
para a) Crear un conjunto separado de configuraciones para apache con diferentes rutas de módulos y secuencias de comandos de inicio separadas. Y, por supuesto, ejecútelo en un puerto separado.
¿No hay una secuencia de comandos preempaquetada para compilar estas instancias múltiples de PHP en paralelo? ¿Solo para hacerlo manualmente y parchear caminos? Entonces, esto significa que todas las empresas de hosting desarrollan scripts personalizados para ejecutar estas versiones paralelas y nunca comparten su esfuerzo.
lenzai
44
Una sola instancia de apache puede ejecutar 2 versiones de php a la vez.
Nanne
1
En lugar de hacer múltiples VirtualHost, simplemente agrego el siguiente código en mi .htaccessarchivo y sorprendentemente funcionó,
Si desea ejecutarlos al mismo tiempo, necesita dos puertos diferentes. Tal vez pueda cambiar su configuración de apache (httpd.conf) con un script simple que mueva una u otra versión a la posición correcta antes de comenzar apache.
Ya tengo PHP 5.3.5 instalado. ¿Cómo puedo instalar PHP 5.2.17? ¿Podría decirme dónde y qué debo cambiar para cambiar en estas dos versiones? El archivo httpd.conf está vacío en mi instalación.
Debiprasad
0
También puede ejecutar cada sitio web con diferentes usuarios. Más seguro.
Bienvenido a Ask Ubuntu! Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
user98085
No tuve tiempo suficiente para hacer lo que dijiste. Supongo que solo quería mostrar un camino. Todavía necesita aprender a usar el material de formateo. ¡Gracias de cualquier manera!
Henrique Fernandes
0
Escribí un script bash que me permite cambiar fácilmente entre las versiones de php instaladas en mi caja. Ejecuto varios hosts virtuales porque tengo varios proyectos web con clientes que tienen programas antiguos y nuevos. Algunos de estos proyectos requieren versiones anteriores de php y otros proyectos requieren php7.0.
Lea mis comentarios y asegúrese de comprender lo que está sucediendo antes de usar esto.
#!/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 exitif["$NEWVERSION"=""];then
echo current version is ${array[0]}.To change version please use argument
exit 1fi
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
Tuve el mismo problema cuando manejaba múltiples proyectos. Remití este artículo,
pero fue como cada vez que necesito cambiar las versiones si es necesario, pero esto me da la flexibilidad para cli y web por separado.
Si bien este enlace puede responder la pregunta, es mejor incluir aquí las partes esenciales de la respuesta y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden volverse inválidas si la página vinculada cambia. - De la opinión
waltinator
@waltinator Gracias por la revisión, seguro se ocupará de esto
Shivdhwaj Pandey
0
Se puede hacer deshabilitando y habilitando la nueva versión de PHP-
cambiar a una versión anterior -
a2dismod php7.0
service apache2 restart
cambie a la versión más reciente
a2enmod php7.0
service apache2 restart
.php
y.php5
archivos diferentes. También puede configurar su servidor WWW para usar diferentes versiones de PHP para diferentes puertos (comohttp://localhost:80
yhttp://localhost:8080
) o diferentes dominios (comohttp://localphp52
yhttp://localphp53
) dejando intacta toda la estructura restante de las carpetas para que pueda comparar fácilmente la ejecución de una aplicación web en dos entornos cambiando el actual URLRespuestas:
Puede usar un administrador de versiones php para lograr esto. Existen diferentes gestores de versiones disponibles como:
Mi favorito es phpbrew. Espero que esto ayude.
fuente
Usted puede ejecutar 2 versiones de PHP diferentes a la vez, pero no es tan fácil como apt-conseguirlos. Debe ejecutar una versión instalada por separado y servirla de acuerdo con la configuración de su configuración de apache.
Puedes hacer esto usando fastcgi, por ejemplo: básicamente lo que estás buscando es la configuración que ves en esta página . Agrega un controlador diferente en su configuración según la situación / puerto / dominio que necesita. El truco, después de instalar ambas versiones, es este paso:
=== de esa página ==
defecto:
php5.3.17:
php5.4.7:
Vea para la instalación completa la pregunta vinculada . No olvides mirar los dos enlaces en el encabezado también, se ven como buenos tutoriales (pero menos comprimidos). Esto y eso
(No se preocupe por el hecho de que la pregunta vinculada es una gran pregunta sin respuesta aceptada. El método debería (y funciona) bien, pero el usuario olvidó usarlo
<?php
y lo usó<?
con etiquetas cortas desactivadas, vea los comentarios)fuente
Instalé php 5.6 y 7.0, pero además de todos los consejos, siguió ejecutando 5.6, por lo que este comando ahorra el día (en mi caso, elegí la opción 1 y reinicio apache):
fuente
phpinfo()
yphp -v
hacer una verificación cruzada ya que ambos pueden tener un valor diferente.Este funciona para mí: https://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu
Igual que el script de "Growling Flea", pero con nuevas versiones.
fuente
Desde esta publicación , acabo de ordenar los comandos y los explico en orden a medida que me sirvieron (Ubuntu 12.04)
Este método te da:
script con menú, que permite cambiar entre las versiones de php instaladas (no ambas al mismo tiempo)
Varias versiones de PHP instaladas en su servidor
archivos conf separados
Instale todas las versiones que necesita (tengo dos)
Instalar dependencias:
Instale PHP 5.3 por primera vez. Descargar fuentes php
Instale PHP5.6 por primera vez. Descargar fuentes php
Script manager versiones PHP: Cree un archivo llamado
php.sh
y póngalo en/bin/
:Compila e instala php 5.3:
Compila e instala php 5.6
Vamos a usarlos:
fuente
Problemas:
Una sola instancia de apache no puede ejecutar dos versiones diferentes de PHP simultáneamente (al menos hasta donde yo sé).
No se pueden instalar dos versiones diferentes de PHP desde los paquetes, ya que entrarán en conflicto (e intente sobrescribir los mismos directorios).
Solución:
para b) Compile "la otra" versión de PHP desde la fuente, manualmente (o si lo prefiere, tome la fuente del paquete apropiado y modifíquelo para evitar conflictos y modificar las rutas de instalación)
para a) Crear un conjunto separado de configuraciones para apache con diferentes rutas de módulos y secuencias de comandos de inicio separadas. Y, por supuesto, ejecútelo en un puerto separado.
fuente
En lugar de hacer múltiples
VirtualHost
, simplemente agrego el siguiente código en mi.htaccess
archivo y sorprendentemente funcionó,Nodo: ya lo había instalado
php7.2-fpm
antes de usar el código.fuente
Si desea ejecutarlos al mismo tiempo, necesita dos puertos diferentes. Tal vez pueda cambiar su configuración de apache (httpd.conf) con un script simple que mueva una u otra versión a la posición correcta antes de comenzar apache.
fuente
También puede ejecutar cada sitio web con diferentes usuarios. Más seguro.
Usé este enfoque una vez.
http://blog.servergrove.com/2011/08/22/how-to-setup-multiple-php-versions-on-apache/
Ahora creo que es mejor usar php-fpm ... pero es un poco más complicado configurar múltiples versiones de php.
Tendrá que ejecutar múltiples php-fpms y configurar apache para que se usen entre sí.
fuente
Escribí un script bash que me permite cambiar fácilmente entre las versiones de php instaladas en mi caja. Ejecuto varios hosts virtuales porque tengo varios proyectos web con clientes que tienen programas antiguos y nuevos. Algunos de estos proyectos requieren versiones anteriores de php y otros proyectos requieren php7.0.
Lea mis comentarios y asegúrese de comprender lo que está sucediendo antes de usar esto.
fuente
Tuve el mismo problema cuando manejaba múltiples proyectos. Remití este artículo, pero fue como cada vez que necesito cambiar las versiones si es necesario, pero esto me da la flexibilidad para cli y web por separado.
Pasando de php5.6 a php7.0
Para Apache, podemos usar el comando como:
Para CLI, podemos usar el comando como:
Pasando de php7.0 a php5.6
Para Apache, podemos usar el comando como:
Para CLI, podemos usar el comando como:
fuente
Se puede hacer deshabilitando y habilitando la nueva versión de PHP-
fuente