Как мне сказать 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
Но я не знаю, что или где это.
Это то, что я должен изменить?
5 ответов
Я думаю, что все эти ответы на самом деле не отвечают на вопрос. Корневой уровень можно определить, выполнив команду 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
в моем случае при поиске конфига. файлы и модули.
ПРИМЕЧАНИЕ: это 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
,
Вы можете найти файлы в вашей системе с помощью locate
команда:
# locate libphp5.so
Он напечатает полные пути всех файлов с этим именем. У меня есть один в /usr/libexec/apache2/libphp5.so
,
Родительский каталог модулей, загруженных в httpd.conf (например: libexec/apache2/libphp5.so
) определяется ServerRoot
директива, которая по умолчанию обычно установлена /usr
, Я бы не рекомендовал менять это, но кому-то может быть полезно знать, где именно этот путь определен.
На веб-сайте Apache говорится о ServerRoot:
Относительные пути в других директивах конфигурации (например, таких как Include или LoadModule) принимаются относительно этого каталога.
дополнительно по умолчанию комментарии к файлу httpd.conf гласят:
ServerRoot: верхняя часть дерева каталогов, в которой хранятся файлы конфигурации, ошибок и журналов сервера.
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.