<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/install.unix.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'install.unix.apache2.php',
    1 => 'Apache 2.x на Unix системах',
    2 => 'Apache 2.x на Unix системах',
  ),
  'up' => 
  array (
    0 => 'install.unix.php',
    1 => 'Установка в Unix-системы',
  ),
  'prev' => 
  array (
    0 => 'install.unix.commandline.php',
    1 => 'Установка с интерфейсами CGI и командной строки',
  ),
  'next' => 
  array (
    0 => 'install.unix.nginx.php',
    1 => 'Установка Nginx 1.4.x на систему Unix',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'install/unix/apache2.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="install.unix.apache2" class="sect1">
 <h2 class="title">Apache 2.x на Unix системах</h2>

 <p class="para">
  Раздел описывает установку PHP c веб-сервером Apache 2.x на Unix-системах.
 </p>

 <div class="warning"><strong class="warning">Внимание</strong><p class="para">Разработчики PHP не рекомендуют
использовать многопоточный MPM-модуль в производственной среде, в которой работает Apache 2.
Лучше предпочесть prefork-версию модуля MPM, которая в Apache 2.0 и 2.2 идёт по умолчанию. Подробнее о причинах
рассказывает ответ раздела FAQ
<a href="faq.installation.php#faq.installation.apache2" class="link">о работе Apache2 с многопоточным MPM-модулем</a></p></div>

 <p class="para">
  Наиболее авторитетный источник информации по Apache 2.x —
  <a href="http://httpd.apache.org/docs/current/" class="link external">&raquo;&nbsp;документация к Apache</a>.
  Документация даёт подробную информацию о настройках при установке.
 </p>

 <p class="para">
  Последняя версия веб-сервера Apache HTTP Server доступна для загрузки
  <a href="http://httpd.apache.org/" class="link external">&raquo;&nbsp;на странице загрузки Apache</a>,
  а совместимая версия PHP — на странице Download на этом сайте.
  Это краткое руководство описывает только базовую установку Apache 2.x и PHP.
  Дополнительную информацию даёт
  <a href="http://httpd.apache.org/docs/current/" class="link external">&raquo;&nbsp;документация к Apache</a>.
  В инструкции ниже опустили номера версий — замените &#039;NN&#039; на
  номер, который соответствует версии Apache.
 </p>

 <p class="para">
  Сайт веб-сервера предлагает для загрузки две версии Apache 2.x — 2.4 и 2.2.
  Лучше предпочесть последнюю версию — 2.4, если нет причин для установки
  версии 2.2.
  Инструкции этого раздела будут работать как для версии 2.4, так и для версии 2.2.
  Обратите внимание, что поддержку Apache httpd 2.2 официально прекратили,
  поэтому разработку этой версии остановили и больше не выпускают исправлений.
 </p>

 <ol type="1">
  <li class="listitem">
   <p class="para">
    Скачайте Apache HTTP Server по приведённой ссылке
    и распакуйте его:
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
tar -xzf httpd-2.x.NN.tar.gz
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    Аналогичным способом скачайте и распакуйте исходные коды PHP:
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
tar -xzf php-NN.tar.gz
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    Скомпилируйте и установите Apache. Подробнее об установке
    рассказывает документация к Apache.
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
cd httpd-2_x_NN
./configure --enable-so
make
make install
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    Теперь Apache 2.x.NN доступен по адресу /usr/local/apache2,
    установщик настроил веб-сервер на поддержку загружаемых модулей и работу через
    стандартный мультипроцессный MPM-модуль, который отвечает на запросы по модели prefork:
    обрабатывает запросы в отдельном потоке однопоточных процессов.
    Правильно ли прошла установка, проверяют через стандартную
    процедуру запуска Apache — командой наподобие вот такой:

    <div class="informalexample">
     <div class="example-contents screen">
<div class="cdata"><pre>
/usr/local/apache2/bin/apachectl start
</pre></div>
     </div>
    </div>

    Затем остановите сервер, чтобы сконфигурировать и установить PHP:

    <div class="informalexample">
     <div class="example-contents screen">
<div class="cdata"><pre>
/usr/local/apache2/bin/apachectl stop
</pre></div>
     </div>
    </div>
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Теперь сконфигурируем и соберём PHP. На этом этапе PHP настраивают
    через опции конфигурации, чтобы указать, например, какие модули требуется включить.
    Запустите команду <strong class="command">./configure --help</strong>, чтобы получить список доступных параметров
    конфигурации. В примере мы выполним простую настройку
    с поддержкой веб-сервера Apache и БД MySQL.
   </p>

   <p class="para">
    При сборке Apache из исходного кода по приведённой на этой странице инструкции
    путь к команде <strong class="command">apxs</strong> будет соответствовать пути в следующем примере,
    но если Apache установили другим способом, потребуется изменить пример и указать путь к <strong class="command">apxs</strong>,
    который соответствует установке. Обратите внимание, что отдельные дистрибутивы
    переименовывают <strong class="command">apxs</strong> в <strong class="command">apxs2</strong>.
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
cd ../php-NN
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
make
make install
</pre></div>
    </div>
   </div>

   <p class="para">
    Если потребуется изменить параметры конфигурации после установки,
    то потребуется повторно выполнить шаги <strong class="command">configure</strong>, <strong class="command">make</strong>
    и <strong class="command">make install</strong>.
    Просто перезапустите Apache, чтобы изменения вступили в силу и новый модуль начал работать.
    Перекомпиляция Apache для этого не требуется.
   </p>

   <p class="para">
    Обратите внимание: если не указали иное, команда <strong class="command">make install</strong>
    установит также пакетный менеджер <a href="https://pear.php.net/" class="link external">&raquo;&nbsp;PEAR</a>,
    инструменты PHP наподобие <a href="install.pecl.phpize.php" class="link">phpize</a>,
    установит CLI-интерфейс для работы с PHP в командной оболочке и другие компоненты.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Настройте файл <var class="filename">php.ini</var>.
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
cp php.ini-development /usr/local/lib/php.ini
</pre></div>
    </div>
   </div>

   <p class="para">
    Установка параметров PHP доступна через редактирование файла <code class="literal">.ini</code>.
    Укажите параметр <code class="literal">--with-config-file-path=/some/path</code> в шаге 5,
    если предпочитаете хранить файл <var class="filename">php.ini</var> в другом месте.
   </p>

   <p class="para">
    Если вместо этого вы выберете файл <var class="filename">php.ini-production</var>,
    прочитайте список изменений внутри, поскольку они влияют на поведение PHP.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Отредактируйте файл <var class="filename">httpd.conf</var>,
    чтобы Apache загружал модуль PHP.
    Путь к PHP-модулю указывают справа от инструкции <code class="literal">LoadModule</code>.
    Команда <strong class="command">make install</strong>, возможно, уже добавила эту инструкцию автоматически,
    ну лучше проверить.
   </p>

   <div class="informalexample">
    <p class="para">Для PHP 8:</p>
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">LoadModule php_module modules/libphp.so</pre>
</div>
    </div>

   </div>

   <div class="informalexample">
    <p class="para">
     Для PHP 7:
    </p>
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">LoadModule php7_module modules/libphp7.so</pre>
</div>
    </div>

   </div>
  </li>

  <li class="listitem">
   <p class="para">
    Скажите веб-серверу Apache, чтобы он разбирал файлы с конкретными расширениями как PHP-код.
    Например, пусть Apache разбирает как PHP-код файлы с расширением <code class="literal">.php</code>.
    Вместо установки только Apache-директивы
    <code class="literal">AddType</code> избегают исполнения опасных загрузок и файлов
    наподобие <var class="filename">exploit.php.jpg</var>.
    Аналогично следующему примеру указывают одно или больше произвольных расширений,
    которые веб-сервер будет разбирать как файлы с PHP-кодом.
    Для демонстрации добавим расширение <code class="literal">.php</code>.
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">&lt;FilesMatch \.php$&gt;
    SetHandler application/x-httpd-php
&lt;/FilesMatch&gt;</pre>
</div>
    </div>

   </div>

   <p class="para">
    Или, когда требуется разрешить запуск PHP-кода из файлов
    с расширениями <code class="literal">.php</code>, <code class="literal">.php2</code>,
    <code class="literal">.php3</code>, <code class="literal">.php4</code>, <code class="literal">.php5</code>,
    <code class="literal">.php6</code> и <code class="literal">.phtml</code>, но не другими,
    настройка выглядит вот так:
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">&lt;FilesMatch &quot;\.ph(p[2-6]?|tml)$&quot;&gt;
    SetHandler application/x-httpd-php
&lt;/FilesMatch&gt;</pre>
</div>
    </div>

   </div>

   <p class="para">
    А чтобы фильтр исходного PHP-кода обрабатывал файлы с расширением <code class="literal">.phps</code>
    и показывал как исходный код с подсветкой синтаксиса,
    настройку записывают вот так:
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">&lt;FilesMatch &quot;\.phps$&quot;&gt;
    SetHandler application/x-httpd-php-source
&lt;/FilesMatch&gt;</pre>
</div>
    </div>

   </div>

   <p class="para">
    Модуль <code class="literal">mod_rewrite</code> умеет показывать произвольные файлы
    с расширением <code class="literal">.php</code> как исходный код с подсветкой синтаксиса
    без переименования или копирования в файл с расширением <code class="literal">.phps</code>:
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">RewriteEngine On
RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]</pre>
</div>
    </div>

   </div>

   <p class="para">
    Фильтр исходного PHP-кода отключают
    в производственной среде, поскольку он раскрывает конфиденциальную
    или другую чувствительную информацию, которую встроили в исходный код.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Сервер Apache запускают стандартной процедурой наподобие:
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
/usr/local/apache2/bin/apachectl start
</pre></div>
    </div>
   </div>

   <p class="para">ИЛИ</p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
