Как мне сказать 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.

Другие вопросы по тегам