このセクションでは、PHPを Unix システム上の Apache 2.x にインストールする際の 手引きと注意事項について説明します。
Apache2 の MPM マルチスレッドモードを実運用環境で使用することは推奨されません。 代わりに prefork MPM を使ってください。これは Apache 2.0 および 2.2 におけるデフォルトの MPM です。prefork MPM を使う理由については、 マルチスレッド版 MPM の Apache2の FAQ エントリを参照してください。
» Apache ドキュメンテーション を参照し、Apache 2.x の基本的な事項について理解しておくことを強く推奨します。 Apache のインストールオプションについてのより詳しい情報が得られます。
最新バージョンの Apache HTTP Server を » Apache ダウンロードサイト からダウンロードし、上述のいずれかのバージョンの PHP を用意してください。 この手引きでは Apache 2.x で PHP を動作させるための 基本的な部分しかカバーしていません。さらに詳しい情報については、» Apache ドキュメンテーション を参照してください。 情報が古く不正確になってしまうため、以下では詳細なバージョン番号は 記述されていません。'NN' という文字列をご使用のバージョンに適宜置き換えて ください。
現在、Apache 2.x には 2.0 と 2.2 の二種類があります。 どちらを選ぶにしてもそれなりの理由があるでしょうが、 2.2 が現在の最新版です。もし選択の余地があるのなら 2.2 を使うことを推奨します。しかし、この例では 2.0 と 2.2 のどちらでも使えるようにしています。
Apache HTTP server を上のサイトから取得して展開します。
gzip -d httpd-2_x_NN.tar.gz tar -xf httpd-2_x_NN.tar
同じく、PHP のソースを取得して展開します。
gunzip php-NN.tar.gz tar -xf php-NN.tar
Apache をビルドしてインストールします。Apache のビルドに関する詳細は Apache のドキュメントを参照ください。
cd httpd-2_x_NN ./configure --enable-so make make install
以上で Apache 2.x.NN が、モジュールの動的ロードとデフォルトの MPM(マルチプロセッシングモジュール)である prefork が有効になった 状態で、/usr/local/apache2 にインストールされます。 インストールが正常か調べるには、以下のようにして Apache サーバーを立ち上げます。
/usr/local/apache2/bin/apachectl start
/usr/local/apache2/bin/apachectl stop
PHP の configure を行います。ここでは、様々なオプションを指定し、 特定の拡張モジュールを有効にするといったカスタマイズを行います。 指定可能なオプションの一覧は、./configure --help を実行すると得られます。 以下に、Apache 2 と MySQL のサポートを有効にする、簡単な設定例を示します。
上で説明したように Apache をソースからビルドした場合は、 apxs のパスも下の例のとおりになっているでしょう。しかし、 もし別の方法で Apache をインストールした場合は apxs のパスを適切に変更しなければなりません。 ディストリビューションによっては、apxs の名前が apxs2 と変更されていることもあるので注意しましょう。
cd ../php-NN ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql make make install
configure オプションを変更して再インストールする場合は、 configure, make, make install の手順を繰り返さなければなりません。 共有モジュールとしてコンパイルされた PHP を有効にするには Apache を再起動するだけです。Apache の再コンパイルは不要です。
特に断りがない限り、'make install' は、PEAR、phpize のような様々な 関連ツール、CLI 版 PHP などもインストールすることに注意してください。
php.ini ファイルを設定する
cp php.ini-development /usr/local/lib/php.ini
PHP の実行時設定を変更するには、.ini ファイルを編集します。 このファイルを他の場所に置きたい場合は、手順 5 で、 オプション --with-config-file-path=/path を使用します。
php.ini-development ではなく、php.ini-production を使用する場合は、PHP の 動作が変化しますので、ファイル中に記載されている変更点の一覧を確認する ようにしてください。
httpd.conf を編集し、PHP の共有モジュールをロードするよう設定します。 LoadModule 命令の右側に記述するパスは、システムの PHP 共有モジュール を指している必要があります。上記の make install により既にこの設定は 追加されている場合もありますが、確認が必要です。
LoadModule php5_module modules/libphp5.so
Apache が特定の拡張子のファイルを PHP としてパースするよう設定します。 たとえば、Apache が拡張子 .php のファイルを PHP としてパースするようにします。 単に Apache の AddType ディレクティブを使うだけではなく、 悪意を持ってアップロード (あるいは作成) された exploit.php.jpg のようなファイルが PHP として実行されてしまわないようにしたいものです。 この例では、PHP としてパースさせたい任意の拡張子を追加していくだけです。 ためしに .phtml を追加してみましょう。
<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>
あるいは、拡張子 .php, .php2, .php3, .php4, .php5, .php6, そして .phtml のファイルだけを PHP として実行したいは、このようにします。
<FilesMatch "\.ph(p[2-6]?|tml)$"> SetHandler application/x-httpd-php </FilesMatch>
拡張子 .phps のファイルを php ソースフィルタに処理させて 構文ハイライトつきのソースコードとして表示させるには、このようにします。
<FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source </FilesMatch>
mod_rewrite を使うと、.phps ファイルに名前を変えたりコピーしたりしなくても 任意の .php ファイルを構文ハイライトつきのソースコードとして表示させることができます。
RewriteEngine On RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]
php ソースフィルタは、実運用環境では無効にしておかなければなりません。 有効にしてしまうと、ソースコードに埋め込まれた機密情報や重要情報が漏れてしまう危険があります。
Apache サーバーを、通常の手順通り、起動させます。
/usr/local/apache2/bin/apachectl start
OR
service httpd restart
上記の手順で、Apache2 ウェブサーバー上で SAPI モジュールとして PHP を動作させることができます。もちろん、Apacheと PHP の双方とも、もっと多くの configure オプションを指定することが出来ます。 詳しい情報を得るには、ソースツリーディレクトリで ./configure --help を実行してください。
マルチスレッド版の Apache をビルドするには、Apache のビルド時に標準の prefork MPM ではなく worker MPM を選択します。 そのためには、先ほどの手順 3 のところで ./configure の引数に次のオプションを追加します。
そうすることで何がどのようになるのかをきちんと認識したうえで、これを行わなければなりません。 詳細については Apacheドキュメントの » マルチプロセッシングモジュール (MPM) を参照してください。
注意:
Apache MultiViews FAQ では、PHP でマルチビューを使う方法について解説しています。
注意:
マルチスレッド版の Apache をビルドするには、ターゲットシステムがスレッドに対応していなければなりません。 その場合は、PHP についても実験的な Zend Thread Safety (ZTS) でビルドしなければなりません。 この構成では使用できない拡張モジュールもあります。推奨される方法は、Apache をデフォルトの prefork MPM モジュールでビルドすることです。