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ń?

salimsaid
źródło

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

Stevie G.
ź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ę

GiorgosK
źródło
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
Rupinder Sohal
źródło
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 .

FatBoyXPC
źródło
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
Kamal Kumar
źródło
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!

ihakoz
źródło
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

Ashish Viradiya
źródło
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
Dinesh Suthar
źródło
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 ();

Sonpal singh Sengar
źródło
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
user1560627
źródło
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
DivineOmega
źródło
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
Doskonały Lawrence
źródło
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
Yash
źródło
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!"

slawkens
źródło
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

pingle60
źródło