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

27

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

phpinfo():  5.5.24
php -v: 5.6.9

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

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

  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

Сальваторе Дибенедетто
источник
См. Также superuser.com/questions/969861/…
bertieb
1
@bertieb Вопрос действительно похож на другой. Я только что ответил , но здесь есть конкретный вопрос, на который я постараюсь ответить.
JakeGould

Ответы:

14

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

Я понял, что существует несоответствие между версией PHP, сообщенной phpinfo()и 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, я вижу, что строка закомментирована - поскольку я не использую настройки Mac OS X Apache / PHP - и читает что-то вроде этого:

#LoadModule php5_module libexec/apache2/libphp5.so

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

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

Теперь, несмотря на все сказанное, я не знаю, что вы пытаетесь сделать, но если вы занимаетесь веб-разработкой в ​​системе Mac OS X, вам следует серьезно подумать об использовании MAMP вместо взлома основного веб-стека Mac OS X, чтобы получить результат. Бег.

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

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

JakeGould
источник
Почему вы ответили на этот Дубликат вместо того, чтобы пометить вопрос как дубликат?
Pmpr
@Trix Потому что этот «дубликат» является аналогичным ответом на другой вопрос, отправленный в течение нескольких дней друг от друга. Я отвечаю на подобный комментарий здесь : «Вопрос @bertieb действительно похож на этот вопрос. Я только что ответил, но здесь есть конкретный вопрос, на который я постараюсь ответить. - JakeGould 12 сентября '15 в 0:42 ”Один вопрос касается разницы между PHP и командной строкой. Другой вопрос об этом и проблемах с модулем PHP.
JakeGould
4

Я нашел решение своей проблемы. После редактирования /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

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

Сальваторе Дибенедетто
источник
Отредактировал пост, чтобы убрать -kфлаг из apachectlкоманд, поскольку, если вы проверите, apachectl -hэтот флаг / опция там не существует. Понятия не имею, откуда ты это взял. Кроме того, в то время как вы заявляете, что делаете stopи startпроясняете ситуацию, странным является то, что restartв системах Linux это именно так. Если вы проверите скрипт, расположенный в /usr/sbin/apachectl(это скрипт, так что используйте любой текстовый редактор для просмотра), он, кажется, тоже делает это. Может быть, в Mac OS X LaunchDaemonsApache просто «странный» по сравнению со стандартным Linux? Во всяком случае, здорово, что вы решили это.
JakeGould
Просто для вашего сведения я нашел команду с флагом -k здесь: httpd.apache.org/docs/2.2/stopping.html
Сальваторе Дибенедетто
Ты прав. Я посмотрел через «помощь» выход /usr/sbin/apachectl(без команды) , и это четко указано, что [-k start|restart|graceful|graceful-stop|stop]. Я так привык к тому, как Apache работает в системах Linux, теперь, кажется, я забыл о -kфлаге для использования с apachectlкомандами. Итак, зная, что реальная проблема у вас в том, что вы пытались перезапустить эту команду, sudo apachectl restartкогда к ней должен был быть -kдобавлен такой флаг sudo apachectl -k restart.
JakeGould