Warum unterscheidet sich die PHP-Version in phpinfo () und CLI?

27

Mir ist aufgefallen, dass die von gemeldete PHP-Version nicht übereinstimmt phpinfo() und php -v(in der CLI) .

phpinfo():  5.5.24
php -v: 5.6.9

Ich arbeite auf einem Mac OS X 10.10 (Yosemite) und habe eine Bibliothek ( php-version) installiert , um zu versuchen, die PHP-Versionen zu verwalten.

Es werden mir 3 verschiedene Versionen gemeldet, die auf meinem Laptop installiert sind:

  5.4.41
  5.5.25
* 5.6.9

Ich möchte die gleiche Version von PHP in Apache und CLI einstellen.

Wie kann ich Apache mitteilen, welche PHP-Version verwendet wird?

Ich habe versucht, diese Zeile zu schreiben in httpd.conf:

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

Dann:

sudo apachectl restart

Aber das alles löst das Problem nicht ... In meinen PHP-Infos habe ich noch: 5.5.24

Salvatore Dibenedetto
quelle
1
@bertieb Frage ist in der Tat ähnlich wie die andere. Ich habe es gerade beantwortet , aber es gibt hier ein spezifisches Problem, das ich ebenfalls zu beantworten versuchen werde.
JakeGould

Antworten:

14

Ein paar verschiedene Probleme, die sich alle unter dem Konzept der Verwirrung um die PHP-Version verstecken, werden daher versuchen, jedes Problem so klar wie möglich anzugehen. Zuerst das:

Mir ist aufgefallen, dass die von phpinfo()und php -v(in der CLI) gemeldete PHP-Version nicht übereinstimmt .

phpinfo():  5.5.24
php -v: 5.6.9

PHP CLI ist nicht dasselbe wie das PHP Apache-Modul.

Wie ich in der Antwort auf diese andere Frage hier erkläre , 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.

Achten phpinfo()Sie einfach auf die Ausgabe von, wenn Sie Bedenken haben, die richtige PHP-Modulversion in Apache festzulegen.

Das heißt, Sie scheinen immer noch Probleme damit zu haben, das richtige PHP-Modul in Apache zu laden:

Ich habe versucht, diese Zeile zu schreiben in httpd.conf:

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

Stellen Sie sicher, dass Ihr Apache-Server das richtige PHP-Modul lädt.

Obwohl das, was Sie technisch gemacht haben, korrekt zu sein scheint, ist der einzige Grund, warum ich sehe, dass dies nicht funktioniert, eine andere LoadModule php5_moduleAnweisung in den Apache-Konfigurationsdateien, die den Wert, den Sie für diese Zeile festlegen, ersetzt.

Ich würde empfehlen, in der Datei zu suchen, von der httpd.confich annehme, dass sie sich hier befindet, /etc/apache2/httpd.confund zu prüfen, ob es tatsächlich eine andere gibt LoadModule php5_module, die Sie beim Bearbeiten dieser Datei verpasst oder nicht bemerkt haben. Wenn ich mir meine entsprechende Datei in Mac OS X 10.9.5 ansehe, sehe ich, dass die Zeile auskommentiert ist, da ich keine Apache / PHP-Setups für Mac OS X verwende.

#LoadModule php5_module libexec/apache2/libphp5.so

Natürlich wäre es in Ihrem Fall unkommentiert. Weitere Informationen zum Konfigurieren von Apache und PHP für die Webentwicklung finden Sie auf dieser Website .

Erwägen Sie ernsthaft die Verwendung von MAMP als Alternative zu Apache / PHP-Macken unter Mac OS X.

Trotzdem weiß ich nicht, was Sie vorhaben, aber wenn Sie auf einem Mac OS X-System eine Webentwicklung durchführen, sollten Sie ernsthaft in Erwägung ziehen, MAMP zu verwenden, anstatt den zentralen Mac OS X- Webstack zu hacken, um die gewünschten Informationen zu erhalten Laufen.

