既に、松も取れるというタイミングですが、あけましておめでとうございます。本年も、推定数名の読者のために、細々とブログを続けていきたい所存でございます。よろしくお願いします。
さて、既にお気づきの方もいらっしゃるかと思いますが、昨日から、本ブログはアクセス不能に陥っておりました。突然、サーバのOSをVineLinux 6.1から6.2.1へとアップグレードしたら、PHPが5.3から5.5へとアップグレードされ、それが、MTのSmartyと食合せが悪く、ページが出てこない状態になってしまっておりました。
原因は、PHP5.5で、preg_replace()という正規表現の置換関数から、'/e'による処理が廃止されてしまいまして、これがモロにヒットしている格好でした。Dynamic HTML関係のモジュールだけで済むかなあと思って、書き換えを始めたところ、Smarty本体にまで食い込んで問題点が存在していました。とりあえず、応急処置的に、書き換えたもので、運転しています。
変更すべき箇所はいくつかあるのですが、最低限、<MT>/php/extlib/smarty/libs/Smarty_Compiler.class.phpに対して、次の変更を加えなければなりません。ご参考まで。(MovableType 5.2.9の場合)
--- php/extlib/smarty/libs/Smarty_Compiler.class.php.orig 2013-11-07 13:03:56.000000000 +0900
+++ php/extlib/smarty/libs/Smarty_Compiler.class.php 2014-01-07 14:20:46.000000000 +0900
@@ -262,13 +262,9 @@
reset($this->_folded_blocks);/* replace special blocks by "{php}" */
- $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,
+ function($m){ return $this->_quote_replace($this->left_delimiter) . 'php' . str_repeat("\n", substr_count($m[0], "\n")) . $this->_quote_replace($this->right_delimiter);},
+ $source_content);
/* Gather all template tags. */
preg_match_all("~{$ldq}\s*(.*?)\s*{$rdq}~s", $source_content, $_match);
$template_tags = $_match[1];
コメント