Як сказати Apache, який PHP використовувати?


34

Я запускаю Apache2 на Mac OS X (10.5) . Я просто скомпілював PHP 5.2.8 і нарешті почав pdo-mysqlпрацювати (або так я думаю).

Ця термінальна команда:

php --version

відображається 5.2.8, і у мене встановлені правильні модулі.

Але, коли я це роблю phpinfo(), Apache вивантажує PHP 5.2.6 (моя попередня версія, без pdo_mysql).

Як сказати Apache, який PHP завантажувати? У httpd.confрядку є:

LoadModule php5_module        libexec/apache2/libphp5.so

Але я не знаю, що і де це.

Це те, що я повинен змінити?


Коли ви компілювали php, ви використовували make install? Якщо ви знайшли шлях, до якого встановив ваш модуль, і змінили конфігурацію apache, щоб вказати на нього. Mac має власну версію apache та php5, яка вже встановлена, тому ви бачите іншу версію.
Килимки


Користувачі домашніх програм, дивіться коментар
@Mick

1
Ви вирішили свою проблему? ВСІ відповіді - просто шалена річ
Pmpr

Жодна з цих відповідей не дає відповіді на запитання. Це химерно ...
Quant

Відповіді:


14

Я думаю, що всі ці відповіді насправді не відповідають на питання. Рівень кореня можна визначити, запустивши команду httpd -V. Це покаже вам, з якими параметрами був побудований демон Apache під час компіляції. Це те, що httpdвизначає, де визначається, де шукати його конфігурацію. файли та .so модулі за замовчуванням.

Наприклад:

% httpd -V
Server version: Apache/2.2.17 (Unix)
Server built:   Dec 17 2010 11:58:24
Server's Module Magic Number: 20051115:25
Server loaded:  APR 1.3.12, APR-Util 1.3.9
Compiled using: APR 1.3.12, APR-Util 1.3.9
Architecture:   32-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

Ключовим рядком у цьому виході є HTTPD_ROOT. Це визначає, з чого ROOTпочинати каталог Apache , /etc/httpdв моєму випадку, при пошуку конфігурації. файли та модулі.

ПРИМІТКА. Це ROOTне те саме, що DocumentRoot. Це ROOTспецифічно для того, як httpdдемон був складений, DocumentRootце для того , щоб вказати, де httpdдемон повинен почати шукати фактичний веб-вміст (.html файли тощо).

Для мого httpd.confфайлу у мене є наступні рядки для завантаження:

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so

Враховуючи це, повний шлях до ваших модулів буде, наприклад:

/etc/httpd/modules/mod_auth_basic.so

Це з системи CentOS 5.x, але техніка все ще влучна.

До речі, це може стати трохи заплутаним, оскільки у випадку CentOS файли тут організовані фізично:

% ls /usr/lib/httpd/modules/
libphp5.so            mod_authnz_ldap.so      mod_dav_fs.so      mod_headers.so       mod_perl.so            mod_speling.so

... і потім доступний демону Апачі httpd, через цей шлях:

% ls -l /etc/httpd/
total 12
drwxr-xr-x 2 root root 4096 Apr 26  2011 conf
drwxr-xr-x 3 root root 4096 Apr 26  2011 conf.d
-rw-r--r-- 1 root root   18 Feb 24  2009 htpasswd
lrwxrwxrwx 1 root root   19 Apr 26  2011 logs -> ../../var/log/httpd
lrwxrwxrwx 1 root root   27 Apr 26  2011 modules -> ../../usr/lib/httpd/modules
lrwxrwxrwx 1 root root   13 Apr 26  2011 run -> ../../var/run

У modulesзасланні підключає /etc/httpd-> /usr/lib/httpd/modules.


slm, як я заявляв у попередньому дописі, ServerRoot визначений у директиві ServerRoot і не має нічого спільного з HTTPD_ROOT, який відображається через "httpd -V." Будь ласка, зверніться до веб-сторінок Apache, на які було посилатися в моєму попередньому дописі, або якщо ви хочете змінити директиву ServerRoot у вашомуфайлі httpd.conf і переконайтеся самі.
billynoah

