Przełącz wersje php w linii poleceń ubuntu 16.04


108

Zainstalowałem php 5.6 i php 7.1 na moim Ubuntu 16.04

Wiem, że z Apache jako moim serwerem internetowym mogę to zrobić

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

Kiedy wyłączam php7.1 w modułach Apache i włączam php 5.6, Apache rozpoznaje zmianę i używa interpretera php 5.6 zgodnie z oczekiwaniami.

Ale kiedy uruchamiam wewnętrzny serwer WWW php z wiersza poleceń:

php -S localhost:8888

php obsługuje żądania przy użyciu php 7. Jak więc przełączać się między php 5.6 i php 7.1 w linii poleceń?


Odpowiedzi:


248

Interaktywny tryb przełączania

sudo update-alternatives --config php

Przełączanie ręczne

Z PHP 5.6 => PHP 7.1

Domyślnie w Twoim systemie jest ustawione PHP 5.6 i musisz przełączyć się na PHP 7.1.

Apache:

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

Wiersz poleceń:

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

Z PHP 7.1 => PHP 5.6

Domyślnie w Twoim systemie jest ustawione PHP 7.1 i musisz przełączyć się na PHP 5.6.

Apache:

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

Wiersz poleceń:

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

Źródło


1
sudo update-alternatives - ustaw php /usr/bin/php5.6 te polecenia zaoszczędziły mi czasu .. dzięki @StevieG
Ask Bytes

Jesteś najlepszym bratem ... Wielkie dzięki.
Fendi Septiawan

Miałem błąd segmentacji podczas restartu Apache2. Wtedy odkryłem, że mam włączoną więcej niż jedną wersję PHP naraz. Musiałem wyłączyć 7.1 i 7.2 przed włączeniem 5.6.
donquixote

Rzeczywiście, właśnie użyłem tego rozwiązania, aby zmienić php -vz 7.2 na 7.1! To jest świetne i proste.
SaidbakR

Świetna rada jest tutaj również - askubuntu.com/questions/761713/… . Nawiasem mówiąc, możesz zainstalować kilka modułów php - na przykład 5.6, 7.0, 7.1, 7.2, a następnie żonglować nimi, jeśli otrzymasz pewne błędy dla danej wersji php (na przykład create_functionnie jest już obsługiwany począwszy od php 7.2 .)
Vadim Anisimov

122

wpisz to w wierszu poleceń, powinno działać dla wszystkich ubuntu między 16.04, 18.04 a 20.04.

$ sudo update-alternatives --config php

i to właśnie dostaniesz

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:

Wybierz odpowiednią wersję


2
To powinna być odpowiedź
isazzad

Dlaczego php7.2 dwa razy?
Sand Of Vega,

@SandOfVega to jest wynik polecenia i może wyświetlić coś 2 razy, jeśli jest to ustawienie domyślne, ale wynik może być inny.
GiorgosK

Ubuntu 20.04 podaje mi „błąd: brak alternatyw dla php”
burzum

@burzum Działa dobrze na Ubuntu 20.04.
Pothi Kalimuthu

13

Myślę, że powinieneś tego spróbować

Od php5.6 do 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

Od php7.1 do 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
Podaj wystarczające wyjaśnienie odpowiedzi, aby zrozumieć, dlaczego ten kod działa i co oznacza, aby odpowiedź była przydatna dla użytkowników mających ten sam problem. Zobacz link, aby dowiedzieć się, jak pisać dobre odpowiedzi.
Jino Shaji

12

Właściwie nie polecałbym używania a2enmoddla php 5 lub 7. Użyłbym update-alternatives. Możesz zrobić, sudo update-alternatives --config phpaby ustawić systemową wersję PHP, której chcesz używać. To sprawia, że ​​wersje wiersza poleceń i apache działają tak samo. Możesz przeczytać więcej o tym update-alternativesna stronie man .


1
Na mnie to nie działa. PHPINFO wciąż wyświetla tę samą wersję, nawet po tym, jak próbuję wybrać.
brunoramonalmeida

12

Aby wyświetlić wszystkie dostępne wersje i wybrać jedną z nich:

sudo update-alternatives --config php

