phpinfo () und php -v zeigen verschiedene Versionen von PHP

18

Ich wollte wissen, welche phpVersion ich verwende, also schrieb ich das Standard-Skript:

phpinfo();

Welches gibt mir

PHP version 5.6.10

Die richtige PHP-Version, die für meine Anwendung benötigt wird. Als ich es im Terminal versuchte:

php -i

oder

php -v

Es zeigt mir:

PHP version 5.3.2

Was ich nicht brauche. Dann habe ich versucht mit:

which php

Es zeigt mir:

/usr/bin/php

Jetzt bin ich verwirrt, welche PHP-Version ich verwende. Die Dateien werden auf die Hosting-Website hochgeladen und ich kann keine Änderungen an den Konfigurationsdateien wie httpd.confoder vornehmen php.ini.

Gabf Hann
quelle

Antworten:

21

Kürzere Antwort.

Keine Panik! Wenn Sie sich Gedanken darüber machen, welche PHP-Version Ihr Apache-Server verwendet, phpinfo()sollten Sie immer auf die Ausgabe von achten. Das Apache PHP-Modul und die PHP-Befehlszeilen-Binärdatei sind zwei verschiedene Dinge, die sich nicht gegenseitig stören.

Tatsächlich können Sie verschiedene PHP-Versionen kompilieren und laden, die Sie mit Apache verwenden möchten, solange Sie Apache so anpassen, dass es ordnungsgemäß geladen wird. Die PHP-Befehlszeilenschnittstelle wird beim Parsen von PHP-Seiten durch Apache niemals ins Spiel kommen.

Die Befehlszeilenversion von PHP ist einfach für befehlszeilenspezifische Aufgaben verfügbar und das PHP-Modul für Apache wird diese niemals berühren, verwenden oder benötigen.

Längere Antwort.

Du sagst das:

Ich wollte wissen, welche phpVersion ich verwende, also schrieb ich das Standard-Skript:

phpinfo();

Das gibt mir PHP Version 5.6.10 - die richtige PHP-Version, die für meine Anwendung benötigt wird. Als ich es im Terminal versuchte:

php -i or php -v   

Es zeigt mir PHP Version 5.3.2, die ich nicht brauche.

Die über die Befehlszeile verfügbare PHP-Version hat zu 100% nichts mit der als Modul geladenen PHP-Version zu tun. Dies sind völlig getrennte Dinge.

Wenn Sie sich also Gedanken darüber machen, welche PHP-Version Ihre Webanwendung verwendet, phpinfo()wird Version 5.6.10 angezeigt, und genau das, was Sie wollen / brauchen, ist zu 100% in Ordnung.

Die Kommandozeilenversion von PHP ist ein völlig eigenständiges Systemelement. Das einzige, was zählt, ist die Ausgabe von phpinfo().

Wenn Sie aus irgendeinem Grund eine andere PHP-Version mit Apache verwenden möchten, müssen Sie nur das kompilierte Apache-PHP-Modul irgendwo installieren und diese Zeile in der Apache-Konfiguration Ihres Systems hinzufügen oder anpassen:

LoadModule php5_module    /path/to/php/and/the/module/for/apache2/libphp5.so

Passen Sie einfach den Pfad an den Pfad an, den libphp5.soApache zum Parsen von PHP verwendet. Starten Sie dann Apache neu und Sie sind im Geschäft.

Zum Beispiel musste ich einmal PHP 5.1.6 aus dem Quellcode kompilieren (mit Unterstützung für die GD-Bibliothek), um es auf einem Ubuntu 12.04-Computer mit PHP 5.3.5 zu verwenden. In der PHP-Modul-Ladedatei des Servers hier:

/etc/apache2/mods-available/php5.load

Ich hatte Zeilen wie diese:

# LoadModule php5_module        /usr/lib/apache2/modules/libphp535.so
LoadModule php5_module        /usr/lib/apache2/modules/libphp516-gd.so

Beachten Sie, wie eine Zeile libphp535.sofür libphp516-gd.soauskommentiert und die andere für nicht kommentiert ist? Ich habe das standardmäßige PHP 5.3.5 libphp5.soApache-Modul in libphp535.somit der Versionsnummer im Namen umbenannt, damit ich es als Referenz dort haben kann, und dann das PHP 5.1.6-Modul (mit Unterstützung für GD-Bibliotheken) benannt, libphp516-gd.sodamit ich weiß, was das ist ist auch. Auf diese Weise stehen mir beide nebeneinander auf dem System zur Verfügung.

