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


98

Я встановив 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 у командному рядку?


Відповіді:


232

Інтерактивний режим перемикання

sudo update-alternatives --config php

Перемикання вручну

З PHP 5.6 => PHP 7.1

За замовчуванням у вашій системі встановлено PHP 5.6, і вам потрібно перейти на PHP 7.1.

Апачі:

$ 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.

Апачі:

$ 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
Запитай байти

Ти найкращий брат ... Велике спасибі.
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 .)
Вадим Анісімов

98

введіть це у своєму командному рядку, він повинен працювати для всіх 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:

Виберіть відповідну версію


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це ви можете прочитати на сторінці користувача .


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
Дайте достатньо пояснень для своїх відповідей, щоб зрозуміти, чому цей код працює і що він означає. Так, що відповідь буде корисною для користувачів, які мають ту саму проблему. Дивіться посилання, щоб знати, як правильно писати відповіді.
Jino Shaji

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

3

Ви можете використовувати ці сценарії з відкритим кодом PHP Switch, які були розроблені спеціально для використання в 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!"



0

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

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

тепер, запустивши laravel new blog, буде діяти правильно

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.