サーバ環境とローカル環境で挙動を変える
ローカルがxamppで、本番サーバがlinuxなど、同じソースコードを使うが、環境によってPHPのinclude_pathが変わったり接続先DBのDSNが変わったりする場合、結構困る事が多い。
ftpでファイルを一個一個アップしてるならまだしもsubversionで一括svn upとかやってる場合はそれぞれのファイルまで
書き換わってしまうので厄介である。FTPだってうっかり上書きしたら目も当てられない。
そこで、この問題を解決するため、環境に応じてPHPの挙動を変更する方法。
まず.htaccessでinclude_pathやその他のphpの挙動にかかわる設定を変更する
xamppのインストールバッチ(C:\xampp\Program Files\xampp\apache\apache_installservice.bat)を書き換える
bin\apache -k install -D WINDOWS
apacheサービスのインストール時に「-D WINDOWS」を付ける事によって.htaccess中で
<IfDefine WINDOWS> #WINDOWS用のディレクティブ php_value include_path "C:\web\pear;C;\web\php\include" SetEnv public_root "C:\web\" </IfDefine> <IfDefine !WINDOWS> #Linux用のディレクティブ php_value include_path "/home/web/pear:/home/web/php/include" SetEnv public_root "/home/web" </IfDefine> {共通のディレクティブ}
次にソースコード中では.htaccessで設定した値を$_ENVで取得
<? $public_root=$_ENV['public_root']; ?>
OSによる挙動変更はPHP_OS定数を使う手もあるが、明示的にどちらで動かすかを1つの.htaccessで指定できるのがメリット。
サーバとローカルにまったく同じファイルが置けるようになる。
うまく工夫すれば、本番サーバでなにかしらのdebugモードを自動的に切ったりできるので、安全でもある。
オシシメ( ・∀・)!