Alternar versões php na linha de comando ubuntu 16.04


108

Eu instalei php 5.6 e e php 7.1 no meu Ubuntu 16.04

Eu sei que com o Apache como meu servidor web, posso fazer

a2enmod php5.6 #to enable php5
a2enmod php7.1 #to enable php7

Quando eu desabilito o php7.1 em módulos Apache e habilito o php 5.6, o Apache reconhece a mudança e usa o interpretador php 5.6 conforme o esperado.

Mas quando executo o servidor web php interno a partir da linha de comando:

php -S localhost:8888

php lida com solicitações usando php 7. Então, como faço para alternar entre php 5.6 e php 7.1 na linha de comando?


Respostas:


246

Modo de comutação interativo

sudo update-alternatives --config php

Troca Manual

Do PHP 5.6 => PHP 7.1

O PHP 5.6 padrão está definido em seu sistema e você precisa mudar para o PHP 7.1.

Apache:

$ sudo a2dismod php5.6
$ sudo a2enmod php7.1
$ sudo service apache2 restart

Linha de comando:

$ sudo update-alternatives --set php /usr/bin/php7.1

Do PHP 7.1 => PHP 5.6

O PHP 7.1 padrão está definido em seu sistema e você precisa mudar para o PHP 5.6.

Apache:

$ sudo a2dismod php7.1
$ sudo a2enmod php5.6
$ sudo service apache2 restart

Linha de comando:

$ sudo update-alternatives --set php /usr/bin/php5.6

Fonte


1
sudo update-transactions --set php /usr/bin/php5.6 este comando economizou meu tempo .. obrigado @StevieG
— Ask Bytes

Você é o melhor mano ... Muito obrigado.
— Fendi Septiawan

Eu tive falha de segmentação no reinício do apache2. Então descobri que tinha mais de uma versão do PHP habilitada ao mesmo tempo. Tive que desabilitar 7.1 e 7.2 antes de habilitar 5.6.
— donquixote

Na verdade, acabei de usar essa solução para mudar php -vde 7.2 para 7.1! É ótimo e simples.
— SaidbakR

Um ótimo conselho também está aqui - askubuntu.com/questions/761713/… . A propósito, você pode instalar vários módulos php - 5.6, 7.0, 7.1, 7.2, por exemplo, e então fazer malabarismos com eles, se você obtiver certos erros para uma determinada versão do php (por exemplo, create_functionnão é mais suportado a partir do php 7.2 .)
— Vadim Anisimov

121

digite isso em sua linha de comando, deve funcionar para todos os ubuntu entre 16.04, 18.04 e 20.04.

$ sudo update-alternatives --config php

e é isso que você vai conseguir

There are 4 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/php7.2   72        auto mode
  1            /usr/bin/php5.6   56        manual mode
  2            /usr/bin/php7.0   70        manual mode
  3            /usr/bin/php7.1   71        manual mode
  4            /usr/bin/php7.2   72        manual mode
Press <enter> to keep the current choice[*], or type selection number:

Escolha a versão apropriada


2
Esta deve ser a resposta
— itsazzad de

Por que php7.2 duas vezes?
— Sand Of Vega

@SandOfVega esta é a saída do comando e pode exibir algo 2 vezes se for o padrão, eu acho, mas sua saída pode ser diferente.
— GiorgosK

Ubuntu 20.04 me dá "erro: sem alternativas para php"
— burzum

@burzum Funciona bem no Ubuntu 20.04.
— Pothi Kalimuthu

13

Eu acho que você deveria tentar isso

De php5.6 a php7.1

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

sudo update-alternatives --set php /usr/bin/php7.1
sudo update-alternatives --set phar /usr/bin/phar7.1
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.1

De php7.1 a php5.6

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

sudo update-alternatives --set php /usr/bin/php5.6
sudo update-alternatives --set phar /usr/bin/phar5.6
sudo update-alternatives --set phar.phar /usr/bin/phar.phar5.6