Der Vorteil von MAMP ist, dass es sich um ein extrem produktives Mac OS X-Äquivalent eines LAMP-Stacks handelt. Und da es auf echte Webentwicklung ausgerichtet ist, enthält es alle Module und Konfigurationen genau so, wie man sie einrichten sollte.

Das Hauptproblem bei Apache und PHP unter Mac OS X besteht darin, dass die Software in der Regel veraltet ist, Probleme beim Konfigurieren / Optimieren und Verwalten sowie Kopfschmerzen beim Debuggen auftreten, wenn solche Probleme auftreten. Und was ist, wenn ein Mac OS X-Update auf den Markt kommt, das Ihre sorgfältig eingerichteten Apache- und PHP-Einstellungen zunichte macht? Sie sind zurück auf Platz eins.

JakeGould
quelle
Warum haben Sie dieses Duplikat beantwortet, anstatt die Frage als Duplikat zu markieren?
Pmpr
@Trix Weil dieses "Duplikat" eine ähnliche Antwort auf eine andere Frage ist, die innerhalb von Tagen nacheinander gestellt wird. Wie ich hier auf einen ähnlichen Kommentar antworte , ist die @bertieb-Frage in der Tat der anderen ähnlich. Ich habe es gerade beantwortet, aber es gibt hier ein spezifisches Problem, das ich ebenfalls zu beantworten versuchen werde. - JakeGould, 12. September 15, um 0:42 Uhr. “Eine Frage betrifft den Unterschied zwischen PHP über die Befehlszeile. Das andere betrifft das UND PHP-Modul.
JakeGould
4

Ich habe die Lösung für mein Problem gefunden. Nach der Bearbeitung habe /etc/apache2/httpd.confich Apache neu gestartet:

sudo apachectl restart

Aus irgendeinem Grund konnte Apache mit diesem Befehl die Aktualisierungen in der nicht abrufen httpd.conf und die alte Konfiguration laden.

Verwenden von:

sudo apachectl -k stop
sudo apachectl -k start

Führen Sie einen harten Neustart aller Dienste durch und lesen Sie auch die Aktualisierungen in der Konfigurationsdatei und lesen Sie schließlich den neuen Pfad für php5_module:

/usr/local/opt/php56/libexec/apache2/libphp5.so

Danke auch @JakeGould für seine Erklärung .

Salvatore Dibenedetto
quelle
Beitrag bearbeitet, um die -kMarkierung aus den apachectlBefehlen zu entfernen, da, wenn Sie apachectl -hdiese Markierung / Option markieren, sie dort nicht vorhanden ist. Keine Ahnung, woher du das hast. Während Sie angeben, Dinge zu erledigen stopund zu startklären, ist das Seltsame, dass restartLinux-Systeme genau das tun . Wenn Sie das Skript überprüfen, in dem es sich befindet /usr/sbin/apachectl(es ist ein Skript, verwenden Sie also einen beliebigen Texteditor zum Anzeigen), scheint es genau das auch zu tun. Vielleicht ist das LaunchDaemonsfür Apache unter Mac OS X im Vergleich zu Standard-Linux einfach "komisch"? Wie auch immer, toll, dass du das gelöst hast.
JakeGould
Nur zu Ihrer Information habe ich den Befehl mit der -k Flagge hier gefunden: httpd.apache.org/docs/2.2/stopping.html
Salvatore Dibenedetto
Du hast Recht. Ich sah durch die „Hilfe“ Ausgang /usr/sbin/apachectl(ohne Befehl) und es eindeutig fest, [-k start|restart|graceful|graceful-stop|stop]. Ich bin so daran gewöhnt, wie Apache auf Linux-Systemen funktioniert, dass ich das -kFlag für die Verwendung mit apachectlBefehlen vergessen zu haben scheint . In dem Wissen, dass das eigentliche Problem, das Sie hatten, der Versuch ist, mit diesem Befehl neu zu starten, sudo apachectl restartwenn das -kFlag wie folgt hinzugefügt werden sollte sudo apachectl -k restart.
JakeGould