php -c で ini ファイルを指定するとデフォルトのものは読み込まれない

例によって twitter ログからサルベージ。ネタが混んでいたので1月29日のネタを2月1日分として書く。

11:10:39 >wtnabe< また ini_get( 'include_path' ) で取れる値が予想しない
         ものになって苦しんでいる。なんでぢゃっ。
11:21:57 >wtnabe< どっから出てくるんだろう、この値は
11:25:35 >wtnabe< php -c で ini ファイルを指定する場合、システムデフォ
         ルトの php.ini は読まないのか。その中に include_path が書かれ
         ていない場合は恐らくコンパイル時に決定する include_path が出て
         きてしまうと。
11:26:35 >wtnabe< ということはスクリプトの動作時に include_path にパス
         を追加しようにも基準のパスが狂っていてどうにもならない場合があ
         ると。

何をしようとしていたかというと、include_path を補正してコマンドラインからテストを動かすための ini ファイルを生成して、それを食わせてテストを動かすということをよくやるのですが、思わぬ値が返ってきて混乱していたのでした。

今にして思うと -c で読み込むべき ini ファイルを指定しているのに、指定していないファイルを読み込んでしまうとしたらそれは明らかにおかしい。当たり前っちゃ当たり前なんだけど、値が空になるのではなく予想外な値が出てきたところで混乱したらしい。

ちなみに help ではこんな感じに書かれている。

$ php --help
Usage: php [options] [-f] <file> [--] [args...]
...
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'

あ、ini ファイル名だけでなくディレクトリ名でもイケるのか。

※ おまけで。このときは Linux 上で作業していたのですが、カレントディレクトリの php.ini ファイルがどうしても読み込まれてしまうようなので php.my.ini という名前のファイルを生成するようにしました。でも今、手元の OSX では再現しません。なんなんだろう。マニュアルを読むとカレントディレクトリの方を後で探しに行くはずなので、勝手に読まれることはなさそうなんですけどね…。

PHP: 設定ファイル - Manual

More