1
Dê explicações suficientes para suas respostas para entender por que esse código funciona e o que ele significa. Portanto, a resposta será útil para usuários com o mesmo problema. Veja o link para saber como escrever boas respostas.
— Jino Shaji

12

Na verdade, eu não recomendaria usar a2enmodpara php 5 ou 7. Eu usaria update-alternatives. Você pode fazer sudo update-alternatives --config phppara definir qual versão do PHP em todo o sistema deseja usar. Isso faz com que sua linha de comando e as versões do Apache funcionem da mesma forma. Você pode ler mais sobre update-alternativesna página de manual .


1
Não está funcionando para mim. PHPINFO continua mostrando sempre a mesma versão, mesmo depois de tentar escolher.
— brunoramonalmeida

12

Para listar todas as versões disponíveis e escolher entre elas:

sudo update-alternatives --config php

Ou faça manualmente

sudo a2dismod php7.1 // disable
sudo a2enmod php5.6  // enable

10

Você pode criar um script para alternar entre as versões: em sudo nano switch_php seguida, digite:

#!/bin/sh
#!/bin/bash
echo "Switching to PHP$1..."
case $1 in
    "7")
        sudo a2dismod php5.6
        sudo a2enmod php7.0
        sudo service apache2 restart
        sudo ln -sfn /usr/bin/php7.0 /etc/alternatives/php;;
    "5.6")
        sudo a2dismod php7.0
        sudo a2enmod php5.6
        sudo service apache2 restart
        sudo ln -sfn /usr/bin/php5.6 /etc/alternatives/php;;
esac
echo "Current version: $( php -v | head -n 1 | cut -c-7 )"

sair e salvar torná-lo executável: sudo chmod +x switch_php

Para executar o script basta digitar ./switch_php [VERSION_NUMBER]onde o parâmetro é 7 ou 5,6

Agora você pode facilmente mudar do PHP7 para o PHP 5.6!


Parece promissor, mas o que o sinalizador 'n' faz no comando ln quando você usa "ln -sfn ...". Não consegui encontrar esse sinalizador ("n") em qualquer lugar da documentação.
— Fakhar Anwar

8

Você pode usar as linhas de comando abaixo para alternar entre as duas versões do PHP.

Por exemplo

Eu quero mudar PHP Versionde 7.1para 7.2podemos usar o comando abaixo

sudo a2dismod php7.1 &&  sudo update-alternatives --set php /usr/bin/php7.2 && sudo a2enmod php7.2 && sudo service apache2 restart

a2dismodé usado para desabilitar a versão atual do php e a2enmodé usado para habilitar a versão


8

Pode ser que você tenha uma versão antiga do PHP como o PHP 5.6 em seu sistema e também instalou o PHP 7.2, então há vários PHP em sua máquina. Existem alguns aplicativos que foram desenvolvidos quando o PHP 5.6 mais antigo era a versão mais recente, eles ainda estão ativos e você está trabalhando nesses aplicativos. Você pode estar trabalhando no Laravel simultaneamente, mas o Laravel requer PHP 7+ para começar. Entendendo a foto?

Nesse caso, você pode alternar entre as versões do PHP para atender aos seus requisitos.

Mudar de PHP 5.6 => PHP 7.2

Apache:-

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

Linha de comando:-

sudo update-alternatives --set php /usr/bin/php7.2
sudo update-alternatives --set phar /usr/bin/phar7.2
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.2
sudo update-alternatives --set phpize /usr/bin/phpize7.2
sudo update-alternatives --set php-config /usr/bin/php-config7.2

E vice-versa, mude de PHP 7.2 => PHP 5.6

Apache:-

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

Linha de comando:-

sudo update-alternatives --set php /usr/bin/php5.6
sudo update-alternatives --set phar /usr/bin/phar5.6
sudo update-alternatives --set phar.phar /usr/bin/phar.phar5.6
sudo update-alternatives --set phpize /usr/bin/phpize5.6
sudo update-alternatives --set php-config /usr/bin/php-config5.6

3

Digite o comando fornecido em seu terminal ..

