Раздел описывает установку PHP c веб-сервером Apache 2.x на Unix-системах.
Разработчики PHP не рекомендуют использовать многопоточный MPM-модуль в производственной среде, в которой работает Apache 2. Лучше предпочесть prefork-версию модуля MPM, которая в Apache 2.0 и 2.2 идёт по умолчанию. Подробнее о причинах рассказывает ответ раздела FAQ о работе Apache2 с многопоточным MPM-модулем
Наиболее авторитетный источник информации по Apache 2.x — » документация к Apache. Документация даёт подробную информацию о настройках при установке.
Последняя версия веб-сервера Apache HTTP Server доступна для загрузки » на странице загрузки Apache, а совместимая версия PHP — на странице Download на этом сайте. Это краткое руководство описывает только базовую установку Apache 2.x и PHP. Дополнительную информацию даёт » документация к Apache. В инструкции ниже опустили номера версий — замените 'NN' на номер, который соответствует версии Apache.
Сайт веб-сервера предлагает для загрузки две версии Apache 2.x — 2.4 и 2.2. Лучше предпочесть последнюю версию — 2.4, если нет причин для установки версии 2.2. Инструкции этого раздела будут работать как для версии 2.4, так и для версии 2.2. Обратите внимание, что поддержку Apache httpd 2.2 официально прекратили, поэтому разработку этой версии остановили и больше не выпускают исправлений.
Скачайте Apache HTTP Server по приведённой ссылке и распакуйте его:
tar -xzf httpd-2.x.NN.tar.gz
Аналогичным способом скачайте и распакуйте исходные коды PHP:
tar -xzf php-NN.tar.gz
Скомпилируйте и установите Apache. Подробнее об установке рассказывает документация к Apache.
cd httpd-2_x_NN ./configure --enable-so make make install
Теперь Apache 2.x.NN доступен по адресу /usr/local/apache2, установщик настроил веб-сервер на поддержку загружаемых модулей и работу через стандартный мультипроцессный MPM-модуль, который отвечает на запросы по модели prefork: обрабатывает запросы в отдельном потоке однопоточных процессов. Правильно ли прошла установка, проверяют через стандартную процедуру запуска Apache — командой наподобие вот такой:
/usr/local/apache2/bin/apachectl start
/usr/local/apache2/bin/apachectl stop
Теперь сконфигурируем и соберём PHP. На этом этапе PHP настраивают через опции конфигурации, чтобы указать, например, какие модули требуется включить. Запустите команду ./configure --help, чтобы получить список доступных параметров конфигурации. В примере мы выполним простую настройку с поддержкой веб-сервера Apache и БД MySQL.
При сборке Apache из исходного кода по приведённой на этой странице инструкции путь к команде apxs будет соответствовать пути в следующем примере, но если Apache установили другим способом, потребуется изменить пример и указать путь к apxs, который соответствует установке. Обратите внимание, что отдельные дистрибутивы переименовывают apxs в apxs2.
cd ../php-NN ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql make make install
Если потребуется изменить параметры конфигурации после установки, то потребуется повторно выполнить шаги configure, make и make install. Просто перезапустите Apache, чтобы изменения вступили в силу и новый модуль начал работать. Перекомпиляция Apache для этого не требуется.
Обратите внимание: если не указали иное, команда make install установит также пакетный менеджер » PEAR, инструменты PHP наподобие phpize, установит CLI-интерфейс для работы с PHP в командной оболочке и другие компоненты.
Настройте файл php.ini.
cp php.ini-development /usr/local/lib/php.ini
Установка параметров PHP доступна через редактирование файла .ini
.
Укажите параметр --with-config-file-path=/some/path
в шаге 5,
если предпочитаете хранить файл php.ini в другом месте.
Если вместо этого вы выберете файл php.ini-production, прочитайте список изменений внутри, поскольку они влияют на поведение PHP.
Отредактируйте файл httpd.conf,
чтобы Apache загружал модуль PHP.
Путь к PHP-модулю указывают справа от инструкции LoadModule
.
Команда make install, возможно, уже добавила эту инструкцию автоматически,
ну лучше проверить.
Для PHP 8:
LoadModule php_module modules/libphp.so
Для PHP 7:
LoadModule php7_module modules/libphp7.so
Скажите веб-серверу Apache, чтобы он разбирал файлы с конкретными расширениями как PHP-код.
Например, пусть Apache разбирает как PHP-код файлы с расширением .php
.
Вместо установки только Apache-директивы
AddType
избегают исполнения опасных загрузок и файлов
наподобие exploit.php.jpg.
Аналогично следующему примеру указывают одно или больше произвольных расширений,
которые веб-сервер будет разбирать как файлы с PHP-кодом.
Для демонстрации добавим расширение .php
.
<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>
Или, когда требуется разрешить запуск PHP-кода из файлов
с расширениями .php
, .php2
,
.php3
, .php4
, .php5
,
.php6
и .phtml
, но не другими,
настройка выглядит вот так:
<FilesMatch "\.ph(p[2-6]?|tml)$"> SetHandler application/x-httpd-php </FilesMatch>
А чтобы фильтр исходного PHP-кода обрабатывал файлы с расширением .phps
и показывал как исходный код с подсветкой синтаксиса,
настройку записывают вот так:
<FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source </FilesMatch>
Модуль mod_rewrite
умеет показывать произвольные файлы
с расширением .php
как исходный код с подсветкой синтаксиса
без переименования или копирования в файл с расширением .phps
:
RewriteEngine On RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]
Фильтр исходного PHP-кода отключают в производственной среде, поскольку он раскрывает конфиденциальную или другую чувствительную информацию, которую встроили в исходный код.
Сервер Apache запускают стандартной процедурой наподобие:
/usr/local/apache2/bin/apachectl start
ИЛИ
service httpd restart
Выполнение действий, которые описала эта страница, запускает веб-сервер Apache2
с поддержкой PHP в виде SAPI
-модуля.
Конечно, для PHP и Apache доступно гораздо больше параметров конфигурации.
Дополнительную информацию даёт команда ./configure --help
при запуске в соответствующем дереве исходного кода.
Сборка веб-сервера Apache будет работать в многопоточном режиме, если при сборке Apache вместо стандартного мультипроцессного MPM-модуля prefork выбрать мультипроцессный MPM-модуль, который отвечает на запросы по модели worker: обрабатывает отдельный запрос в отдельном потоке многопоточного процесса. Чтобы сделать это, к аргументу, который передали команде ./configure на шаге 3, добавляют следующую опцию:
--with-mpm=worker
Веб-сервер собирают для работы по такой модели, только если осознают последствия решения и отчётливо понимают смысл действий. Документация Apache » к MPM-модулям рассматривает работу модулей MPM подробнее.
Замечание:
В разделе FAQ в ответе на вопрос о параметре MultiViews в настройках Apache обсуждается согласование контента множественного представления при работе веб-сервера с PHP-файлами.
Замечание:
Только в системах с поддержкой потоков получится собрать многопоточную версию Apache. Тогда требуется и PHP-сборка с поддержкой потокобезопасного ZTS-режима (англ. Zend Thread Safety). В этой конфигурации не каждое расширение будет доступно. Разработчики PHP рекомендуют настраивать сборку Apache на работу с MPM-модулем prefork по умолчанию.