Como ter duas versões do PHP instaladas e alternar facilmente entre elas?

72

Eu quero ter o PHP 5.2.17 e o PHP 5.3.5 instalados na minha máquina Ubuntu e mudar de acordo com a minha necessidade. Como posso conseguir isso?

    
por Debiprasad 24.06.2011 / 14:07

11 respostas

57

Você pode usar um gerenciador de versões php para conseguir isso. Gerenciadores de versões diferentes estão disponíveis como:

Meu favorito é o phpbrew. Espero que isso ajude.

    
por aneeshep 03.02.2013 / 08:32
19

Você pode executar 2 versões diferentes do PHP de uma só vez, mas não é tão fácil quanto apenas executá-las. Você precisa executar uma versão instalada separadamente e atendê-la de acordo com as configurações em sua configuração do apache.

Você pode fazer isso usando fastcgi, por exemplo: basicamente o que você está procurando é a configuração que você vê em esta página . Você adiciona um manipulador diferente em sua configuração com base na situação / porta / domínio que você precisa. O truque, depois de instalar as duas versões, é este passo:

=== dessa página ==

% bl0ck_qu0te%

padrão:

    <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>

Veja a instalação completa a questão vinculada . Não se esqueça de olhar para os dois links no cabeçalho, eles se parecem com bons tutoriais (mas menos compactados). Isto e Que

(não se preocupe com o fato de que a pergunta vinculada é grande sem nenhuma resposta aceita. O método deve (e funciona) bem, mas o usuário esqueceu de usar <?php e usou <? com shorttags, veja os comentários)

    
por Nanne 01.02.2013 / 11:45
11

Eu instalei o PHP 5.6 e 7.0, mas além de todas as dicas ele continuou rodando 5.6, então este comando salva o dia (no meu caso eu escolho a opção 1 e reinicio o apache):

sudo update-alternatives --config php
    
por Marcelo Ágil 19.03.2017 / 15:06
5

Este funciona para mim: link

Igual ao script de "Growling Flea", mas usando novas versões.

% bl0ck_qu0te%     
por Daniel Pineda 20.05.2017 / 10:08
3

Desta postagem , Eu apenas coloquei em ordem os comandos e explico em ordem como eu fui servido (Ubuntu 12.04)

Este método fornece:

  1. script com menu, que permite alternar entre as versões do php instaladas (não as duas ao mesmo tempo)

  2. várias versões do PHP instaladas em seu servidor

  3. arquivos conf separados

Instale todas as versões que você precisa (eu tenho duas)

Instalar dependências:

sudo apt-get install flex apache2-threaded-dev libxml2-dev apache2 apache2-mpm-prefork apache2-threaded-dev apache2-utils apache2.2-bin apache2.2-common

Instale o PHP 5.3 pela primeira vez. Faça o download de fontes 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 o PHP5.6 pela primeira vez. Faça o download de fontes 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

Versões do gerenciador de scripts PHP: Crie um arquivo chamado php.sh e coloque-o em /bin/ :

#!/bin/bash
opcion=0
cat << CABECERAMENU
Opciones del menu
1 => PHP 5.3.10
2 => 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

Compile e instale o 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

Compile e instale o 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 usá-los:

$ 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
    
por PegasusOnlin 30.08.2016 / 13:26
2

Problemas:

  1. A instância única do apache não pode executar duas versões diferentes do PHP simultaneamente (pelo menos até onde eu sei).

  2. Duas versões diferentes do PHP não podem ser instaladas a partir de pacotes, pois elas entrarão em conflito (e tentarão sobrescrever os mesmos diretórios).

Solução:

  • para b) Compile a versão do PHP a partir da fonte, manualmente (ou se preferir, pegue a fonte do pacote apropriado e modifique-a para evitar conflitos e modificar os caminhos de instalação)

  • para a) Crie um conjunto separado de configurações para o apache com diferentes caminhos de módulo e script de inicialização separado. E, claro, executá-lo em uma porta separada.

por Mekk 28.03.2012 / 18:17
0

Se você quiser executá-los ao mesmo tempo, precisará de duas portas diferentes. Talvez você possa simplesmente alterar sua configuração do apache (httpd.conf) com um script simples que mova uma ou outra versão para a posição correta antes de iniciar o apache.

    
por Martin Ueding 24.06.2011 / 14:13
0

Você também pode executar cada site com vários usuários. Mais seguro.

Eu usei essa abordagem uma vez.

link

Agora eu acho que é melhor usar o php-fpm ... mas é um pouco mais complicado configurar várias versões do php.

Será necessário executar múltiplos php-fpms e configurar o apache para usar um ao outro.

    
por Henrique Fernandes 02.02.2013 / 23:57
0

Eu escrevi um script bash que me permite alternar facilmente entre as versões do php instaladas na minha caixa. Eu executo vários hosts virtuais porque tenho vários projetos da Web com clientes que possuem programas antigos e novos. Alguns desses projetos requerem versões mais antigas do php e outros projetos requerem o php7.0.

Leia os meus comentários e certifique-se de entender o que está acontecendo antes de usar isso.

#!/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
    
por Growling Flea 14.02.2017 / 05:30
0

Em vez de criar vários VirtualHost , adicionei o código abaixo no meu arquivo .htaccess e, surpreendentemente, funcionou,

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
</FilesMatch>

Nó: Eu já tinha instalado php7.2-fpm antes de usar o código.

    
por Rohan Kumar 25.05.2018 / 13:59
0

Eu tive o mesmo problema quando estava lidando com vários projetos. Consultei este artigo  Mas foi como toda vez que eu preciso mudar as versões, se necessário, mas isso dá a flexibilidade para cli e web separadamente.

Mover de php5.6 para php7.0

Para o Apache, podemos usar o comando como:

sudo a2dismod php5.6 ; sudo a2enmod php7.0 ; sudo service apache2 restart

Para CLI, podemos usar o comando como:

sudo update-alternatives --set php /usr/bin/php7.0

Mover de php7.0 para php5.6

Para o Apache, podemos usar o comando como:

sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart

Para CLI, podemos usar o comando como:

sudo update-alternatives --set php /usr/bin/php5.6
    
por Shivdhwaj Pandey 28.05.2018 / 22:31