PHPの設定ファイルを作って配置してみる仕事で使える魔法のLAMP(35)

前回の設定でPHPスクリプトを実行できるようになりました。今回は、PHPの動作を制御する設定ファイルの作り方と配置する場所について解説します。(編集部)

» 2011年12月16日 00時00分 公開
[山口晴広株式会社イメージズ・アンド・ワーズ]

PHPを使うには設定ファイルも必要

 前回PHPApache HTTP Server(以下Apache)に組み込み、動作を確認しました。これでPHPのコードをApacheで実行する環境ができました。しかし、これだけでは「取りあえず動く」という程度です。本格的に使うには、PHPの実行時設定を制御できるようにする必要があります。

 PHPには、実行時の設定があるということを第31回でも軽く触れています。この設定はPHPの振る舞いを調整するためのものです。設定項目の多くはアプリケーションの開発者がコントロールすべきものですが、その設定方法はインフラ担当者も把握しておく必要があります。PHPのアプリケーションによっては、設定が少し変わるだけで動作しないということもあります。こういうときに正しく設定するための知識を得ておくことは悪いことではありません。

 PHPの実行時設定をするには、Apache同様にディレクティブと呼ぶ設定項目に、文字列や真偽(On/Off)値を与えます。そして、Apache組み込みのPHPには2つの設定方法があります。1つは設定ファイルです。これはコマンドライン版のPHPでも利用できる設定方法です。もう1つはApacheの設定ファイル内で、Apacheの設定ディレクティブを使って設定する方法です。

設定ファイルでPHPの動作を設定

 ここでいう設定ファイルとは、Apacheの設定ファイルではなく、PHP独自の設定ファイルです。PHPではINIファイルとも呼び、ファイル名は通常「php.ini」で、この名前を変えることはほとんどありません。

 設定ファイルを作ったら、そのファイルの位置をPHPに伝えなければいけません。PHPには、設定ファイルを求めて探索するディレクトリというのがいくつかあります。例えば、本連載のインストール方法では、「/opt/php-5.3.8/lib」がそのディレクトリになっています。

 このディレクトリに「php.ini」というファイル名で設定ファイルを置くと、PHPが自動的に設定ファイルを見つけ出し、設定を読み込んで、各種設定を有効にします。また、Apacheに組み込んだPHPの場合、ファイル名を「php-apache2handler.ini」とすると、このファイルを優先して読み込みます。この仕組みを利用することで、コマンドライン版などと設定ファイルを使い分けることもできます。

 PHPが設定ファイルを求めて探索するディレクトリにはほかに、明示的に指定したディレクトリと、カレントディレクトリがあります。Apacheに組み込んだ場合は、Apacheがカレントディレクトリをルートに移動しますので、ルートディレクトリとなります。

 どのディレクトリを使っても同じ結果になりますが、安全に運用することを考えると、設定ファイルを置く場所は、明示的に指定することをお勧めします。また、意図しない設定ファイルが読み込まれることがないように、ルートディレクトリと「/opt/php-5.3.8/lib」には設定ファイルを置かないようにすべきでしょう。

 インストール直後の状態では「/opt/php-5.3.8/lib」には設定ファイルは存在しません。ルートディレクトリにわざわざ設定ファイルを置くことも普通はないでしょう。従って、ディレクトリをユーザー自身が明示的に指定し、そこに設定ファイルを置けばよいことになります。

 設定ファイルを設置するディレクトリを指定する方法を説明します。まずは、Apacheに組み込んだPHPの場合からです。これにはApacheの設定ディレクティブを使います。次の1行を「/srv/httpd/apache.conf」に追加します。Apacheの設定ファイルのレイアウトについては第23回で解説しています。

PHPIniDir /srv/httpd

 この「PHPIniDir」ディレクティブは、バーチャルホスト内部では使えません。正確に言えば使えますが、バーチャルホストごとに設置ディレクトリを分けることができませんので、バーチャルホスト外で設定することになります。

 ちなみに環境変数PHPRCでもディレクトリを明示できますが、Apache設定ファイルの方が優先されますので「PHPIniDir」を使うのがよいでしょう。

 なお、コマンドライン版のPHPでは、「-c ディレクトリ」で指定可能です。あるいは「-c 設定ファイル」で設定ファイルを直接指定することもできます。

実際に設定ファイルを作ってみる

 それではPHPの設定ファイルを作成してみましょう。拡張子からINI形式と分かります。INI形式とは、次のような形式のテキストです。

; コメント
[セクション名1]
キーワード1 = 値1
キーワード2 = 値2
 
[セクション名2]
キーワード3 = 値3

 行頭にセミコロンがあるとその行はコメントとして無視されます。キーワードの部分がPHPの設定ディレクティブになります。[]でくくられたセクション名が現れると、次のセクション名が出てくるまでの記述内容がそのセクション内にあるものと解釈されます。ただ、Apacheに組み込んだPHPにおいてはセクションに意味はありませんので、セクション名の宣言はなくても特に問題ありません。

 それでは実際に「/srv/httpd/php.ini」として設定ファイルを作成します。今回は、PHPの使用メモリを制限する「memory_limit」ディレクティブを使ってみます。初期状態では128Mbytesとなっていますので、これを16Mbytesにしてみましょう。ファイルの内容は次のようになります。

memory_limit = 16M

 Apache設定ファイルへの「PHPIniDir」追加と、PHP設定ファイルの作成を終えたら、Apacheを再起動します。

sudo /opt/apache-httpd-2.2.21/bin/apachectl graceful

 なお、PHPの設定ファイルは、Apacheの起動時と再起動時にだけ読み込まれます。PHPの設定ファイルを書き換えて、その内容を有効にするには再起動が必要になるということです。

 指定したとおりの設定になっていることを「phpinfo()」で確認しましょう。前回同様、Webブラウザ経由で確認します(図1図2

図1 実際にPHPが読み込んだ設定ファイルの名前を確認できる。前回はここは空欄だった。 図1 実際にPHPが読み込んだ設定ファイルの名前を確認できる。前回はここは空欄だった。クリックすると拡大
図2 実際に設定した値が入っている。 図2 実際に設定した値が入っている。クリックすると拡大

 これで無事設定ができました。

 最後に、設定ファイルの振る舞いについていくつか補足します。Apacheでは、存在しない設定ディレクティブを使おうとするとエラーになりますが、PHPではエラーになることはありません。ディレクティブの名前を間違えて設定しても気付かない、ということはよくあります。設定を変更したら。常に「phpinfo()」で確認するようにしましょう。

 設定の値の部分を「${キーワード}」とすると、その部分がそのキーワードの値に置き換わります。同じ値を繰り返し使いたいときなどで便利ですが、PHPの設定ファイルではあまり使い道がありません。こういう置き換え方法があるということを頭の隅に入れておく程度でよいでしょう。

 次回は、Apacheの設定ファイルでPHPを設定する方法を解説します。

著者紹介

株式会社イメージズ・アンド・ワーズ
代表取締役
山口晴広(やまぐち はるひろ)



「仕事で使える魔法のLAMP」バックナンバー

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。