Cambiar las versiones de php en la línea de comandos ubuntu 16.04

96

He instalado php 5.6 y php 7.1 en mi Ubuntu 16.04

Sé que con Apache como servidor web, puedo hacer

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

Cuando desactivo php7.1 en los módulos de Apache y habilito php 5.6, Apache reconoce el cambio y usa el intérprete de php 5.6 como se esperaba.

Pero cuando ejecuto el servidor web php interno desde la línea de comandos:

php -S localhost:8888

php maneja las solicitudes usando php 7. Entonces, ¿cómo cambio entre php 5.6 y php 7.1 en la línea de comandos?

salim dijo
fuente

Respuestas:

230

Modo de conmutación interactivo

sudo update-alternatives --config php

Conmutación manual

Desde PHP 5.6 => PHP 7.1

PHP 5.6 predeterminado está configurado en su sistema y necesita cambiar a PHP 7.1.

Apache:

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

Línea de comando:

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

Desde PHP 7.1 => PHP 5.6

PHP 7.1 predeterminado está configurado en su sistema y necesita cambiar a PHP 5.6.

Apache:

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

Línea de comando:

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

Fuente

Stevie G
fuente
1
sudo update-alternativas --set php /usr/bin/php5.6 estos comandos me ahorraron tiempo ... gracias @StevieG
Ask Bytes
Eres el mejor hermano ... Muchas gracias.
Fendi Septiawan
Tuve una falla de segmentación en el reinicio de apache2. Luego descubrí que tenía más de una versión de PHP habilitada a la vez. Tuve que deshabilitar 7.1 y 7.2 antes de habilitar 5.6.
donquixote
De hecho, ¡acabo de usar esta solución para cambiar php -vde 7.2 a 7.1! Es genial y simple.
SaidbakR
Un gran consejo también está aquí: askubuntu.com/questions/761713/… . Por cierto, puede instalar varios módulos php: 5.6, 7.0, 7.1, 7.2, por ejemplo, y luego hacer malabarismos con ellos, si obtiene ciertos errores para una versión determinada de php (por ejemplo, create_functionya no es compatible a partir de php 7.2 .)
Vadim Anisimov
97

escriba esto en su línea de comando, debería funcionar para todos los ubuntu entre 16.04, 18.04 y 20.04.

$ sudo update-alternatives --config php

y esto es lo que obtendrás

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:

Elija la versión adecuada

GiorgosK
fuente
2
Esta debería ser la respuesta
itsazzad
¿Por qué php7.2 dos veces?
Sand Of Vega
@SandOfVega esta es la salida del comando y podría mostrar algo 2 veces si es el predeterminado, supongo, pero su salida puede ser diferente.
GiorgosK
Ubuntu 20.04 me da "error: no hay alternativas para php"
burzum
12

De hecho, no recomendaría usar a2enmodpara php 5 o 7. Yo usaría update-alternatives. Puede hacer sudo update-alternatives --config phppara establecer qué versión de PHP para todo el sistema desea utilizar. Esto hace que su línea de comandos y las versiones de Apache funcionen igual. Puede leer más update-alternativesen la página de manual .

FatBoyXPC
fuente
1
No está funcionando para mi. PHPINFO sigue mostrando siempre la misma versión, incluso después de que intento elegir.
brunoramonalmeida
12

Creo que deberías probar esto

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
fuente
1
Dé suficiente explicación de sus respuestas para comprender por qué funciona este código y qué significa, de modo que la respuesta sea útil para los usuarios que tienen el mismo problema. Vea el enlace para saber cómo escribir buenas respuestas.
Jino Shaji
12

Para enumerar todas las versiones disponibles y elegir entre ellas:

sudo update-alternatives --config php

O hacerlo manualmente

sudo a2dismod php7.1 // disable
sudo a2enmod php5.6  // enable
Kamal Kumar
fuente
9

Puede crear un script para cambiar de versiones: sudo nano switch_php luego escriba esto:

#!/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 )"

salir y guardar hacerlo ejecutable: sudo chmod +x switch_php

Para ejecutar el script simplemente escriba ./switch_php [VERSION_NUMBER]donde el parámetro es 7 o 5.6

¡Eso es todo, ahora puede cambiar fácilmente de PHP7 a PHP 5.6!

ihakoz
fuente
Parece prometedor, pero qué hace 'n' flag en el comando ln cuando usa "ln -sfn ...". No he podido encontrar esa bandera ("n") en ninguna parte de la documentación.
Fakhar Anwar
8

Puede usar las siguientes líneas de comando para cambiar entre dos versiones de PHP.

P.ej

Quiero cambiar PHP Versionde 7.1a 7.2podemos usar el siguiente comando

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

a2dismodse usa para deshabilitar la versión actual de php y a2enmodse usa para habilitar la versión

Ashish Viradiya
fuente
8

Puede ser que tenga una versión antigua de PHP como PHP 5.6 en su sistema y también instaló PHP 7.2, por lo que hay múltiples PHP en su máquina. Hay algunas aplicaciones que se desarrollaron cuando la versión anterior de PHP 5.6 era la última versión, todavía están activas y usted está trabajando en esas aplicaciones. Es posible que esté trabajando en Laravel simultáneamente, pero Laravel requiere PHP 7+ para comenzar. ¿Conseguir la imagen?

En ese caso, puede cambiar entre las versiones de PHP para adaptarse a sus necesidades.

Cambiar de PHP 5.6 => PHP 7.2

Apache:-

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

Línea 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

Y viceversa, cambiar de PHP 7.2 => PHP 5.6

Apache:-

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

Línea 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
fuente
3

Escriba el comando dado en su terminal ..

Para deshabilitar la versión de PHP seleccionada ...

    • sudo a2dismod php5
    • reinicio de apache2 del servicio sudo
  1. Para habilitar otra versión de PHP ...

    • sudo a2enmod php5.6
    • reinicio de apache2 del servicio sudo

Actualizará la versión de Php, lo mismo revertirá si desea que la versión se reduzca, puede verla en PHP_INFO ();

Sonpal singh Sengar
fuente
3

Cambie de PHP 5.6 a PHP 7.2 usando:

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

Cambie de PHP 7.2 a PHP 5.6 usando:

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

Puede usar estos scripts PHP Switch de código abierto, que fueron diseñados específicamente para su uso en Ubuntu 16.04 LTS.

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

Hay un setup.shscript que instala todas las dependencias necesarias para PHP 5.6, 7.0, 7.1 y 7.2. Una vez que esto esté completo, puede ejecutar uno de los siguientes scripts de cambio para cambiar la CLI de PHP y la versión del módulo 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
fuente
1

Desde PHP 5.6 => PHP 7.1

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

para versiones antiguas de Linux

 $ sudo service apache2 restart

para una versión más reciente

$ systemctl restart apache2
Excelente Lawrence
fuente
1

por favor siga los pasos:

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
fuente
1

Hice un script bash para cambiar entre diferentes versiones de PHP en Ubuntu.

Espero que ayude a alguien.

Aquí está el script: (guárdelo en /usr/local/bin/sphp.sh, no olvide agregar la bandera + x con el 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
fuente
0

Al instalar laravel en Ubuntu 18.04, seleccione la instalación predeterminada de PHP 7.3.0RC3, pero laravel y symfony no se instalarán correctamente quejándose de missin php-xml y php-zip, incluso aunque estén instalados. Necesita cambiar a php 7.1, siguiendo las instrucciones anteriores o,

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

ahora, ejecutando el nuevo blog de Laravel, procederá correctamente

pingle60
fuente