<?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 => 'ja',
  ),
  'this' => 
  array (
    0 => 'install.unix.apache2.php',
    1 => 'Apache httpd 2.x (Unixシステム用)',
    2 => 'Apache httpd 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' => 'ja',
    '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 httpd 2.x (Unixシステム用)</h2>

 <p class="simpara">
  このセクションでは、PHP を Linux および Unix 系のシステム上の
  Apache HTTP Server 2.x にインストールする際の手引きと注意事項について説明します。
 </p>

 <div class="warning"><strong class="warning">警告</strong>
  <h1 class="title">mod_php ではなく PHP-FPM を使いましょう</h1>
  <p class="simpara">
   <strong>新規のインストールで <code class="literal">mod_php</code>
   を使ってはいけません。</strong>
   このページの手順は、過去の経緯を知るための参考として、また PHP を Apache httpd
   のプロセスに直接組み込むことがどうしても必要な、まれなケースのために残されています。
  </p>
  <p class="simpara">
   最近のデプロイ環境であれば、どんな場合でも
   <a href="install.fpm.php" class="link">PHP-FPM</a> (FastCGI Process Manager)
   を Apache httpd の <code class="literal">mod_proxy_fcgi</code>
   モジュールと組み合わせて使いましょう。PHP-FPM を使うと、
   リソース管理やプロセスの分離がより優れたものになり、
   Apache httpd を再起動せずに PHP だけを再起動できるようになります。
   また、Apache httpd の <code class="literal">event</code> MPM (Apache httpd 2.4
   以降のデフォルト) とも互換性があります。
   主要な Linux ディストリビューションは、この構成をデフォルトとして提供しています。
  </p>
  <p class="simpara">
   <code class="literal">mod_php</code> による方式では、PHP が Apache httpd
   のすべてのワーカープロセスに直接組み込まれます。
   PHP をスレッドセーフ (<code class="literal">--enable-zts</code>) でコンパイルしていない限り、
   <code class="literal">mod_php</code> は <code class="literal">prefork</code> MPM を必要とし、
   同時実行性が大きく制限されます。それでも <code class="literal">mod_php</code>
   を使う場合は、パフォーマンスとセキュリティの面でどんな影響があるのかを
   完全に理解しておく必要があります。
  </p>
 </div>

 <p class="simpara">
  <a href="http://httpd.apache.org/docs/current/" class="link external">&raquo;&nbsp;Apache ドキュメンテーション</a>
  は、Apache httpd 2.x サーバーに関する最も信頼できる情報源です。
  Apache httpd のインストールオプションについてのより詳しい情報も、
  そこで得られます。
 </p>

 <p class="simpara">
  最新バージョンの Apache httpd を
  <a href="http://httpd.apache.org/" class="link external">&raquo;&nbsp;Apache ダウンロードサイト</a>
  からダウンロードし、上述のいずれかのバージョンの PHP を用意してください。
  この手引きでは Apache httpd 2.x で PHP を動作させるための
  基本的な部分しかカバーしていません。さらに詳しい情報については、<a href="http://httpd.apache.org/docs/current/" class="link external">&raquo;&nbsp;Apache ドキュメンテーション</a> を参照ください。
  情報が古く不正確になってしまうため、以下では詳細なバージョン番号は
  記述されていません。&#039;NN&#039; という文字列をご使用の Apache httpd
  のバージョンに適宜置き換えてください。
 </p>

 <p class="simpara">
  ここで説明する手順は Apache httpd 2.4 を対象としています。
  Apache httpd がサポートしているリリースブランチは 2.4 だけです。
  それより前のバージョン (2.2 以前) はサポートが終了しているため、
  使ってはいけません。
 </p>

 <blockquote class="note"><p><strong class="note">注意</strong>: 
  <p class="simpara">
   PHP 8.4.0 以降、apache2handler SAPI は Apache 2.4 以降を必要とします。
   EOL を迎えた Apache 2.0 および 2.2 のサポートは削除されました。
  </p>
 </p></blockquote>

 <ol type="1">
  <li class="listitem">
   <p class="simpara">
    Apache httpd を上のサイトから取得して展開します。
   </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="simpara">
    同じく、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="simpara">
    Apache httpd をビルドしてインストールします。Apache httpd のビルドに関する詳細は
    Apache httpd のドキュメントを参照ください。
    PHP をスレッドセーフ (<code class="literal">--enable-zts</code>) でコンパイルしていない限り、
    <code class="literal">mod_php</code> は <code class="literal">prefork</code> MPM
    を必要とすることに注意してください。かわりに PHP-FPM を使うつもりなら (推奨)、
    デフォルトの <code class="literal">event</code> MPM をそのまま使い、
    <a href="install.fpm.php" class="link">PHP-FPM のインストール手順</a>
    まで読み飛ばしてかまいません。
   </p>

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

  <li class="listitem">
   <p class="para">
    以上で Apache httpd 2.x.NN が、モジュールの動的ロードと
    prefork MPM が有効になった状態で、/usr/local/apache2 にインストールされます。
    インストールが正常か調べるには、以下のようにして Apache httpd サーバーを立ち上げます。

    <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="simpara">
    PHP の configure を行います。ここでは、様々なオプションを指定し、
    特定の拡張モジュールを有効にするといったカスタマイズを行います。
    指定可能なオプションの一覧は、<strong class="command">./configure --help</strong> を実行すると得られます。
    以下に、Apache httpd と MySQL のサポートを有効にする、簡単な設定例を示します。
   </p>

   <p class="simpara">
    上で説明したように Apache httpd をソースからビルドした場合は、
    <strong class="command">apxs</strong> のパスも下の例のとおりになっているでしょう。しかし、
    もし別の方法で Apache httpd をインストールした場合は <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="simpara">
    configure オプションを変更して再インストールする場合は、
    <strong class="command">configure</strong>, <strong class="command">make</strong>,
    <strong class="command">make install</strong> の手順を繰り返さなければなりません。
    共有モジュールとしてコンパイルされた PHP を有効にするには
    Apache を再起動するだけです。Apache httpd の再コンパイルは不要です。
   </p>

   <p class="para">
    特に断りがない限り、<strong class="command">make install</strong> は、<a href="https://pear.php.net/" class="link external">&raquo;&nbsp;PEAR</a>, <a href="install.pecl.phpize.php" class="link">phpize</a> のような様々な 
    関連ツール、CLI 版 PHP などもインストールすることに注意してください。
   </p>
  </li>

  <li class="listitem">
   <p class="simpara">
    <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="simpara">
    PHP の実行時設定を変更するには、<code class="literal">.ini</code> ファイルを編集します。
    <var class="filename">php.ini</var> ファイルを他の場所に置きたい場合は、手順 5 で、
    オプション <code class="literal">--with-config-file-path=/some/path</code> を使用します。
   </p>

   <p class="simpara">
    <var class="filename">php.ini-development</var> ではなく、<var class="filename">php.ini-production</var> を使用する場合は、PHP の
    動作が変化しますので、ファイル中に記載されている変更点の一覧を確認する
    ようにしてください。
   </p>
  </li>

  <li class="listitem">
   <p class="simpara">
    <var class="filename">httpd.conf</var> を編集し、PHP の共有モジュールをロードするよう設定します。
    <code class="literal">LoadModule</code> 命令の右側に記述するパスは、システムの PHP 共有モジュール
    を指している必要があります。上記の <strong class="command">make install</strong> により既にこの設定は
    追加されている場合もありますが、確認が必要です。
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">LoadModule php_module modules/libphp.so</pre>
</div>
    </div>

   </div>
  </li>

  <li class="listitem">
   <p class="simpara">
    Apache httpd が特定の拡張子のファイルを PHP としてパースするよう設定します。
    たとえば、Apache httpd が拡張子 <code class="literal">.php</code> のファイルを PHP としてパースするようにします。
    単に <code class="literal">AddType</code> ディレクティブを使うだけで済ませるのではなく、
    悪意を持ってアップロード (あるいは作成) された <var class="filename">exploit.php.jpg</var>
    のようなファイルが PHP として実行されてしまわないようにしたいものです。
    この例では、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="simpara">
    あるいは、拡張子 <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>
    のファイルだけを PHP として実行したい場合は、以下のようにします。
   </p>

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

   </div>

   <p class="para">
    拡張子 <code class="literal">.phps</code> のファイルを php ソースフィルタに処理させて
    構文ハイライトつきのソースコードとして表示させるには、このようにします。
   </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="simpara">
    他にハンドラが見つからないときのデフォルトのハンドラとして PHP ファイルを使いたい場合
    （ルーティングエンジンを使うときなど）は、<code class="literal">FallbackResource</code> ディレクティブが使えます。
   </p>

   <p class="simpara">
    <code class="literal">SetHandler</code> ディレクティブはファイルが存在するかどうかにかかわらず適用され、
    <code class="literal">FallbackResource</code> はハンドラがまだ設定されていない場合にのみ適用されます。
    そのため、ファイルが存在する場合にのみハンドラが適用されるようにするには、
    <code class="literal">If</code> ディレクティブを使う必要があるかもしれません。
    こうすることで、<code class="literal">.php</code> で終わるものの、実際にはファイルが存在しないパスを
    <code class="literal">FallbackResource</code> で処理できるようになります。これは、エラー処理やルーティングに便利でしょう。
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">&lt;FilesMatch &quot;\.php$&quot;&gt;
    &lt;If &quot;-f %{REQUEST_FILENAME}&quot;&gt;
        SetHandler application/x-httpd-php
    &lt;/If&gt;
&lt;/FilesMatch&gt;
FallbackResource /index.php</pre>
</div>
    </div>

   </div>

   <p class="para">
    <code class="literal">mod_rewrite</code> を使うと、<code class="literal">.phps</code> ファイルに名前を変えたりコピーしたりしなくても
    任意の <code class="literal">.php</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="simpara">
    Apache httpd を、通常の手順通り、起動させます。
   </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="simpara">
  上記の手順で、Apache httpd ウェブサーバー上で
  <code class="literal">SAPI</code> モジュールとして PHP を動作させることができます。Apache httpd と PHP の双方とも、もっと多くの configure オプションを指定することが出来ます。
  詳しい情報を得るには、ソースツリーディレクトリで <strong class="command">./configure --help</strong> を実行してください。
 </p>

 <blockquote class="note"><p><strong class="note">注意</strong>: 
  <strong>MPM の互換性</strong><br />
  <p class="simpara">
   PHP を Zend Thread Safety (<code class="literal">--enable-zts</code>) でコンパイルしていない限り、
   <code class="literal">mod_php</code> は <code class="literal">prefork</code> MPM を必要とします。
   その理由については、<a href="faq.installation.php#faq.installation.apache2" class="link">マルチスレッド MPM
   の Apache httpd を使う場合</a>についての FAQ の項目を参照してください。
  </p>

  <p class="simpara">
   ディストリビューションが提供する <code class="literal">mod_php</code> パッケージのほとんどは
   ZTS でビルドされていないため、通常は <code class="literal">prefork</code> が必要になります。
   マルチスレッド MPM が必要な場合 (負荷がかかる状況ではパフォーマンスが向上するため推奨されます) は、
   かわりに <a href="install.fpm.php" class="link">PHP-FPM</a> と
   <code class="literal">mod_proxy_fcgi</code> を使いましょう。
  </p>
 </p></blockquote>

 <blockquote class="note"><p><strong class="note">注意</strong>: 
  <p class="simpara">
   <a href="faq.installation.php#faq.installation.apache.multiviews" class="link">Apache MultiViews FAQ</a> では、PHP でマルチビューを使う方法について解説しています。
  </p>
 </p></blockquote>
</div><?php manual_footer($setup); ?>