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?

salimsaid
fonte

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

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

GiorgosK
fonte
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
Rupinder Sohal
fonte
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 .

FatBoyXPC
fonte
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
Kamal Kumar
fonte
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!

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

Ashish Viradiya
fonte
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
Dinesh Suthar
fonte
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 ();

Sonpal singh Sengar
fonte
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
user1560627
fonte
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
DivineOmega
fonte
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
Excelente Lawrence
fonte
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
Yash
fonte
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!"

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

pingle60
fonte