PHP言語は他の多くの言語と異なり、言語の設定が存在します。もちろんPHPの関 数を通じてプログラムから設定を変更することもできますが、一部の設定項目で サポートされていないものもあり注意が必要です。このTipsでは、設定内容の種 類やその設定方法について説明します。

設定項目は、言語(コア)機能の設定と、各モジュール(エクステンション)機 能の設定の2種類に大別されます。設定項目はディレクティブと呼ばれており、 合計すると非常に多くのディレクティブが用意されています。

ディレクティブの一覧は、PHPのマニュアルから参照することができます。名称 にドットが含まれているものはエクステンションの設定項目なので、詳しくはエ クステンション別のマニュアルを確認してください。コア機能のディレクティブ については、コアphp.iniディレクティブに関する説明に詳しく記載されています。

大きく分けて以下の設定方法があります:

  • 1. php.iniに記述する
  • 2. httpd.confに記述する
  • 3. .htaccessに記述する
  • 4. Windowsレジストリに記述する
  • 5. ini_set()関数を使う

php.iniでは、「ディレクティブ名=設定値」という形式で記述して記述しま す。使われているphp.iniのパスは、phpinfo()関数から調べられます。

php.iniを使う場合、SAPIごとにファイルを分けることもできます。たとえば、 php-cli.iniとするとCLI用のphp.iniが読み込まれます。使用しているSAPI名は php_sapi_name()関数より調べることができます。

php.iniと別のファイルを分けることもできます。PHPのconfigure時に、--with- config-file-scan-dirを指定することで、指定したディレクトリにあるファイル も、php.iniと共に読み込まれます。これにより、SAPI毎、サーバー毎にphp.ini を分けることが可能になります。(php.iniの詳細はに詳しく記述されています)

httpd.conf、.htaccessに記述する場合、「php_value ディレクティブ名 値」形 式で記述します。また、ブール値の場合は「php_flag ディレクティブ名 値」と 記述します。ディレクトリ毎、バーチャルホスト毎に設定を変える場合に便利です。

Windowsを使っている場合は、レジストリにも指定できます。詳しくは、設定を変更するにはに記述されています。

PHPプログラム上でも設定できます。この場合は、ini_set()関数を使用します。 また、値を元に戻すためのini_restore()関数なども用意されています。詳しく は、各関数のマニュアルを参照してください。

設定方法を紹介しましたが、各設定方法で指定できるディレクティブに制限があ ることに注意が必要です。具体的には、各項目にはPHP_INI_ALL、 PHP_INI_PERDIR、PHP_INI_SYSTEMの3種類のレベルが用意されており、 PHP_INI_ALLは1.から5.のすべて、PHP_INI_PERDIRは1.から3.、PHP_INI_SYSTEMは1.と 2.で設定できます。各ディレクティブがどのレベルに対応するかは、ディレク ティブの一覧ページを参照すると良いでしょう。

本来であれば全てスクリプトから操作できる方が良いのでしょうが(セキュリ ティ設定については別ですが)、そういう訳にもいかなさそうです。私たちは、 基本的にはスクリプト上で設定を行い、やむを得ない場合はhttpd.conf内(実際 はIncludeで読み込んだファイル)にて記述を行っています。



(アシアル 田中正裕)


この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。