Переключение версий php в командной строке ubuntu 16.04

96

Я установил php 5.6 и php 7.1 на свой Ubuntu 16.04

Я знаю, что с Apache в качестве моего веб-сервера я могу делать

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

Когда я отключаю php7.1 в модулях Apache и включаю php 5.6, Apache распознает изменение и использует интерпретатор php 5.6, как и ожидалось.

Но когда я запускаю внутренний веб-сервер php из командной строки:

php -S localhost:8888

php обрабатывает запросы с помощью php 7. Итак, как мне переключаться между php 5.6 и php 7.1 в командной строке?

Салимсаид
источник

Ответы:

230

Интерактивный режим переключения

sudo update-alternatives --config php

Ручное переключение

Начиная с PHP 5.6 => PHP 7.1

В вашей системе установлен PHP 5.6 по умолчанию, и вам необходимо перейти на PHP 7.1.

Apache:

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

Командная строка:

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

Начиная с PHP 7.1 => PHP 5.6

В вашей системе установлен PHP 7.1 по умолчанию, и вам необходимо перейти на PHP 5.6.

Apache:

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

Командная строка:

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

Источник

Стиви Джи
источник
1
sudo update-alternatives --set php /usr/bin/php5.6 эта команда сэкономила мне время .. спасибо @StevieG
Ask Bytes
Ты лучший брат ... Большое спасибо.
Fendi Septiawan
У меня произошла ошибка сегментации при перезапуске apache2. Затем я обнаружил, что у меня одновременно было задействовано несколько версий PHP. Мне пришлось отключить 7.1 и 7.2 перед включением 5.6.
donquixote
Действительно, я только что использовал это решение для перехода php -vс 7.2 на 7.1! Это здорово и просто.
SaidbakR
Здесь также есть отличный совет - askubuntu.com/questions/761713/… . Кстати, вы можете установить несколько модулей php - например, 5.6, 7.0, 7.1, 7.2, а затем манипулировать ими, если вы получаете определенные ошибки для данной версии php (например, create_functionбольше не поддерживается, начиная с php 7.2 .)
Вадим Анисимов
97

введите это в свою командную строку, он должен работать для всех ubuntu между 16.04, 18.04 и 20.04.

$ sudo update-alternatives --config php

и это то, что вы получите

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:

Выберите подходящую версию

GiorgosK
источник
2
Это должен быть ответ
itsazzad
Почему php7.2 два раза?
Sand Of Vega,
@SandOfVega, это результат выполнения команды, и он может отображать что-то 2 раза, если это значение по умолчанию, я думаю, но ваш результат может быть другим.
GiorgosK
Ubuntu 20.04 выдает «ошибку: нет альтернативы для php»
Burzum
12

На самом деле я бы не рекомендовал использовать a2enmodдля php 5 или 7. Я бы использовал update-alternatives. Вы можете sudo update-alternatives --config phpуказать, какую общесистемную версию PHP вы хотите использовать. Благодаря этому ваша версия командной строки и версии apache будут работать одинаково. Вы можете узнать больше update-alternativesна странице руководства .

FatBoyXPC
источник
1
У меня это не работает. PHPINFO по-прежнему показывает одну и ту же версию, даже после того, как я попробую выбрать.
brunoramonalmeida
12

Я думаю тебе стоит попробовать это

С php5.6 на 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

С php7.1 на 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
Дайте достаточно объяснений своим ответам, чтобы понять, почему этот код работает и что он означает, чтобы ответ был полезен для пользователей, у которых возникла такая же проблема. См. Ссылку, чтобы узнать, как писать хорошие ответы.
Джино Шаджи
12

Чтобы перечислить все доступные версии и выбрать из них:

sudo update-alternatives --config php

Или сделать вручную

sudo a2dismod php7.1 // disable
sudo a2enmod php5.6  // enable
Камаль Кумар
источник
9

Вы можете создать сценарий для переключения с версий: sudo nano switch_php затем введите следующее:

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

выйти и сохранить, сделать его исполняемым: sudo chmod +x switch_php

