Как указать 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. Она определяет, где находится каталог 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

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

Это довольно просто, просто сделайте следующее:
1) Остановите Apache;
2) В нижней части файла, как

C:\Apache24\conf\httpd.conf  

добавьте или измените эти строки:

# PHP8 module
PHPIniDir "C:/php"
LoadModule php_module "C:/php/php8apache2_4.dll"
AddType application/x-httpd-php .php

Сохраните файл и проверьте его, запустив

httpd -t

Теперь запустите Apache с

httpd -k start

Ответ или решение

Чтобы правильно указать Apache, какую версию PHP использовать, важно учитывать несколько шагов и деталей, которые войдут в процесс настройки. Рассмотрим последовательно, как это сделать.

Теория

Apache использует модуль libphp5.so для интеграции PHP с сервером. По умолчанию Apache будет загружать этот модуль из директории, указанной в файле конфигурации httpd.conf. Если вы недавно скомпилировали новую версию PHP, но Apache все еще использует старую версию (как в вашем случае: версия 5.2.6 вместо 5.2.8), проблема может заключаться в том, что Apache использует старую копию libphp5.so.

Основная задача — определить местоположение файла libphp5.so, соответствующего вашей новой версии PHP, и обновить файл конфигурации Apache, чтобы он использовал именно эту версию.

Пример

  1. Проверка текущей загрузки модуля PHP:

    Через терминал выполните команду:

    locate libphp5.so

    Эта команда покажет все местоположения файлов с именем libphp5.so на системе. Среди них вы должны найти файл, соответствующий недавно установленной версии PHP.

  2. Обновление конфигурации Apache:

    Откройте файл httpd.conf, обычно расположенный в директории /etc/httpd/conf/ или /usr/local/apache2/conf/. Найдите строку:

    LoadModule php5_module libexec/apache2/libphp5.so

    Обновите путь к libphp5.so на путь, найденный для вашей новой версии PHP. Например:

    LoadModule php5_module /path/to/new/libphp5.so
  3. Проверка корневой директории Apache:

    Выполните команду:

    httpd -V

    Обратите внимание на параметр HTTPD_ROOT, чтобы подтвердить, где Apache ожидает найти свои файлы конфигурации и модули.

  4. Проверка соответствия версии PHP:

    Выполните команду:

    php -i | grep apxs

    Эта команда подскажет вам, какой сервер Apache был использован для компиляции PHP. Убедитесь, что путь к apxs соответствует вашей конфигурации.

Применение

  1. При изменении версии PHP в Apache:

    • Остановите сервис Apache:

      sudo apachectl stop
    • Откорректируйте файл httpd.conf, чтобы гарантировать правильную загрузку модуля PHP из нового местонахождения.

    • Перезагрузите конфигурацию Apache, чтобы проверить наличие ошибок:

      apachectl configtest
    • Если все в порядке, перезапустите Apache:

      sudo apachectl start
  2. Подтверждение версии PHP через Apache:

    Создайте PHP-файл на вашем сервере, например, info.php с содержимым:

    <?php phpinfo(); ?>

    Перейдя в браузере по URL к этому файлу, вы должны увидеть обновленную версию PHP, подключенную через Apache.

Заключение

Настройка правильной версии PHP в Apache требует уделить внимание пути, по которому загружается модуль libphp5.so. Используя команды locate и httpd -V, вы сможете определить точное местоположение файлов, связанных с вашими версиями PHP и Apache, и произвести коррекцию конфигурации соответственно. Это обеспечит работу Apache с нужной версией PHP и позволит использовать все нововведения и модули, доступные в новой версии. Соблюдение этих шагов гарантирует, что ваши настройки Apache оптимизированы для работы с недавно скомпилированным PHP, принимая во внимание все конфигурационные тонкости, представленные в системе.

Оцените материал
Добавить комментарий

Капча загружается...