<?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 => 'uk',
  ),
  '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' => 'uk',
    '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">
  Цей розділ містить замітки та підказки щодо встановлення Apache 2.x з PHP в
  системи Unix.
 </p>

 <div class="warning"><strong class="warning">Увага</strong><p class="para">Ми не рекомендуємо
використовувати потоковий MPM у виробничому середовищі з Apache 2.
Замість нього краще обрати prefork MPM, який початково йде з Apache 2.0 та 2.2.
Докладніше — у розділі <a href="faq.installation.php#faq.installation.apache2" class="link">Apache 2 з
потоковим MPM</a></p></div>
     
 <p class="para">
  <a href="http://httpd.apache.org/docs/current/" class="link external">&raquo;&nbsp;Документація на сайті Apache</a>
  є найбільш авторитетним джерелом інформації про сервер Apache 2.x.
  Там можна знайти більше інформації про параметри його інсталяції.
 </p>
 
 <p class="para">
  Найновішу версію HTTP-сервера Apache можна отримати на
  <a href="http://httpd.apache.org/" class="link external">&raquo;&nbsp;сторінці завантаження Apache</a>.
  Також треба завантажити потрібну версію PHP (див. навігаційну панель вгорі).
  Тут є лише короткий опис базового встановлення 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.2 та 2.4.
  Хоча є певні причини для вибору однієї чи іншої версії, але 2.4 є зараз
  найновішою та рекомендованою. Тим не менш, наведені тут інструкції мають
  працювати для обох версій. Варто зазначити, що Apache httpd 2.2 офіційно не
  підтримується і для нього не випускаються нові розробки чи виправлення.
 </p>
 
 <ol type="1">
  <li class="listitem">
   <p class="para">
    Завантаживши HTTP-сервер Apache за посиланням вище, його необхідно
    розпакувати:
   </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 2 з підтримкою 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>, PHP CLI та
    інші.
   </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">
    Можна редагувати файл <code class="literal">.ini</code>, додаючи потрібні опції PHP.
    Для розміщення <var class="filename">php.ini</var> в іншому місці
    використовується опція
    <code class="literal">--with-config-file-path=/some/path</code> на 5-му кроці.
   </p>
  
   <p class="para">
    Якщо буде обрано <var class="filename">php.ini-production</var>, краще прочитати
    список відмінностей між файлами <code class="literal">.ini</code>, щоб розуміти як це
    вплине на поведінку PHP.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Відредагуємо <var class="filename">httpd.conf</var>, щоб завантажувався модуль
    PHP. Шлях, який зазначено праворуч від оператора
    <code class="literal">LoadModule</code>, повинен вказувати на розташування модуля PHP
    у системі. Згадана раніше команда <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. Наприклад, з
    <code class="literal">.php</code>. Замість того, щоб використати лише директиву
    Apache <code class="literal">AddType</code>, краще не дати обробити через PHP
    потенційно небезпечні завантаження та створені файли на кшталт
    <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">
    Для обробки <code class="literal">.phps</code> через &quot;php source filter&quot; з метою
    показувати їх вміст з підсвічуванням синтаксису, використовується таке:
   </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">
    Не слід вмикати &quot;php source filter&quot; у виробничому середовищі, де він може
    розкрити конфіденційну або іншу важливу інформацію, розміщену в коді.
   </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>. Звичайно, є значно більше
  параметрів, доступних для Apache та PHP. Більше інформації можна отримати,
  ввівши в консолі <strong class="command">./configure --help</strong> в кореневих теках
  початкових файлів.
 </p>

 <p class="para">
  Apache можна зробити багатопотоковим, вибравши <var class="filename">worker</var>
  MPM замість стандартного <var class="filename">prefork</var> MPM під час збирання
  Apache, додавши наступний параметр до <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> значно детальніше
  розкрита ця тема.
 </p>
 <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
  <p class="para">
   У розділі <a href="faq.installation.php#faq.installation.apache.multiviews" class="link">ЧаПи про Apache
   MultiViews</a> обговорено використання цієї опції разом з PHP.
  </p>
 </p></blockquote>
 <blockquote class="note"><p><strong class="note">Зауваження</strong>: 
  <p class="para">
   Щоб зібрати версію багатопотокового Apache, цільова система повинна мати
   підтримку потоків. В такому разі PHP потрібно також збирати з Zend Thread
   Safety (ZTS). Цю конфігурацію підтримують не всі розширення. Рекомендовано
   встановлювати Apache зі стандартним модулем <var class="filename">prefork</var> MPM.
  </p>
 </p></blockquote>
</div><?php manual_footer($setup); ?>