今日もちょいつか

お酒の飲み過ぎか、それとも歳のせいなのか毎日ちょっぴり疲れ気味なフリーのソフト屋です。ソフト開発の話題をblogにしてみます。

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ファイルを読み込んで出力できなかったようです。
ネットを探し回ってやっと解決することができました。
ソフト開発の仕事はハマってばっかりですね。