Wechseln Sie die PHP-Versionen in der Befehlszeile Ubuntu 16.04

97

Ich habe PHP 5.6 und PHP 7.1 auf meinem Ubuntu 16.04 installiert

Ich weiß, dass ich mit Apache als meinem Webserver etwas tun kann

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

Wenn ich php7.1 in Apache-Modulen deaktiviere und php 5.6 aktiviere, erkennt Apache die Änderung und verwendet erwartungsgemäß den PHP 5.6-Interpreter.

Aber wenn ich einen internen PHP-Webserver über die Kommandozeile starte:

php -S localhost:8888

PHP verarbeitet Anfragen mit PHP 7. Wie wechsle ich in der Befehlszeile zwischen PHP 5.6 und PHP 7.1?

salimsaid
quelle

Antworten:

231

Interaktiver Schaltmodus

sudo update-alternatives --config php

Manuelles Schalten

Ab PHP 5.6 => PHP 7.1

Standardmäßig ist PHP 5.6 auf Ihrem System eingestellt und Sie müssen zu PHP 7.1 wechseln.

Apache:

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

Befehlszeile:

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

Ab PHP 7.1 => PHP 5.6

Standardmäßig ist PHP 7.1 auf Ihrem System eingestellt und Sie müssen zu PHP 5.6 wechseln.

Apache:

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

Befehlszeile:

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

Quelle

Stevie G.
quelle
1
sudo update-alternatives --set php /usr/bin/php5.6 diese befehle haben mir zeit gespart .. danke @StevieG
Ask Bytes
Du bist der beste Bruder ... Vielen Dank.
Fendi Septiawan
Ich hatte einen Segmentierungsfehler beim Neustart von Apache2. Ich stellte dann fest, dass ich mehr als eine PHP-Version gleichzeitig aktiviert hatte. Ich musste sowohl 7.1 als auch 7.2 deaktivieren, bevor ich 5.6 aktivieren konnte.
Donquijote
In der Tat habe ich diese Lösung nur verwendet, um php -vvon 7.2 auf 7.1 zu wechseln ! Es ist großartig und einfach.
SaidbakR
Ein guter Rat ist auch hier - askubuntu.com/questions/761713/… . Übrigens können Sie mehrere PHP-Module installieren - zum Beispiel 5.6, 7.0, 7.1, 7.2 - und sie dann jonglieren, wenn Sie bestimmte Fehler für eine bestimmte Version von PHP erhalten (wird beispielsweise create_functionab PHP 7.2 nicht mehr unterstützt .)
Vadim Anisimov
98

Geben Sie dies in Ihre Befehlszeile ein, sollte für alle Ubuntu zwischen 16.04, 18.04 und 20.04 funktionieren.

$ sudo update-alternatives --config php

und das werden Sie bekommen

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:

Wählen Sie die entsprechende Version

GiorgosK
quelle
2
Dieser sollte die Antwort sein
itsazzad
Warum zweimal php7.2?
Sand Of Vega
@SandOfVega Dies ist die Ausgabe des Befehls und wird möglicherweise zweimal angezeigt, wenn dies die Standardeinstellung ist, aber Ihre Ausgabe ist möglicherweise anders.
GiorgosK
Ubuntu 20.04 gibt mir "Fehler: keine Alternativen für PHP"
burzum
12

Ich würde eigentlich nicht empfehlen, a2enmodfür PHP 5 oder 7 zu verwenden update-alternatives. Ich würde verwenden . Sie können sudo update-alternatives --config phpfestlegen, welche systemweite Version von PHP Sie verwenden möchten. Dadurch funktionieren Ihre Befehlszeilen- und Apache-Versionen gleich. Weitere Informationen finden Sie update-alternativesauf der Manpage .

FatBoyXPC
quelle
1
Es funktioniert nicht für mich. PHPINFO zeigt immer noch die gleiche Version an, auch nachdem ich versucht habe zu wählen.
Brunoramonalmeida
12

Ich denke, du solltest es versuchen

Von php5.6 bis 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

Von php7.1 bis 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
quelle
1
Geben Sie genügend Erklärungen für Ihre Antworten, um zu verstehen, warum dieser Code funktioniert und was er bedeutet. Damit die Antwort für Benutzer mit demselben Problem nützlich ist. Unter dem Link erfahren Sie, wie Sie gute Antworten schreiben.
Jino Shaji
12

So listen Sie alle verfügbaren Versionen auf und wählen Sie aus ihnen:

sudo update-alternatives --config php

Oder manuell

sudo a2dismod php7.1 // disable
sudo a2enmod php5.6  // enable
Kamal Kumar
quelle
9

