php.iniの修正内容が反映されない!例えば、php.iniでinclude_pathを指定しても、phpinfo()で確認すると自分が指定していない「include_path='.;c:\php5\pear'」になってしまう、という場合に考えられるいくつかの原因
例えば、php.iniで、
include_path=".;c:\php\pear"
と指定していても、phpinfo()で「include_path」の設定値を確認すると、自分が指定していない
include_path='.;c:\php5\pear'
になっている、ということがある。
include_pathの設定に限らないが、php.iniの設定が反映されない場合、普通(?)よくあるパターンが以下だと思う。
1)php.iniの設定を変更したのにApacheを再起動していなかった。
→Apacheを再起動したら、php.iniの設定変更が反映される。
2)修正したphp.iniファイルが、全く関係のないファイルだった。つまり、PHPが読み込んでいるphp.iniファイルは、どこか別の場所に格納されており、それに気づかないまま、たまたま見つけた関係のないphp.iniファイルを修正してしまった。
→phpinfo()でどのフォルダ内のphp.iniを読み込んでいるかを確認すれば、解決する。
《例》WindowsのC:\Windows配下にphp.iniを設置した場合のphpinfo()での表示例
Configuration File (php.ini) Path | C:\WINDOWS |
Loaded Configuration File | C:\WINDOWS\php.ini |
→実は、どのphp.iniもPHPが読み込めていないのであれば、読み込めるようにする。(PHPから見た時に、どこにphp.iniが設置されているのかを認識できていない、ということはよくある。)
※Windows環境であれば、C:\Windows配下にphp.iniを設置すると、認識してくれる。
3)Windows環境だと、php.iniの設置場所によっては、設置場所のphp.iniを直接修正しても修正内容が実は保存されていない。
→Windows 7、Windows Vistaではよくあること。
デスクトップ等でphp.iniファイルを修正した後、本来設置したい場所にコピーすると良い。
これまでは、この3つのパターンしか思いつかなかったが、最近、4つ目のパターンがあることに気付いた。
4)新たにPHP設定を記述した行よりも前の行で、PHPの設定記述に誤りがあった。
→最近、コレに少しはまった。
何かの設定が悪かったのか、Apacheのエラーログにも記録されないし、ブラウザで表示した時にもエラーが表示されなかったので、php.iniの記述には間違いがないのだろう、と断定し、さて、どうしようか、と八方ふさがりになりつつあった。
その時に、ふと思いついて、コマンドラインで(Windowsのコマンドプロンプトで)PHPを実行すると、PHPエラーが表示された。
○行目でエラーが出ている、ということまで記載されていたので、php.iniの該当行を確認すると、PHPの設定の記述の仕方が間違っていたことに気付いた。
この間違っていた行は、include_pathの記述よりも遥かに前の行だったので、include_pathの設定を何度も確認している時には、視界に入っていなかった。
PHPの動きとしては、新たに設定した記述(今回の例では「include_path」)よりも前に登場したPHP設定の記述において、記述の仕方が間違っていると、それ以後の設定は受け付けない、といったことになっているのかもしれない。
掲題の件だが、php.iniでinclude_pathを指定しても、phpinfoで確認すると自分が指定していない「include_path='.;c:\php5\pear'」になってしまう原因の1つとしては、今回は、include_pathを記述した行よりも前の行で、PHPの設定記述に誤りがあった、ということになる。
PHPとしては、(PHP5の)include_pathの初期値は、「'.;c:\php5\pear'」なのかなぁ。
今後も「php.iniの修正内容が反映されない!」という問題に遭遇した場合には、上述の1)〜4)項目のすべてを考慮することにしよう、と思った。まだ、これ以外にもハマリ・パターンがある場合は、このブログに追記するかも。