Чтобы выполнить сценарий, просто введите ./switch_php [VERSION_NUMBER]значение параметра 7 или 5,6.

Вот и все, теперь вы можете легко переключиться с PHP7 на PHP 5.6!

ихакоз
источник
Выглядит многообещающе, но что делает флаг 'n' в команде ln, когда вы используете "ln -sfn ...". Мне не удалось найти этот флаг («n») в документации.
Фахар Анвар,
8

Вы можете использовать приведенные ниже командные строки для переключения между двумя версиями PHP.

Например

Я хочу переключиться PHP Versionс 7.1на, 7.2мы можем использовать команду ниже

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

a2dismodиспользуется для отключения текущей версии php и a2enmodиспользуется для включения версии

Ашиш Вирадия
источник
8

Возможно, у вас в системе установлена ​​старая версия PHP, такая как PHP 5.6, и вы также установили PHP 7.2, так что на вашем компьютере есть несколько PHP. Есть некоторые приложения, которые были разработаны, когда более ранняя версия PHP 5.6 была последней версией, они все еще существуют, и вы работаете над этими приложениями. Возможно, вы работаете над Laravel одновременно, но Laravel требует PHP 7+ для начала. Получили картину?

В этом случае вы можете переключаться между версиями PHP в соответствии с вашими требованиями.

Переход с PHP 5.6 => PHP 7.2

Апач: -

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

Командная строка:-

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

И наоборот, переключиться с PHP 7.2 => PHP 5.6

Апач: -

sudo a2dismod php7.2
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
sudo update-alternatives --set phpize /usr/bin/phpize5.6
sudo update-alternatives --set php-config /usr/bin/php-config5.6
Динеш Сутар
источник
3

Введите данную команду в свой терминал ..

Чтобы отключить выбранную версию PHP ...

    • sudo a2dismod php5
    • sudo service apache2 перезапуск
  1. Для включения другой версии PHP ....

    • sudo a2enmod php5.6
    • sudo service apache2 перезапуск

Он обновит версию Php, то же самое в обратном порядке, если вы хотите понизить версию, вы можете увидеть это с помощью PHP_INFO ();

Сонпал Сингх Сенгар
источник
3

Переключитесь с PHP 5.6 на PHP 7.2, используя:

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

Переключитесь с PHP 7.2 на PHP 5.6, используя:

sudo a2dismod php7.2 && sudo a2enmod php5.6 && sudo service apache2 restart
user1560627
источник
3

Вы можете использовать эти сценарии переключения PHP с открытым исходным кодом, которые были разработаны специально для использования в Ubuntu 16.04 LTS.

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

Есть setup.shскрипт, который устанавливает все необходимые зависимости для PHP 5.6, 7.0, 7.1 и 7.2. После этого вы можете просто запустить один из следующих сценариев переключения, чтобы изменить версию модуля PHP CLI и 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

Начиная с PHP 5.6 => PHP 7.1

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

для старых версий linux

 $ sudo service apache2 restart

для более свежей версии

$ systemctl restart apache2
Отличный Лоуренс
источник
1

пожалуйста, следуйте инструкциям:

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

Я сделал сценарий bash для переключения между различными версиями PHP в Ubuntu.

Надеюсь, это кому-то поможет.

Вот сценарий: (сохраните его в /usr/local/bin/sphp.sh, не забудьте добавить флаг + x с помощью команды: 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
источник
0

Вы можете использовать приведенный ниже сценарий для простого переключения между версией PHP. Я также включил конфигурацию phpize.

https://github.com/anilkumararumulla/switch-php-version

Скачайте файл скрипта и запустите

sh switch.sh
Анил Кумар
источник
0

При установке laravel на Ubuntu 18.04, по умолчанию выбрана установка PHP 7.3.0RC3, но laravel и symfony не будут установлены должным образом, жалуясь на отсутствие php-xml и php-zip, даже если они установлены. Вам необходимо перейти на php 7.1, используя приведенные выше инструкции или,

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

теперь запуск нового блога laravel будет работать правильно

пингл60
источник