Чому версія 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? Ви повернулися до квадратного.


Чому ви відповіли на цей дублікат замість того, щоб позначати це питання як дублікат?
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 LaunchDaemonsдля Apache просто "дивно" порівняно зі стандартним Linux? У всякому разі, чудово, що ти це вирішив.
JakeGould

Тільки для вашої інформації я знайшов команду із прапором -k тут: httpd.apache.org/docs/2.2/stopping.html
Salvatore Dibenedetto

Ви праві. Я подивився через «допомогу» вихід /usr/sbin/apachectl(без команди) , і це чітко зазначено, що [-k start|restart|graceful|graceful-stop|stop]. Я так звик до того, як Apache працює в системах Linux зараз, здається, я забув про -kпрапор для використання з apachectlкомандами. Отже, знаючи, що у вас справжня проблема, ви намагалися перезапустити цю команду, sudo apachectl restartколи у неї повинен був бути -kдоданий такий прапор sudo apachectl -k restart.
JakeGould
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.