Mac Smartyで画面が真っ白になる
PHP + Smartyで開発されたシステムをリプレースする仕事を受注したので
Macに環境をつくったのですが、画面が表示されません。
簡単に解決するだろうと思ったのですが、ハマりにハマり。
解決するまで相当な時間がかかってしまいました。
開発環境
・OS macOS High Sierra・PHP7
・Smarty 2.6.14
現象
ブラウザからhttpアクセスしても何も表示されずに真っ白になる。
具体的には、compileフォルダへ出力されるキャッシュファイルの中身が
何もない。
tplファイルはきちんとあります。
解決した方法
smarty/Smarty_Compiler.class.phpの267行目くらいにある$source_content = preg_replace($search.'e', "'" . $this->_quote_replace($this->left_delimiter) . 'php' . "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'" . $this->_quote_replace($this->right_delimiter) . "'" , $source_content);
を
$source_content = preg_replace_callback($search, create_function ('$matches', "return '" . $this->_quote_replace($this->left_delimiter) . 'php' . "' . str_repeat(\"\n\", substr_count('\$matches[1]', \"\n\")) .'" . $this->_quote_replace($this->right_delimiter) . "';") , $source_content);
へ変更したら無事に表示されるようになりました。
PHP7では、preg_replaceのe修飾子を使うと、Warningを吐きつつNULLを返すようですね。
それでtplファイルを読み込んで出力できなかったようです。
ネットを探し回ってやっと解決することができました。
ソフト開発の仕事はハマってばっかりですね。