Почему версия PHP в phpinfo() и CLI отличается?

Почему версия PHP в phpinfo() и CLI отличается?

phpinfo()Я понял, что между версией PHP, указанной в отчете, и php -v(в CLI) имеется несоответствие .

phpinfo():  5.5.24
php -v: 5.6.9

Я работаю на Mac OS X 10.10 (Yosemite) и установил библиотеку ( php-version), чтобы попытаться управлять версиями PHP.

Он сообщает мне о трех разных версиях, установленных на моем ноутбуке:

  5.4.41
  5.5.25
* 5.6.9

Я хотел бы установить одну и ту же версию PHP в Apache и CLI.

Как мне сообщить Apache, какую версию PHP использовать?

Я попытался написать эту строку в своем httpd.conf:

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

Затем:

sudo apachectl restart

Но все это не решает проблему… В моей информации о PHP все еще есть: 5.5.24

решение1

Несколько различных проблем здесь скрываются под понятием путаницы версий PHP, поэтому постараюсь рассмотреть каждую из них как можно яснее. Сначала это:

phpinfo()Я понял, что между версией PHP, указанной в отчете, и php -v(в CLI) имеется несоответствие .

phpinfo():  5.5.24
php -v: 5.6.9

PHP CLI — это не то же самое, что модуль PHP Apache.

Как я объясняю в ответе наэтот другой вопрос здесь, не паникуйте! Если вас беспокоит, какую версию PHP использует ваш сервер Apache, то phpinfo()вам всегда следует обратить внимание на вывод. Модуль Apache PHP и двоичный файл командной строки PHP — это две разные вещи, которые не мешают друг другу.

Просто обратите внимание на вывод, phpinfo()если вы обеспокоены установкой правильной версии модуля PHP в Apache.

Тем не менее, у вас, похоже, все еще возникают проблемы с загрузкой правильного модуля PHP в Apache:

Я попытался написать эту строку в своем httpd.conf:

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

Убедитесь, что ваш сервер Apache загружает правильный модуль PHP.

Хотя технически все, что вы сделали, выглядит правильно, единственная причина, по которой это не работает, заключается в том, что LoadModule php5_moduleв файлах конфигурации Apache есть другая директива, которая заменяет значение, которое вы устанавливаете в этой строке.

Я бы рекомендовал просмотреть httpd.conf—который, как я предполагаю, находится здесь /etc/apache2/httpd.conf— и посмотреть, возможно, есть действительно другой LoadModule php5_module, который вы пропустили или не заметили при редактировании этого файла. Глядя на мой эквивалентный файл в Mac OS X 10.9.5, я вижу, что строка закомментирована — поскольку я не использую настройки Apache/PHP для Mac OS X — и выглядит примерно так:

#LoadModule php5_module libexec/apache2/libphp5.so

Конечно, в вашем случае это было бы некомментировано. Подробнее о настройке Apache и PHP для веб-разработкиможно найти на этом сайте.

Серьёзно рассмотрите возможность использования MAMP в качестве альтернативы особенностям Mac OS X Apache/PHP.

Теперь, несмотря на все вышесказанное, я не знаю, что вы пытаетесь сделать, но если вы занимаетесь веб-разработкой на системе Mac OS X, вам следует серьезно рассмотреть возможность использованияМАМПвместо того, чтобы взламывать основной веб-стек Mac OS X, чтобы все заработало.

Преимущество MAMP в том, что это чрезвычайно производственный уровень Mac OS X, эквивалент стека LAMP. И поскольку он ориентирован на реальную веб-разработку, у него все модули и конфигурации настроены именно так, как и должно быть.

Основная проблема Apache и PHP на Mac OS X заключается в том, что программное обеспечение обычно устарело, его сложно настраивать/подстраивать и управлять, а также отлаживать, когда происходят такие вещи. А что, если выйдет обновление Mac OS X, которое сотрет ваши тщательно настроенные настройки Apache и PHP? Вы вернетесь к исходной точке.

решение2

Я нашел решение своей проблемы. После редактирования /etc/apache2/httpd.confя перезапускал apache с помощью:

sudo apachectl restart

По какой-то причине при использовании этой команды Apache не извлекает обновления httpd.confи не загружает старую конфигурацию.

С использованием:

sudo apachectl -k stop
sudo apachectl -k start

Сделайте своего рода жесткий перезапуск всех служб, а также прочитайте обновления в файле конфигурации и, наконец, прочитайте новый путь для php5_module:

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

Спасибо также@Giacomo1968 за его объяснение.

решение3

В моей ситуации (сервер Windows с установленным Composer) Composer также жестко закодировал пути к различным расширениям PHP в php.ini (например, extension=C:/php7-3-27/ext/php_gd2.dll). Поэтому мне нужно было изменить и их. Это все равно не изменило версию, отображаемую в phpinfo(), вызываемом с веб-страницы Apache. Оказалось, что Composer также добавил мою старую папку версии PHP в переменные среды PATH, поэтому мне пришлось изменить ее, чтобы она указывала на мою новую папку PHP, прежде чем я увидел, что изменение версии вступило в силу.

Конечно, вам нужно убедиться, что ваш httpd.conf обновлен в соответствии с другими ответами в этой теме. Но если это не сработает, проверьте, какой путь к php.ini указан в phpinfo(), а также проверьте эти ^^ вещи.

Связанный контент