Apacheの設定ファイルでPHPの設定を変える:仕事で使える魔法のLAMP(36)
前回はPHPの設定ファイルであるphp.iniファイルの書き方を解説しました。今回は、ApacheからPHPの設定を変更する方法を解説します。(編集部)
なぜApacheの設定ファイルから?
前回、PHPには実行時の設定があることと、その設定をPHPの設定ファイル(以下php.iniファイル)で変更する方法を解説しました。今回はApache HTTP Server(以下Apache)の設定ファイルから、PHPの設定を変更する方法を紹介します。「php.iniファイルがあれば十分ではないか」と思われる方もいると思いますが、もちろんApacheの設定ファイルからPHPの設定を変更するメリットがあるのです。
Apacheの設定ファイルでPHPの設定を変えるということは、Apacheの設定ディレクティブを使って値を設定することになります。関係するディレクティブは4つあります。まずは基本的な「PHP_Value」から見ていきましょう。
「PHP_Value」の使い方は次の通りです。
PHP_Value PHP設定ディレクティブ1 設定値1 PHP_Value PHP設定ディレクティブ2 設定値2 ...
php.iniファイルと違って、PHP設定ディレクティブと値の間に等号(=)を置く必要はありません。複数の項目を設定したいときは「PHP_Value」を設定したい項目の数だけ記述します。存在しないディレクティブを指定しても特にエラーにならないのはphp.iniファイルと同様です。
前回、PHPの使用メモリを16Mにする制限する「memory_limit」の例について説明しました。これと同じことをPHP_Valueを使って設定するなら以下のようになります。
PHP_Value memory_limit 16M
第21回で解説したように、Apacheの設定ディレクティブは、どのセクションに置くかで影響範囲が異なります。また、ディレクティブによっては使えないセクションがあります。例えばサーバ全体に影響する設定は、バーチャルホストやディレクトリ内部では使えないようになっています。
「PHP_Value」は、基本的にどのセクションでも使えます。これは、バーチャルホストごと、あるいはディレクトリごとに、PHPの実行時設定を変えられるということを意味しています。
php.iniファイルを利用した設定は、サーバ全体に影響してしまいますが、Apache経由で設定すればURLに応じて細かく制御できるのです。.htaccessファイルで設定することも可能です。これはphp.iniファイルにはないメリットです。
php.iniとApacheどっちが優先?
同じ設定をphp.iniファイルと、Apache設定ファイルに記述したらどうなるでしょうか。実際に確認してみましょう。先ほどと同じく「memory_limit」で試してみます。php.iniファイルでは32M、Apacheの設定ファイルでは16Mと設定してみます。こう設定して「phpinfo()」を実行した結果が図1です。
表の左右で結果が異なっています。左右の欄はそれぞれ「Local Value」と「Master Value」です(図2)。
Master Valueはphp.iniファイルの内容を反映しています。こちらは起動時にphp.iniファイルが読み込まれた後は変わりません。Local Valueは、Apacheの設定で上書きした値です。
PHPの設定として有効なのはLocal Valueです。つまり、Apacheから設定した内容が優先するということです。なお、PHPのプログラムから設定を書き換えることもできますが、その場合の設定値もLocal Valueになります。
この振る舞いから、設定の使い分けが見えてきます。サーバ全体で標準設定にしておきたい値はphp.iniファイルで設定し、URLごとに細かく変えたいような設定はApache経由の設定とするのがよいでしょう。
PHPの設定の種類
Apacheの設定ディレクティブがセクションによって制限があるのと同様に、PHPのディレクティブにも同じような制限があります。制限の種類は4種類。PHP_INI_SYSTEM、PHP_INI_PERDIR、PHP_INI_ALL、PHP_INI_USERです。この文字列は、設定ディレクティブのマニュアルで確認できます(図3)。
PHP_INI_SYSTEMのディレクティブは、基本的にphp.iniファイルで設定するものです。Apacheでも設定できますが「PHP_Value」では設定できません。「PHP_Admin_Value」を使う必要があります。ディレクトリごとの変更や、PHPプログラムからの変更はできません。
また、「PHP_Admin_Value」はPHP_INI_SYSTEM以外のディレクティブでも使えます。ただしこれを使うと、その設定は一切上書きできなくなります。設定をロックする必要がある場合などに用います。
ただし、その設定の影響範囲については注意が必要です。あるディレクトリで設定にPHP_Admin_Valueを使うと、そのサブディレクトリもすべて上書きができなくなりますが、それより上位のディレクトリでは書き換え可能です。
PHP_INI_PERDIRはディレクトリごとの設定変更が可能なディレクティブです。.htaccessによる変更もできます。php.iniファイルでの設定ももちろん可能です。しかし、PHPプログラムからの変更はできません。
PHP_INI_ALLのディレクティブはどこでも設定できます。PHPプログラムからも設定可能です。PHP_INI_USERは、現在マニュアルを見ても1カ所にしか記述がないのですが、PHPプログラムからの設定だけを許すという意味になります。
ApacheやPHPプログラム経由で設定を変更するときは、これらの種別に気を付けましょう。変更したつもりが変更できていないということもあります。
別の観点での分類もあります。設定の値の型です。文字列型や数値型、真偽(On/Off)型などがあります。php.iniファイルでは、型に従って文字列を記述すればよいのですが、Apacheでは型が真偽値の場合「PHP_Value」ディレクティブが使えません。真偽値に限っては「PHP_Flag」または「PHP_Admin_Flag」で設定する必要があります。
設定内容が真偽値かどうかは、各ディレクティブのドキュメントを確認すれば分かります(図4)。
図4で「boolean」となっているものが真偽値になります。例えば「short_open_tag」をApacheでオフにするなら、次のように設定します。
PHP_Flag short_open_tag Off
図3のディレクティブの一覧には、各ディレクティブのデフォルト値が示されていますが、OnやOffといった形では示されていません。「boolean」型のディレクティブでは、"1"がOnで"0"がOffとなります。
Apacheでの設定については以上です。次回は設定しておいた方がいいディレクティブをいくつか取り上げて解説します。
- CMakeでMySQLをビルドしてみる
- MySQLのビルドに欠かせないCMakeを準備する
- いよいよMySQL編、ソースからビルドすべきか?
- PHPでセッションを利用するための設定
- クライアントがアクセスできる範囲を制限する
- エラーメッセージをどう扱うか?
- ファイルのアップロードを制限する
- リクエストデータを受け取る変数の扱い
- マジッククオート機能には頼らない
- 安全を考えてPHPの実行時設定を調整する
- Apacheの設定ファイルでPHPの設定を変える
- PHPの設定ファイルを作って配置してみる
- PHPスクリプトを実行できるようにする準備
- PHPエクステンション組み込みの仕上げ
- 単純なデータを管理するDBMを使えるようにする
- エクステンションの組み込み状況を確認する
- PHPでデータベースを使う準備をする
- XMLを処理できるようにする
- エクステンションを有効にしてビルドに挑戦!
- PHPテスト失敗の原因を追究する
- 早速PHPをビルド! そしてテスト!
- PHP編に突入! まずはソースをダウンロード
- 設定ファイルを作成してApacheを動作させる
- 設定ファイルや公開ドキュメントの配置を考える
- 1つのサーバに複数の仮想サーバ?
- Apacheの設定ファイルを記述する前に
- サードパーティのApacheモジュールをビルドする
- 認証DBにアクセスするライブラリを組み込む
- Apache同梱ソフトウェアに引数を渡してビルド
- OpenSSLをビルドしてApacheで利用する
- proxyやsslのモジュールを使ってみる
- ライブラリが足りなくてビルドできないときは?
- Apache HTTP Serverのビルドを始めよう
- configureでソフトウェア固有の設定を変更してみる
- configureの設定を変更してみる
- 配布パッケージの中身と、configureの役目を知る
- ダウンロードファイルが真正なものであるかを確認
- Makefileをいろいろ書き換えながらビルドしてみよう
- makeを使ってソフトウェアをビルドしてみよう
- ダイナミックリンクとスタティックリンク
- 「ビルド」という作業は何を指しているのか
- 公開鍵認証でsshを安全に使う
- sshを便利にする公開鍵暗号
- アクセス制限の設定とCentOSのアップデート
- サーバに接続して、一般ユーザーのアカウントを作る
- LAMP環境、自分で作りませんか?
Copyright © ITmedia, Inc. All Rights Reserved.