ServerRoot - це спосіб перевизначення HTTPD_ROOT. HTTPD_ROOT встановлюється під час компіляції за допомогою перемикача налаштування --prefix. У вашій публікації розрізняли різні ч / б ServerRoot та DocumentRoot. httpd.apache.org/docs/current/mod/core.html#serverroot . Приємно бачити, що ви зареєстрували ім’я зі свого облікового запису SF!
slm

Чи справді це відповідає на питання: "Як мені сказати Apache, який PHP використовувати?" ?
Pmpr

Трикс ОП прийняв це так, так.
slm

@slm Це не відповідає на питання.
Quant

4

Ви можете знайти файли у своїй системі за допомогою locateкоманди:

# знайдіть libphp5.so

Він надрукує повний шлях усіх файлів з цим ім'ям. У мене є один /usr/libexec/apache2/libphp5.so.


1
І що? це відповідь на запитання? Або спосіб знайти файл?
Pmpr

1
@Trix, запитуючи, сказав: "Я не знаю, що і де це". Я показав, як знайти, де це. Я припускав, що як тільки запитувач побачить усі інші місця названого файла, про який йде мова, було б очевидно, як змінити налаштування на використання іншого.
Роб Кеннеді

4

Батьківський каталог модулів, завантажених у httpd.conf (таких як:), libexec/apache2/libphp5.soвизначається ServerRootдирективою, яка за замовчуванням зазвичай встановлюється /usr. Я б не рекомендував змінювати це, але хтось може бути корисним, щоб знати, де саме визначений цей шлях.

Веб-сайт Apache говорить про ServerRoot :

Відносні шляхи в інших директивах конфігурації (наприклад, включати, наприклад, LoadModule) приймаються відносно цього каталогу.

додатково коментарі до файлу httpd.conf за замовчуванням читають:

ServerRoot: верхня частина дерева директорій, під якою зберігаються файли конфігурації, помилки та журналу сервера.


2
OP не після визначення ServerRoot. Замість цього він задав питання "Як мені сказати Apache, який PHP використовувати?". Якщо ви дійсно хочете відповісти на нього, то відповідайте на нього
Pmpr

3

Apache повинен шукати модулі в "/ usr / libexec / httpd /". Там ви знайдете або файл, або символьне посилання під назвою "libphp5.so". Якщо це символьне посилання, вам потрібно буде переспрямуватися на новий 5.2.8 libphp5.so, інакше просто скопіюйте 5.2.8 libphp5.so в "/ usr / libexec / httpd /" і перезапустіть apache за допомогою "sudo apachectl restart" .


0

У мене були встановлені Apache та PHP на одному з серверів. Це було встановлено попереднім адміністратором sys. І Apache, і PHP виконувались з джерела. На додаток до цього було встановлено PHP за замовчуванням. Отже, щоб знати, який PHP використовується Apache. Я запускаю команду нижче

   <Install Dir of PHP>/bin/php -i | grep apxs

Це дало мені шлях до apche apx

  APACHE_HOME/bin/apxs

Це дало мені інформацію про те, які Apache використовується цим php. PHP за замовчуванням видав помилку під час введення

#php -i | grep apxs 

 Failed loading opcache.so:  opcache.so: cannot open shared object file: No    such file or directory PHP Warning:  PHP Startup: Unable to load dynamic library     '<PHP_HOME>/lib/php/extensions/debug-non-zts-20121212/memcached.so' - <PHP_HOME>/lib/php/extensions/debug-non-zts-20121212/memcached.so: undefined symbol: OnUpdateLongGEZero in Unknown on line 0

Таким чином, я зміг розібратися в php, який використовує Apache.


1
Будь ласка, не надсилайте однакову відповідь двічі. Натомість посилання на першу відповідь.
Свен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.