Sie können ein Skript zum Wechseln von Versionen erstellen. Geben Sie dann Folgendes ein 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 )"

Beenden und Speichern machen es ausführbar: sudo chmod +x switch_php

Um das Skript auszuführen, geben Sie einfach ./switch_php [VERSION_NUMBER]den Parameter 7 oder 5.6 ein

Jetzt können Sie ganz einfach von PHP7 auf PHP 5.6 umsteigen!

ihakoz
quelle
Sieht vielversprechend aus, aber was bewirkt das Flag 'n' im Befehl ln, wenn Sie "ln -sfn ..." verwenden. Ich konnte dieses Flag ("n") nirgendwo in der Dokumentation finden.
Fakhar Anwar
8

Sie können die folgenden Befehlszeilen verwenden, um zwischen zwei PHP-Versionen zu wechseln.

Z.B

Ich möchte wechseln PHP Versionvon 7.1bis 7.2wir unten Befehl verwenden können

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

a2dismodwird verwendet, um die aktuelle PHP-Version zu deaktivieren und a2enmodwird verwendet, um die Version zu aktivieren

Ashish Viradiya
quelle
8

Möglicherweise haben Sie eine alte PHP-Version wie PHP 5.6 in Ihrem System und Sie haben auch PHP 7.2 installiert, sodass mehrere PHP auf Ihrem Computer vorhanden sind. Es gibt einige Anwendungen, die entwickelt wurden, als älteres PHP 5.6 die neueste Version war. Sie sind noch aktiv und Sie arbeiten an diesen Anwendungen. Möglicherweise arbeiten Sie gleichzeitig an Laravel, aber Laravel benötigt PHP 7+, um loszulegen. Das Bild bekommen?

In diesem Fall können Sie zwischen den PHP-Versionen wechseln, um Ihren Anforderungen zu entsprechen.

Wechseln Sie von PHP 5.6 => PHP 7.2

Apache:-

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

Befehlszeile:-

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

Und umgekehrt: Wechseln Sie von PHP 7.2 => PHP 5.6

Apache:-

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

Befehlszeile:-

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
quelle
3

Geben Sie den angegebenen Befehl in Ihr Terminal ein.

Zum Deaktivieren der ausgewählten PHP-Version ...

    • sudo a2dismod php5
    • sudo service apache2 neu starten
  1. Zum Aktivieren anderer PHP-Versionen ....

    • sudo a2enmod php5.6
    • sudo service apache2 neu starten

Es wird die PHP-Version aktualisieren. Wenn Sie ein Downgrade der Version wünschen, können Sie dies auch an PHP_INFO () sehen.

Sonpal singh Sengar
quelle
3

Wechseln Sie von PHP 5.6 zu PHP 7.2 mit:

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

Wechseln Sie von PHP 7.2 zu PHP 5.6 mit:

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

Sie können diese Open-Source-PHP-Switch-Skripte verwenden, die speziell für die Verwendung in Ubuntu 16.04 LTS entwickelt wurden.

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

Es gibt ein setup.shSkript, das alle erforderlichen Abhängigkeiten für PHP 5.6, 7.0, 7.1 und 7.2 installiert. Sobald dies abgeschlossen ist, können Sie einfach eines der folgenden Switch-Skripte ausführen, um die PHP CLI- und Apache 2-Modulversion zu ändern.

./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
quelle
1

Ab PHP 5.6 => PHP 7.1

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

für alte Linux-Versionen

 $ sudo service apache2 restart

für neuere Version

$ systemctl restart apache2
Ausgezeichneter Lawrence
quelle
1

Bitte folgen Sie den Schritten:

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
quelle
1

Ich habe ein Bash-Skript erstellt, um unter Ubuntu zwischen verschiedenen PHP-Versionen zu wechseln.

Hoffe es hilft jemandem.

Hier ist das Skript: (Speichern Sie es in /usr/local/bin/sphp.sh, vergessen Sie nicht, das + x-Flag mit dem folgenden Befehl hinzuzufügen: 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
quelle
0

Wenn Sie laravel unter Ubuntu 18.04 installieren, ist die Standardinstallation von PHP 7.3.0RC3 ausgewählt, aber laravel und symfony werden nicht ordnungsgemäß installiert, wenn Sie sich über missin php-xml und php-zip beschweren, obwohl sie installiert sind. Sie müssen zu PHP 7.1 wechseln, indem Sie die obigen Anweisungen verwenden oder

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

Jetzt wird das Ausführen des neuen Blogs von laravel korrekt fortgesetzt

pingle60
quelle