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.