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

70

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

54

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
18

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

  
  1. O último passo foi criar hosts virtuais. No final, eu tenho três arquivos em / etc / apache2 / sites-enabled: 000-default, php5.3.17 e   php5.4.7 Com o seguinte conteúdo
  2.   

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.

  

Adicione o PPA

     

Os pacotes PHP 5.6 e PHP 7.0 são de um PPA de terceiros, não   fornecidos pelos repositórios oficiais do Ubuntu da Canonical. Os PPAs   Eu estou recomendando aqui são de Ondřej Surý quem pacotes PHP para o Debian   (que é então usado pelo Ubuntu) por isso, embora não seja um oficial   repositório, ele não é exatamente aleatório! O PPA em si é    aqui

     

Para adicionar o PPA à sua configuração:

sudo add-apt-repository ppa:ondrej/php  
     

Depois, também queremos obter informações sobre o que é oferecido   este novo PPA, então execute:

sudo apt-get update   
     

Instale novas versões do PHP

     

Eu já tinha alguns dos pacotes do php5 instalados, mas não   desinstalar qualquer coisa, eu apenas deixo o apt descobrir o que ele queria fazer quando   Pedi para instalar as novas versões:

sudo apt-get install php5.6 php7.0
     

Isso resultou em muitas reclamações de apt e muitos conflitos.   A primeira resolução sugerida foi remover todo o estoque php5   pacotes para que o PHP 5.6 pudesse ser instalado - então eu apenas aceitei o   primeira sugestão.

     

Eu uso o apache, então essa configuração me deu o apache com php5.6 e php7.0   módulos disponíveis, e o módulo php5.6 realmente carregado.

     

Assim como o próprio PHP, todas as extensões e outras ferramentas   você esperaria com PHP estão lá para ambas as versões do PHP, por isso é muito   fácil de adicionar nos módulos que você precisa. Eu fiquei muito, muito impressionado   com o quão bem isso é feito.

     

Configurando e alternando versões

     

Agora você tem duas versões completamente separadas do PHP instaladas em seu   sistema, então vamos dar uma olhada onde todas as peças foram!

     

Os arquivos de configuração estão todos em /etc/php/5.6 e /etc/php/7.0   respectivamente - aqui dentro é onde você pode configurar quais extensões   são carregados, defina as configurações ini e tudo o mais para cada versão   em isolamento.

     

Sou um usuário do apache e, como mencionei, os dois módulos estão disponíveis. assim   para mudar de um para outro eu preciso fazer:

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

Para usuários nginx, as mudanças são quase tão fáceis, a Digital Ocean tem   boa documentação sobre isso (eles têm ótimos documentos!) então confira   seu guia:    link   já que inclui uma seção sobre a reconfiguração do nginx para usar outra versão   do PHP.

     

Na linha de comando, tenho tanto o php5.6 quanto o php7.0 disponíveis como   comandos. Eu também ainda tenho um comando php - olhe em / etc / alternatives   para ver que ele linka para uma versão particular do PHP cli *. Você pode   também verifique rapidamente qual deles está usando executando php -v .

     

& amp; ast; mais especificamente, execute o php para ver qual versão do PHP está sendo usada - mas isso provavelmente apontará para /usr/bin/php , que para   me é um link simbólico para o comando /etc/alternatives/php .

     

Trabalhando com extensões

     

Este PPA vem com o pacote php-pear usual que oferece o pecl   comando para ambas as versões do PHP, então quaisquer extensões que estão disponíveis   via PECL pode ser instalado da maneira habitual. Você também precisará do   cabeçalhos relevantes para que o php5.6-dev ou o php7.0-dev sejam   instalado.

     

Quando a instalação do pecl for concluída, você receberá uma nota para adicionar   * .so arquivo para o seu php.ini; Na verdade, a melhor coisa a fazer aqui é olhar o que está em /etc/php/mods-available . Haverá alguns   módulos já aqui, cada um em seu próprio arquivo nomeado após a extensão   e terminando em .ini. Você pode copiar um para usar como modelo ou criar   o seu próprio e colocar toda a configuração relevante para a extensão em   (no mínimo, você precisa de extension=[extensionName].so ).

     

Quando a nova extensão estiver em mods disponíveis, ative e verifique   fazendo:

sudo phpenmod extension  
php -m  
     

Isso criará os links simbólicos nos lugares corretos para sua corrente   versão do PHP para carregar este módulo, e você deve vê-lo na lista   dos módulos gerados pelo php -m . Dica profissional: se você não vê isso no   saída, percorrer todo o caminho até o topo da saída e ver se há   Há alguma mensagem de erro útil lá.

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