MAMPにおいてSmartyの絶対パスを表す定数'SMARTY_DIR'でハマった件

iMacを購入し、WindowsからMacへ乗り換えたので、サイト構築環境を整えるためMAMPをインストール。そして、既存サイトのDreamWeaverの設定をいじっていたのだが、Smartyを使ったサイトが500(Internal Server Error)で表示されない。原因が判明するまで半日以上は費やしたので、ここにメモ。
smartyを使うときは、まずincludeやらrequireやらでSmarty.class.phpを呼び出すわけだが、このファイルのパスは、ローカルと本番サーバ上とでは当然違うので、$_SERVER['SERVER_NAME']を使って場合分けをしている。以下のように。(なお、本番サーバはレンタルサーバです)

if($_SERVER['SERVER_NAME'] == 'localhost'){ //ローカルの場合
define('SMARTY_DIR','smarty/');

}elseif($_SERVER['SERVER_NAME'] == 'www.example.com'){ //本番のサーバ上の場合
define('SMARTY_DIR','home/*****/smarty/'); //レンタルサーバの場合自分のアカウントが入ったりする
}

require_once(SMARTY_DIR.'Smarty.class.php'); //Smartyを読み込む
$smarty = new Smarty;

Windows上のXAMPPでは、今までこれで問題なくローカルとサーバ上でSmartyが機能していたんだけど、MAMPでは機能しない。変数をassingして、$smarty->display('xxx.tpl')で表示させようとすると、500になる。

この原因は、Smarty絶対パスを指定していた定数SMARTY_DIRにあったようだ。この定数は、Smarty.class.phpが読み込まれた時点でその絶対パスが格納される。それを先取りする形で使っていることで問題が発生したようだ。読み込むSmartyの位置を変数か、別の定数にすれば問題は解消する。

同じ過ちをしている人は多くなさそうだが・・・