service httpd restart
</pre></div>
    </div>
   </div>
  </li>
 </ol>

 <p class="para">
  Выполнение действий, которые описала эта страница, запускает веб-сервер Apache2
  с поддержкой PHP в виде <code class="literal">SAPI</code>-модуля.
  Конечно, для PHP и Apache доступно гораздо больше параметров конфигурации.
  Дополнительную информацию даёт команда <strong class="command">./configure --help</strong>
  при запуске в соответствующем дереве исходного кода.
 </p>

 <p class="para">
  Сборка веб-сервера Apache будет работать в многопоточном режиме,
  если при сборке Apache вместо стандартного мультипроцессного MPM-модуля <var class="filename">prefork</var>
  выбрать мультипроцессный MPM-модуль, который отвечает на запросы
  по модели <var class="filename">worker</var>: обрабатывает отдельный запрос в отдельном потоке
  многопоточного процесса. Чтобы сделать это, к аргументу, который передали команде <strong class="command">./configure</strong>
  на шаге 3, добавляют следующую опцию:
 </p>

 <div class="informalexample">
  <div class="example-contents screen">
<div class="cdata"><pre>
--with-mpm=worker
</pre></div>
  </div>
 </div>

 <p class="para">
  Веб-сервер собирают для работы по такой модели, только если осознают
  последствия решения и отчётливо понимают смысл действий. Документация Apache
  <a href="http://httpd.apache.org/docs/current/mpm.html" class="link external">&raquo;&nbsp;к MPM-модулям</a>
  рассматривает работу модулей MPM подробнее.
 </p>

 <blockquote class="note"><p><strong class="note">Замечание</strong>: 
  <p class="para">
   В разделе FAQ в ответе на вопрос
   <a href="faq.installation.php#faq.installation.apache.multiviews" class="link">о параметре MultiViews в настройках Apache</a>
   обсуждается согласование контента множественного представления при работе веб-сервера с PHP-файлами.
  </p>
 </p></blockquote>

 <blockquote class="note"><p><strong class="note">Замечание</strong>: 
  <p class="para">
   Только в системах с поддержкой потоков получится собрать многопоточную версию Apache.
   Тогда требуется и PHP-сборка с поддержкой потокобезопасного ZTS-режима (англ. Zend Thread Safety).
   В этой конфигурации не каждое расширение будет доступно.
   Разработчики PHP рекомендуют настраивать сборку Apache
   на работу с MPM-модулем <var class="filename">prefork</var> по умолчанию.
  </p>
 </p></blockquote>
</div><?php manual_footer($setup); ?>