Dlaczego wersja PHP różni się w phpinfo () i CLI?

26

Uświadomiłem sobie, że istnieje błąd dopasowania między wersją PHP zgłoszoną przez phpinfo()i php -v(w CLI).

phpinfo():  5.5.24
php -v: 5.6.9

Pracuję na systemie Mac OS X 10.10 (Yosemite) i zainstalowałem bibliotekę ( php-version), aby spróbować zarządzać wersjami PHP.

Zgłasza mi 3 różne wersje zainstalowane na moim laptopie:

  5.4.41
  5.5.25
* 5.6.9

Chciałbym ustawić tę samą wersję PHP zarówno w Apache, jak i CLI.

Jak mogę powiedzieć Apache, której wersji PHP używa?

Próbowałem napisać ten wiersz w moim httpd.conf:

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

Następnie:

sudo apachectl restart

Ale to wszystko nie rozwiązuje problemu… W moich informacjach o PHP wciąż mam: 5.5.24

Salvatore Dibenedetto
źródło
Zobacz także superuser.com/questions/969861/…
bertieb
1
@bertieb Pytanie jest rzeczywiście podobne do tego drugiego. Właśnie na nie odpowiedziałem , ale tutaj jest też konkretny problem, na który spróbuję odpowiedzieć.
JakeGould,

Odpowiedzi:

14

Kilka różnych problemów tutaj ukrytych pod pojęciem pomyłki w wersji PHP, więc postaram się rozwiązać każdy z nich tak wyraźnie, jak to możliwe. Najpierw to:

Uświadomiłem sobie, że istnieje błąd dopasowania między wersją PHP zgłoszoną przez phpinfo()i php -v(w CLI).

phpinfo():  5.5.24
php -v: 5.6.9

PHP CLI to nie to samo, co moduł PHP Apache.

Jak wyjaśniam w odpowiedzi na to drugie pytanie tutaj , nie panikuj! Jeśli obawiasz się, jakiej wersji PHP używa twój serwer Apache, wynik phpinfo()zawsze jest tym, na co powinieneś zwrócić uwagę. Moduł Apache PHP i plik binarny wiersza poleceń PHP to dwie różne rzeczy, które nie kolidują ze sobą.

Zwróć uwagę na wynik, phpinfo()jeśli obawiasz się ustawić poprawną wersję modułu PHP w Apache.

To powiedziawszy, nadal masz problemy z załadowaniem prawidłowego modułu PHP załadowanego do Apache:

Próbowałem napisać ten wiersz w moim httpd.conf:

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

Upewnij się, że Twój serwer Apache ładuje odpowiedni moduł PHP.

Chociaż to, co technicznie zrobiłeś, wydaje się poprawne, jedynym powodem, dla którego widzę, że to nie działa, jest jakaś inna LoadModule php5_moduledyrektywa w plikach konfiguracyjnych Apache, która zastępuje wartość ustawianą w tym wierszu.

httpd.confPoleciłbym przejrzeć - co, jak zakładam, znajduje się tutaj /etc/apache2/httpd.conf- i sprawdzić, czy być może jest coś innego LoadModule php5_module, czego nie zauważyłeś lub nie zauważyłeś podczas edycji tego pliku. Patrząc na mój równoważny plik w systemie Mac OS X 10.9.5, widzę, że linia została skomentowana - ponieważ nie używam konfiguracji Mac OS X Apache / PHP - i czyta coś takiego:

#LoadModule php5_module libexec/apache2/libphp5.so

Oczywiście w twoim przypadku byłoby to bez komentarza. Więcej informacji na temat konfigurowania Apache i PHP do tworzenia stron internetowych można znaleźć na tej stronie .

Poważnie rozważ użycie MAMP jako alternatywy dla dziwactw Apache / PHP w Mac OS X.

Teraz wszystko to mówi: nie wiem, co próbujesz zrobić, ale jeśli robisz tworzenie stron internetowych w systemie Mac OS X, powinieneś poważnie rozważyć użycie MAMP zamiast hakowania podstawowego stosu internetowego Mac OS X, aby uzyskać różne rzeczy bieganie.

