トップ «前の日記(2009-01-20) 最新 次の日記(2009-01-23)» 編集

2009-01-21 [長年日記]

_ カレントディレクトリの php.ini は勝手に読み込まれる

PHP、またか。

php-cli は -c オプションで ini ファイルを指定することができる。

$ php -h
Usage: php [options] [-f] <file> [--] [args...]
       php [options] -r <code> [--] [args...]
       php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
       php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
       php [options] -- [args...]
       php [options] -a

  -a               Run interactively
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
...

まぁこれは知ってたんだけど、今日ビックリしたのは

-c で指定しなくてもカレントディレクトリの php.ini ファイルは勝手に読み込まれてしまう

こと。

最近、PHP のテストをよく cli でやっている*1んだけど、その関係で環境やサイトごとにまず ini ファイルを生成して、それを -c で読み込むようにしていた。Web ベースで言えば .htaccess を用意して切り替えるようなイメージ。

しかし、どうも意図しない設定変更がどこかで起きているケースが頻発して訳が分からなくなってしまった。

よくよく追いかけると -c で指定していないカレントディレクトリの php.ini ファイルの内容が反映されていた。これは試しに置いていただけで全然使うつもりがなく、

php -c ../../php.ini -f testfile.php

みたいに実行していたんだけど、カレントディレクトリのもので上書きされてどう逆立ちしてもテストが通らない状態になっていた。

仕方ないので生成する ini ファイルは

php.my.ini

という名前に変更した。なんだかなぁ。

Tags: PHP

*1 HTTP でパラメータを与えなくてもその部分がちゃんと抽象化されていればユニットテストは十分できる。このやり方の方が余計な仕事をやっている Apache や拡張だらけで重たくなったブラウザを使わずにテストできて速い。速さは正義だ。