Und - wie eingangs gesagt - die in der Kommandozeile verwendete PHP-Version hat mit dem Apache-PHP-Modul überhaupt nichts zu tun. Sie können also eine beliebige Anzahl verschiedener Versionen von Apache-PHP-Modulen auf dem System bereitstellen. Passen Sie einfach eine Konfiguration an und starten Sie Apache neu. Sie sollten alle im Geschäft sein, um die PHP-Version zu verwenden, die Sie für Apache angegeben haben.

JakeGould
quelle
23

Wenn Sie dieses Problem beim Upgrade von PHP5 auf PHP7 unter Ubuntu 14.04 mit Apache haben, hat mir Folgendes geholfen (Dank geht hier ):

Deaktivieren Sie das PHP5-Modul unter Apache:

sudo a2dismod php5

Aktivieren Sie nun PHP7:

sudo a2enmod php7.1

Um Änderungen wiederzugeben, ist ein Neustart von Apache erforderlich:

sudo systemctl restart apache2
Jan Żankowski
quelle
Dies kann das Projekt zum Absturz bringen, wenn die php.ini anders ist
KawaiKx
2

Wenn Sie versuchen, PHP-Code von Ihrem Webserver auszuführen, verwenden Sie die Version, die von phpinfo()= 5.6.10 gemeldet wird .

Auf Ihrem Server sind anscheinend mehrere Versionen von PHP installiert. Wenn Sie sich anmelden und phpin der Befehlszeile ausführen , erhalten Sie die ältere Version, die unter / usr / bin / php installiert ist.

Ein Server kann viele PHP-Versionen haben, und Ihre scheint es zu sein.

Wenn Sie dasselbe PHP wie Ihren Webserver manuell ausführen müssen, müssen Sie die andere Version suchen. Versuchen Sie, diese Befehle auszuführen:

/usr/local/bin/php -v
/opt/local/bin/php -v
/opt/bin/php -v

In einem Fall wird möglicherweise ein PHP mit der gleichen Version wie Ihr Webserver angezeigt. Wenn Sie herausfinden, um welche Version es sich handelt, können Sie diese Version anstelle der Standardversion verwenden.

Ross Perkins
quelle
0

Wenn ich meine 2 Cent addieren darf ...

Ich habe meine Nextcloud-Version aktualisiert. Wenn ich die Upgrade-Prozedur ausführe, muss ich "sudo php" als Apache-Benutzer angeben, die Ausführung wurde jedoch abgelehnt, da die vom Apache-Benutzer standardmäßig ausgeführte PHP-CLI-Version zu alt war. Allerdings phpinfo (); auf meinem server wird die aktuellste installierte php version angezeigt.

Mir wurde klar, dass dies daran liegt, dass die Variable PATH in der Datei /home/apache/.bashrc auf die erste Version von PHP gesetzt wurde, die ich auf meinem Server installiert hatte , und dass sie nie wieder aktualisiert wurde (ich kompiliere / installiere PHP immer aus dem Quellcode von Github) )

Die Lösung:

Wenn Sie PHP auf Ihrem Webserver aktualisieren und sicherstellen möchten, dass die verwendete CLI-PHP-Version die aktuellste ist, wenn Sie sudo als Apache-Benutzer verwenden, vergessen Sie nicht, sie in der .bashrc-Datei dieses Benutzers wie folgt zu ändern:

PATH=$PATH:/var/www/html: /usr/local/php7.1.32/bin export PATH

JeffCourteau
quelle
-1

Schritte, um dies zu beheben. Zuallererst, welche PHP-Version es Ihnen zeigt.

php -v

Jetzt benötigen Sie einen PHP-Pfad. Wenn Sie nicht wissen, können Sie sich an Ihren Hosting-Support für PHP-Pfad wenden. In meinem Fall war es das

/opt/php71/bin/php

Jetzt ist es Zeit, diesen Befehl im Terminal auszuführen.

alias php='/opt/php71/bin/php'

Dadurch wird Ihre PHP-Version auf PHP 7.1 geändert. Wenn Sie die Version auf 7.2 ändern möchten, können Sie dies versuchen

alias php='/opt/php72/bin/php'

Du bist fertig. Überprüfen Sie es mit

php -v
Akram Chauhan
quelle
-3

Erstellen Sie einen Umgebungsvariablenpfad für die neueste Version von PHP, zB: C: \ wamp64 \ bin \ php \ php7.2.4. Ändern Sie nun Ihren vorherigen PHP-Versionsordner .php5.6.35 in eine andere Nummer. Php5.6.354 server und cli php werden gleich sein

sudheep kr
quelle