Zaletą MAMP jest to, że Mac OS X jest wyjątkowo produkcyjnym odpowiednikiem stosu LAMP. A ponieważ jest ukierunkowany na tworzenie stron internetowych w prawdziwym świecie, ma wszystkie moduły i konfiguracje ustawione dokładnie tak, jak powinno się je konfigurować.

Podstawowym problemem związanym z Apache i PHP na Mac OS X jest to, że oprogramowanie jest zwykle nieaktualne, kłopot z konfiguracją / poprawieniem i zarządzaniem oraz ból głowy przy debugowaniu, gdy coś takiego się dzieje. A jeśli pojawi się aktualizacja systemu Mac OS X, która usunie dokładnie skonfigurowane ustawienia Apache i PHP? Wróciłeś do punktu wyjścia.

JakeGould
źródło
Dlaczego odpowiedziałeś na ten duplikat zamiast oznaczać pytanie jako duplikat?
Pmpr
@Trix Ponieważ ten „duplikat” jest podobną odpowiedzią na inne pytanie zadane w ciągu kilku dni od siebie. Kiedy odpowiadam na podobny komentarz tutaj , „Pytanie @bertieb jest rzeczywiście podobne do tego drugiego. Właśnie na nie odpowiedziałem, ale tutaj jest też konkretny problem, na który spróbuję odpowiedzieć. - JakeGould wrz 12 '15 o 0:42 ”Jedno pytanie dotyczy różnicy między PHP od wiersza poleceń. Drugi dotyczy tego ORAZ problemów z modułem PHP.
JakeGould
4

Znalazłem rozwiązanie mojego problemu. Po edycji /etc/apache2/httpd.confużyłem do ponownego uruchomienia apache za pomocą:

sudo apachectl restart

Z jakiegoś powodu użycie tego polecenia Apache nie pobierał aktualizacji httpd.confi nie ładował starej konfiguracji.

Za pomocą:

sudo apachectl -k stop
sudo apachectl -k start

Wykonaj rodzaj twardego restartu wszystkich usług, a także odczyta aktualizacje w pliku konfiguracyjnym i wreszcie przeczytaj nową ścieżkę dla php5_module:

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

Dziękuję również @JakeGould za jego wyjaśnienie .

Salvatore Dibenedetto
źródło
Edytowałem post, aby usunąć -kflagę z apachectlpoleceń, ponieważ jeśli apachectl -hzaznaczysz, że flaga / opcja tam nie istnieje. Nie mam pojęcia, skąd to masz. Ponadto, gdy deklarujesz, że robisz stopi startco robisz , dziwne jest to, że restartw systemach Linux robi to dokładnie. Jeśli sprawdzisz skrypt znajdujący się w /usr/sbin/apachectl(jest to skrypt, więc użyj dowolnego edytora tekstu, aby wyświetlić), wydaje się, że robi to dokładnie to samo. Może w Mac OS X LaunchDaemonsdla Apache jest po prostu „dziwne” w porównaniu ze standardowym Linuksem? Tak czy inaczej, świetnie to rozwiązałeś.
JakeGould
Dla twojej informacji znalazłem polecenie z flagą -k tutaj: httpd.apache.org/docs/2.2/stopping.html
Salvatore Dibenedetto,
Masz rację. Spojrzałem przez „Pomoc” wyjście /usr/sbin/apachectl(bez polecenia) i to wyraźnie stwierdza [-k start|restart|graceful|graceful-stop|stop]. Jestem tak przyzwyczajony do sposobu, w jaki Apache działa w systemach Linux, wygląda na to, że zapomniałem o -kfladze do użycia z apachectlpoleceniami. Wiedząc więc, że prawdziwym problemem, jaki miałeś, jest to, że próbujesz zrestartować to polecenie, sudo apachectl restartkiedy powinno być tak -kdodane flagi sudo apachectl -k restart.
JakeGould,