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 ==
% 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)
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.
% bl0ck_qu0te%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=$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
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