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.
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?
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 ==
- 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
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)
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
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 deextension=[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á.
Desta postagem , Eu apenas coloquei em ordem os comandos e explico em ordem como eu fui servido (Ubuntu 12.04)
Este método fornece:
script com menu, que permite alternar entre as versões do php instaladas (não as duas ao mesmo tempo)
várias versões do PHP instaladas em seu servidor
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
Problemas:
A instância única do apache não pode executar duas versões diferentes do PHP simultaneamente (pelo menos até onde eu sei).
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.
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.
Você também pode executar cada site com vários usuários. Mais seguro.
Eu usei essa abordagem uma vez.
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.
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
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.
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