サーバ環境とローカル環境で挙動を変える

ローカルが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モードを自動的に切ったりできるので、安全でもある。

オシシメ( ・∀・)!