PHP 8.4.2 Released!

Apache 2.x на Unix системах

Раздел описывает установку 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 официально прекратили, поэтому разработку этой версии остановили и больше не выпускают исправлений.

  1. Скачайте Apache HTTP Server по приведённой ссылке и распакуйте его:

    tar -xzf httpd-2.x.NN.tar.gz
    
  2. Аналогичным способом скачайте и распакуйте исходные коды PHP:

    tar -xzf php-NN.tar.gz
    
  3. Скомпилируйте и установите Apache. Подробнее об установке рассказывает документация к Apache.

    cd httpd-2_x_NN
    ./configure --enable-so
    make
    make install
    
  4. Теперь Apache 2.x.NN доступен по адресу /usr/local/apache2, установщик настроил веб-сервер на поддержку загружаемых модулей и работу через стандартный мультипроцессный MPM-модуль, который отвечает на запросы по модели prefork: обрабатывает запросы в отдельном потоке однопоточных процессов. Правильно ли прошла установка, проверяют через стандартную процедуру запуска Apache — командой наподобие вот такой:

    /usr/local/apache2/bin/apachectl start
    
    Затем остановите сервер, чтобы сконфигурировать и установить PHP:
    /usr/local/apache2/bin/apachectl stop
    

  5. Теперь сконфигурируем и соберём 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 в командной оболочке и другие компоненты.

  6. Настройте файл 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.

  7. Отредактируйте файл httpd.conf, чтобы Apache загружал модуль PHP. Путь к PHP-модулю указывают справа от инструкции LoadModule. Команда make install, возможно, уже добавила эту инструкцию автоматически, ну лучше проверить.

    Для PHP 8:

    LoadModule php_module modules/libphp.so

    Для PHP 7:

    LoadModule php7_module modules/libphp7.so
  8. Скажите веб-серверу 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-кода отключают в производственной среде, поскольку он раскрывает конфиденциальную или другую чувствительную информацию, которую встроили в исходный код.

  9. Сервер 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 по умолчанию.

Добавить

Примечания пользователей 2 notes

up
16
nmmm at nmmm dot nu
15 years ago
When I upgrade to apache 2.2, this:

AddType application/x-httpd-php .php5
AddType application/x-httpd-php .php42
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtm
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .asp

...does not worked for me, so I did this:

<FilesMatch "\.(php*|phtm|phtml|asp|aspx)$">
SetHandler application/x-httpd-php
</FilesMatch>

Another interesting point with Apache 2.2 is following.
Let suppose we installed PHP as module. But for some directory, we need to use PHP as CGI (probably because of custom configuration). This can be done using:

<FilesMatch "\.(php*|phtm|phtml|asp|aspx)$">
SetHandler none
</FilesMatch>

AddType application/x-httpd-php-custom .php
Action application/x-httpd-php-custom /cgi-bin/php-huge

Note type must be different than "application/x-httpd-php" and also you need to deactivate the handler on sertain extention. You can do mixed configuration:

<FilesMatch "\.(php)$">
SetHandler none
</FilesMatch>

AddType application/x-httpd-php-custom .php
Action application/x-httpd-php-custom /cgi-bin/php-huge

in such case files like *.php5 and so on will be parsed via module, but *.php will go to php-huge executable.
up
8
Morning Star
2 years ago
I had just installed php8.1.12 on a machine used for writing C code.

Below are some libraries that I needed to download on a debian-based OS.

apt-get install libpcre3 libpcre3-dev
apt-get install apache2-dev
apt-get install libxml2-dev
apt-get install libsqlite3-dev

These were the missing packages that I required.
If you get an error regarding a missing package or library, for example when I needed sqlite3, run the command:

apt search sqlite3

And you'll be able to see if there's any dev or lib packages.

The apache2 instructions worked flawlessly at the time of php8.1.12; and in order to get certain requirements for an application, I had to run the php configure file like so:

./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql --with-mysqli --with-zip --enable-gd

The extra flags allowed me to use both types of mysql, allowed me to utilize PHP zip archiving, and allowed me to use Gnatt stuff.
To Top