tag.TagParser->read() (rev3038/3045)
現在、テンプレートでエラー発生すると、
C:\xampp\htdocs\pdt\rhaco\Rhaco.php(275) : eval()'d code(147)
のようになって、何がエラーになったのか解明できない。
setup.phpから、キャッシュありにすれば、/work/cache にキャッシュファイルが
作られるのでスクリプトを確認することができる。
のだが・・・
キャッシュはキャッシュなわけで、古いものである可能性もあるわけで、
デバッグでいちいちそんなこと考えるのは手間。
(キャッシュファイルを消してから実行すればいいんですけど。それがメンドクサイ)
で、キャッシュの更新期間を0sにすればいいじゃん。
とか思ったわけです。そうすれば毎回キャッシュファイルが更新される。
んじゃなかろうかと予測。
ところが、
更新期間0sとしたとき。
1.毎回テンプレートをphp化して文字列$rhaco_tag_parse_srcに格納
2.$rhaco_tag_parse_srcをファイル化&eval()
という動きになるので、相変わらずメッセージは
C:\xampp\htdocs\pdt\rhaco\Rhaco.php(275) : eval()'d code(147)
のまま。
毎回キャッシュされるようになったものの、肝心のキャッシュファイル名はわからないorz
ということで改造してみます。
流れとしては、こんな感じ。
1.テンプレートをphp化して文字列$rhaco_tag_parse_srcに格納
2.$rhaco_tag_parse_srcをファイル化&*include* ←ここ変更
改造したソースはこんな感じ。
行頭インデント無しが追加したコードです。
(echoは不要)
/** * テンプレートをフォーマットし取得する * @param string $templateFileName テンプレートファイルパス(resources/templates)からの相対 * @param string $remotePath 相対パス変換用のルートパス * @param array $variables テンプレートで利用する変数(hash) * @return string */ function read($filename="",$variables=array(),$remotePath=""){ /*** unit("tag.TagParserTest"); */ $this->filename = empty($filename) ? $this->filename : $filename; if(empty($this->filename)) return ExceptionTrigger::raise(new NotFoundException("template")); $filename = Url::parseAbsolute($this->path,$this->filename); $variables = $this->_setSpecialVariables(array_merge(ArrayUtil::arrays($variables),ArrayUtil::arrays($this->variables))); $cacheurl = $this->_getCacheUrl($filename); $this->tmpurl = empty($remotePath) ? $this->url : $remotePath; $rhaco_tag_parse_src = ""; echo $filename . "<br />"; if(!Variable::bool(Rhaco::constant("NOT_MAKE_CACHE")) && Variable::bool(Rhaco::constant("TEMPLATE_CACHE")) && !Cache::isExpiry($cacheurl,Rhaco::constant("TEMPLATE_CACHE_TIME",86400)) && (FileUtil::time($filename) < Cache::time($cacheurl)) ){ echo "in<br />"; $rhaco_tag_parse_src = Cache::execute($cacheurl,$variables); }else{ echo "out<br />"; $rhaco_tag_parser_read_src = $this->_parse($this->_getTemplateSource($filename)); if(Variable::bool(Rhaco::constant("TEMPLATE_CACHE")) && !Variable::bool(Rhaco::constant("NOT_MAKE_CACHE"))){ Cache::set($cacheurl,$rhaco_tag_parser_read_src); } if(Variable::bool(Rhaco::constant("TEMPLATE_CACHE")) && !Variable::bool(Rhaco::constant("NOT_MAKE_CACHE")) && Rhaco::constant("TEMPLATE_CACHE_TIME") == 0) { $rhaco_tag_parse_src = Cache::execute($cacheurl,$variables); } else { $rhaco_snapshot = new Snapshot(); Rhaco::execute($rhaco_tag_parser_read_src,$variables); $rhaco_tag_parse_src = $rhaco_snapshot->get(); unset($rhaco_snapshot,$rhaco_tag_parser_read_src); } } echo Rhaco::constant("TEMPLATE_CACHE_TIME") . "<br />"; unset($filename,$variables,$cacheurl); return StringUtil::encode($this->_callFilter("publish",$this->_call($rhaco_tag_parse_src,"_doRead")),$this->encodeType); }
これで、テンプレートでエラー発生したとき、
C:\xampp\htdocs\pdt\myrhaco\01\work\cache\.41723fa0b88088e663506ac75a690999(147)
のようになります。