Назад | Перейти на главную страницу

Как мне сказать Apache, какой PHP использовать?

Я бегаю 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

Но я не знаю, что и где это.

Это то, что мне нужно изменить?

Я думаю, что все эти ответы на самом деле не отвечают на вопрос. Корневой уровень можно определить, выполнив команду 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. Это определяет, где Apache ROOT каталог должен начать, /etc/httpd в моем случае при поиске config. файлы и модули.

НОТА: это 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

... а затем доступный для демона Apache, 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.

Родительский каталог модулей, загруженных в httpd.conf (например: libexec/apache2/libphp5.so) определяется ServerRoot директива, которая по умолчанию обычно установлена ​​на /usr. Я бы не рекомендовал менять это, но кому-то может быть полезно знать, где именно определен этот путь.

На сайте Apache говорится следующее о ServerRoot:

Относительные пути в других директивах конфигурации (например, Include или LoadModule) принимаются относительно этого каталога.

дополнительно комментарии к файлу httpd.conf по умолчанию гласят:

ServerRoot: верхняя часть дерева каталогов, в которой хранятся файлы конфигурации, ошибок и журналов сервера.

Вы можете найти файлы в своей системе с помощью locate команда:

# locate libphp5.so

Он напечатает полные пути ко всем файлам с этим именем. У меня есть один в /usr/libexec/apache2/libphp5.so.

Apache должен искать модули в "/ usr / libexec / httpd /". Там вы найдете файл или символическую ссылку под названием «libphp5.so». Если это символическая ссылка, вам необходимо повторно установить связь с новым 5.2.8 libphp5.so, в противном случае просто скопируйте 5.2.8 libphp5.so в «/ usr / libexec / httpd /» и перезапустите apache с помощью «sudo apachectl restart» .

У меня на одном из серверов были установлены Apache и PHP. Это было установлено предыдущим системным администратором. И Apache, и PHP были созданы из источника. В дополнение к этому был установлен PHP по умолчанию. Итак, чтобы узнать, какой PHP используется Apache. Я запускаю команду ниже

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

Это дало мне путь к apache apxs

  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.