2011年2月28日月曜日

Twigエラーを回避

Twigを使っていて、一つだけイラッとすることがあります。

Twig_Environment生成時にauto_reloadオプションをtrueにした場合、

テンプレートを変更してアプリを再実行すると、

内部的には、キャッシュ更新のためコンパイル結果をキャッシュファイルに書き込む処理が

走るようですが、このとき、renameでエラーになる場合があります。


1.発生条件
環境依存な問題ですので、当方でのテスト環境を示しておきます。
OS : Win7
PHP : Ver5.2.6
Twig : 1.0.0-BETA1


2.回避方法
パッといい方法を思いつかなかったので、
ダウンロードしてきたtwigのソースを書き換えてしまいました。。。
(.../Twig/Environment.php#line.560)
(変更前)
if (@rename($tmpFile, $file) || (@copy($tmpFile, $file) && unlink($tmpFile))) {
(変更後)
if (/*@rename($tmpFile, $file) ||*/ (@copy($tmpFile, $file) && unlink($tmpFile))) {


書き換える内容については、OSがWindowsでphpが5.2.6以下の場合にはrenameはやめる、

というようにした方がよいような気がします。(が、面倒なので、ざっくりやめてみました。)



というより、ダウンロードしてきたものを書き換えるしか方法がないのかしら?・・と。

もっとスマートな回避方法があれば、ぜひご教授ください。