Lub zrób to ręcznie

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

10

Możesz utworzyć skrypt, aby przełączyć się z wersji: sudo nano switch_php następnie wpisz to:

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

wyjdź i zapisz, aby był wykonywalny: sudo chmod +x switch_php

Aby wykonać skrypt, wystarczy wpisać ./switch_php [VERSION_NUMBER]parametr 7 lub 5,6

To wszystko, teraz możesz łatwo przełączyć się z PHP7 na PHP 5.6!


Wygląda obiecująco, ale co robi flaga 'n' w poleceniu ln, gdy używasz "ln -sfn ...". Nie udało mi się znaleźć tej flagi („n”) nigdzie w dokumentacji.
Fakhar Anwar

@FakharAnwar man ln:-n, --no-dereference : treat LINK_NAME as a normal file if it is a symbolic link to a directory
płomień

8

Możesz użyć poniższych linii poleceń, aby przełączać się między dwiema wersjami PHP.

Na przykład

Chcę przełączyć się PHP Versionz 7.1na 7.2, możemy użyć poniższego polecenia

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

a2dismodsłuży do wyłączania bieżącej wersji php i a2enmodsłuży do włączania wersji


8

Być może masz w swoim systemie starą wersję PHP, taką jak PHP 5.6, a także zainstalowałeś PHP 7.2, dzięki czemu na komputerze jest wiele PHP. Istnieją aplikacje, które zostały opracowane, gdy starsza wersja PHP 5.6 była najnowszą wersją, nadal działają i pracujesz nad tymi aplikacjami. Możesz pracować jednocześnie na Laravel, ale Laravel wymaga PHP 7+, aby rozpocząć. Dostajesz zdjęcie?

W takim przypadku możesz przełączać się między wersjami PHP zgodnie z własnymi wymaganiami.

Przełącz z PHP 5.6 => PHP 7.2

Apacz: -

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

Wiersz poleceń:-

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

I odwrotnie, Przełącz z PHP 7.2 => PHP 5.6

Apacz: -

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

Wiersz poleceń:-

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

Wpisz podane polecenie w swoim terminalu ..

Aby wyłączyć wybraną wersję PHP ...

    • sudo a2dismod php5
    • restart usługi sudo apache2
  1. Aby włączyć inną wersję PHP ...

    • sudo a2enmod php5.6
    • restart usługi sudo apache2

Zaktualizuje wersję Php, to samo odwrotnie, jeśli chcesz obniżyć wersję, możesz to zobaczyć przez PHP_INFO ();


3

Przejdź z PHP 5.6 do PHP 7.2 za pomocą:

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

Przejdź z PHP 7.2 do PHP 5.6 za pomocą:

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

3

Możesz użyć tych skryptów przełączników PHP typu open source, które zostały zaprojektowane specjalnie do użytku w Ubuntu 16.04 LTS.

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

Istnieje setup.shskrypt, który instaluje wszystkie wymagane zależności dla PHP 5.6, 7.0, 7.1 i 7.2. Po zakończeniu możesz po prostu uruchomić jeden z następujących skryptów przełącznika, aby zmienić wersję PHP CLI i 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

Z PHP 5.6 => PHP 7.1

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

dla starych wersji Linuksa

 $ sudo service apache2 restart

dla nowszej wersji

$ systemctl restart apache2

1

proszę postępować zgodnie z instrukcjami:

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

Zrobiłem skrypt basha, aby przełączać się między różnymi wersjami PHP w systemie Ubuntu.

Mam nadzieję, że to komuś pomoże.

Oto skrypt: (zapisz go w /usr/local/bin/sphp.sh, nie zapomnij dodać flagi + x poleceniem: 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

Podczas instalacji laravel na Ubuntu 18.04, domyślnie wybrana jest instalacja PHP 7.3.0RC3, ale laravel i symfony nie zainstalują się poprawnie, skarżąc się na missin php-xml i php-zip, mimo że są zainstalowane. Musisz przełączyć się na php 7.1, postępując zgodnie z instrukcjami powyżej lub

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

teraz, prowadzenie laravel nowego bloga, będzie przebiegać poprawnie

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.