phpinfo () i php -v pokazuje inną wersję PHP

20

Chciałem wiedzieć, której phpwersji używam, więc napisałem standardowy skrypt:

phpinfo();

Co mi daje

PHP version 5.6.10

Poprawna wersja PHP potrzebne do mojej aplikacji. Kiedy próbowałem w terminalu:

php -i

lub

php -v

Pokazuje mi:

PHP version 5.3.2

Których nie potrzebuję. Potem spróbowałem z:

which php

Pokazuje mi:

/usr/bin/php

Teraz jestem zdezorientowany, której wersji PHP używam. Pliki są przesyłane do witryny hostingowej i nie mogę dokonywać żadnych zmian w plikach konfiguracyjnych takich jak httpd.conflub php.ini.

Gabf Hann
źródło

Odpowiedzi:

22

Krótsza odpowiedź.

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ą.

W rzeczywistości możesz kompilować i ładować różne wersje PHP, które chcesz współpracować z Apache, pod warunkiem, że dostosujesz Apache do poprawnego ładowania. Interfejs wiersza poleceń PHP nigdy nie wejdzie w grę w przypadku analizowania stron PHP przez Apache.

Wersja PHP wiersza polecenia jest dostępna tylko dla zadań specyficznych dla wiersza poleceń, a moduł PHP dla Apache nigdy go nie dotknie, nie użyje ani nie będzie mu potrzebny.

Dłuższa odpowiedź.

Ty to mówisz:

Chciałem wiedzieć, której phpwersji używam, więc napisałem standardowy skrypt:

phpinfo();

Co daje mi wersję PHP 5.6.10 - odpowiednią wersję PHP potrzebną do mojej aplikacji. Kiedy próbowałem w terminalu:

php -i or php -v   

Pokazuje mi PHP w wersji 5.3.2, której nie potrzebuję.

Wersja PHP dostępna z wiersza poleceń nie ma 100% nic wspólnego z wersją PHP ładowaną jako moduł. To są całkowicie oddzielne rzeczy.

Jeśli więc phpinfo()obawiasz się, której wersji PHP używa Twoja aplikacja internetowa, jeśli pokazuje wersję 5.6.10 i to, czego chcesz / potrzebujesz, jest w 100% w porządku.

Wersja PHP wiersza poleceń jest całkowicie oddzielnym elementem systemu. Jedyne, co się liczy, to wynik phpinfo().

Jeśli z jakiegoś powodu chciałeś użyć innej wersji PHP z Apache, wszystko co musisz zrobić, to zainstalować gdzieś skompilowany moduł PHP Apache i dodać - lub dostosować - ten wiersz w konfiguracji Apache w twoim systemie:

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

I po prostu dostosuj ścieżkę do libphp5.so- tego, czego używa Apache do analizowania PHP - a następnie uruchom ponownie Apache i zaczniesz działać.

Na przykład w pewnym momencie musiałem skompilować PHP w wersji 5.1.6 ze źródła (z obsługą biblioteki GD) do użycia na maszynie Ubuntu 12.04 z PHP 5.3.5. W module PHP serwera ładującego plik tutaj:

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

Miałem takie linie:

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

Zauważ, jak jedna linia jest komentowana, libphp535.soa druga nie jest komentowana libphp516-gd.so? Zmieniłem nazwę domyślnego libphp5.somodułu Apache PHP 5.3.5 libphp535.sona numer wersji w nazwie, więc mogłem go tam znaleźć w celach informacyjnych, a następnie nazwałem moduł PHP 5.1.6 (z obsługą biblioteki GD), libphp516-gd.sowięc wiem, co to jest również. W ten sposób mam oba dostępne obok siebie w systemie.

I - jak powiedziałem na wstępie - wersja PHP używana w wierszu poleceń nie ma absolutnie nic wspólnego z modułem Apache PHP. Możesz mieć gotową do pracy dowolną liczbę różnych wersji modułów Apache PHP; po prostu dostosuj konfigurację i zrestartuj Apache, a powinieneś być w biznesie, aby używać dowolnej wersji PHP, którą określisz Apache.

