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