Para desativar a versão do PHP selecionada ...

    • sudo a2dismod php5
    • sudo service apache2 restart
  1. Para habilitar outra versão do PHP ....

    • sudo a2enmod php5.6
    • sudo service apache2 restart

Irá atualizar a versão do Php, a mesma coisa reverter se você quiser o downgrade da versão, você pode ver por PHP_INFO ();


3

Mude de PHP 5.6 para PHP 7.2 usando:

sudo a2dismod php5.6 && sudo a2enmod php7.2 && sudo service apache2 restart

Mude de PHP 7.2 para PHP 5.6 usando:

sudo a2dismod php7.2 && sudo a2enmod php5.6 && sudo service apache2 restart

3

Você pode usar esses scripts de troca de PHP de código aberto, que foram projetados especificamente para uso no Ubuntu 16.04 LTS.

https://github.com/rapidwebltd/php-switch-scripts

Existe um setup.shscript que instala todas as dependências necessárias para PHP 5.6, 7.0, 7.1 e 7.2. Depois de concluído, você pode apenas executar um dos seguintes scripts de switch para alterar a versão do módulo PHP CLI e Apache 2.

./switch-to-php-5.6.sh
./switch-to-php-7.0.sh
./switch-to-php-7.1.sh
./switch-to-php-7.2.sh

1

Do PHP 5.6 => PHP 7.1

$ sudo a2dismod php5.6
$ sudo a2enmod php7.1

para versões antigas do linux

 $ sudo service apache2 restart

para uma versão mais recente

$ systemctl restart apache2

1

siga os passos:

i.e : your current version is : current_version = 7.3 , and you want to change it to : new_version = 7.2

1) sudo a2dismod php(current_version) 
2) sudo a2enmod php(new_version)
3) sudo update-alternatives --config php (here you need to select php version number) 
4) restart apache through : 
  sudo /etc/init.d/apache2 restart OR
  sudo service apache2 restart

1

Fiz um script bash para alternar entre as diferentes versões do PHP no Ubuntu.

Espero que ajude alguém.

Aqui está o script: (salve-o em /usr/local/bin/sphp.sh, não se esqueça de adicionar + x sinalizador com o comando: sudo chmod + x /usr/local/bin/sphp.sh)

#!/bin/bash

# Usage
if [ $# -ne 1 ]; then
  echo "Usage: sphp [phpversion]"
  echo "Example: sphp 7.2"
  exit 1
fi

currentversion="`php -r \"error_reporting(0); echo str_replace('.', '', substr(phpversion(), 0, 3));\"`"
newversion="$1"

majorOld=${currentversion:0:1}
minorOld=${currentversion:1:1}
majorNew=${newversion:0:1}
minorNew=${newversion:2:1}

if [ $? -eq 0 ]; then
  if [ "${newversion}" == "${currentversion}" ]; then
    echo "PHP version [${newversion}] is already being used"
    exit 1
  fi

  echo "PHP version [$newversion] found"
  echo "Switching from [php${currentversion}] to [php${newversion}] ... "

  printf "a2dismod php$majorOld.$minorOld ... "
  sudo a2dismod "php${majorOld}.${minorOld}"
  printf "[OK] and "

  printf "a2enmod php${newversion} ... "
  sudo a2enmod "php${majorNew}.${minorNew}"
  printf "[OK]\n"

  printf "update-alternatives ... "
  sudo update-alternatives --set php "/usr/bin/php${majorNew}.${minorNew}"
  printf "[OK]\n"

  sudo service apache2 restart
  printf "[OK] apache2 restarted\n"
else
  echo "PHP version $majorNew.$minorNew was not found."
  echo "Try \`sudo apt install php@${newversion}\` first."
  exit 1
fi

echo "DONE!"



0

Ao instalar o laravel no Ubuntu 18.04, seja o padrão de instalação do PHP 7.3.0RC3 selecionado, mas o laravel e o symfony não serão instalados corretamente reclamando sobre missin php-xml e php-zip, mesmo que estejam instalados. Você precisa mudar para o php 7.1, usando as instruções acima ou,

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

agora, rodando laravel new blog, irá proceder corretamente

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.