JakeGould
źródło
26

Jeśli masz ten problem podczas aktualizacji z PHP5 do PHP7 na Ubuntu 14.04 z Apache, oto co mi pomogło (kredyt tutaj ):

Wyłącz moduł PHP5 na Apache:

sudo a2dismod php5

Teraz włącz PHP7:

sudo a2enmod php7.1

Aby odzwierciedlić zmiany, wymagane jest ponowne uruchomienie Apache:

sudo systemctl restart apache2
Jan Żankowski
źródło
może to spowodować awarię projektu, jeśli php.ini są inne
KawaiKx
także upewnij się, że biblioteki php dla nowej wersji są zainstalowane, to znaczy gd, mcrypt, xml itp.
korwalskiy
2

Jeśli próbujesz uruchomić kod PHP z serwera WWW, wówczas używana wersja to wersja zgłoszona przez phpinfo()= 5.6.10 .

Na twoim serwerze najwyraźniej zainstalowano wiele wersji PHP, a kiedy logujesz się i uruchamiasz phpw wierszu poleceń, otrzymujesz starszą wersję, która jest zainstalowana na / usr / bin / php.

Serwer może mieć wiele wersji PHP, a Twoja wydaje się, że tak.

Jeśli musisz ręcznie uruchomić to samo PHP co serwer WWW, musisz znaleźć inną wersję. Spróbuj uruchomić następujące polecenia:

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

Jedna z nich może ujawnić PHP w tej samej wersji co twój serwer WWW, a kiedy zorientujesz się, która to jest, możesz użyć tej zamiast domyślnej.

Ross Perkins
źródło
0

Jeśli mogę dodać moje 2 centy ...

Aktualizowałem moją wersję Nextcloud. Kiedy uruchamiam procedurę aktualizacji, muszę „sudo php” jako użytkownik apache, ale odmówił uruchomienia, ponieważ wersja CLI php jest domyślnie uruchamiana przez użytkownika apache. Jednak phpinfo (); na moim serwerze wyświetlono najnowszą zainstalowaną wersję php.

Uświadomiłem sobie, że dzieje się tak, ponieważ zmienna PATH w pliku /home/apache/.bashrc została ustawiona na pierwszą wersję php zainstalowaną na moim serwerze i nigdy nie była aktualizowana ponownie (zawsze kompiluję / instaluję php ze źródła na Github )

Rozwiązanie:

Kiedy aktualizujesz php na swoim serwerze internetowym i chcesz się upewnić, że używana wersja CLI php jest najbardziej aktualna podczas sudo jako użytkownik apache, nie zapomnij zmienić go w pliku .bashrc tego użytkownika, jak poniżej:

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

JeffCourteau
źródło
-1

Kroki, aby to naprawić. Przede wszystkim, którą wersję PHP pokazuje.

php -v

Teraz potrzebujesz ścieżki PHP. Jeśli nie wiesz, możesz skontaktować się ze wsparciem hostingowym dla ścieżki PHP. W moim przypadku tak było

/opt/php71/bin/php

Teraz nadszedł czas, aby uruchomić to polecenie w terminalu.

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

Spowoduje to zmianę wersji PHP na PHP 7.1. Jeśli chcesz zmienić wersję na 7.2, możesz spróbować

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

Gotowe. Sprawdź to za pomocą

php -v
Akram Chauhan
źródło
-3

Utwórz ścieżkę zmiennej środowiskowej dla najnowszej wersji php np: C: \ wamp64 \ bin \ php \ php7.2.4 Teraz zmień folder poprzedniej wersji php .php5.6.35 na inny numer php5.6.354 .. Następnie sprawdź php -v twój wamp serwer i cli php będą takie same

sudheep kr
źródło