임시파일로 사용하도록 개선

This commit is contained in:
conory 2016-04-13 10:34:41 +09:00
parent 57fbc0dd7a
commit 7f2aa69f3a

View file

@ -135,20 +135,25 @@ class TemplateHandler
$source_template_mtime = filemtime($this->file); $source_template_mtime = filemtime($this->file);
$latest_mtime = $source_template_mtime > $this->handler_mtime ? $source_template_mtime : $this->handler_mtime; $latest_mtime = $source_template_mtime > $this->handler_mtime ? $source_template_mtime : $this->handler_mtime;
// get cached buff // make compiled file
if(is_readable($this->compiled_file) && filemtime($this->compiled_file) > $latest_mtime && filesize($this->compiled_file)) if(!file_exists($this->compiled_file) || filemtime($this->compiled_file) < $latest_mtime)
{
$buff = Rhymix\Framework\Storage::read($this->compiled_file);
}
// if not exist cached buff, parse template file
if(empty($buff))
{ {
$buff = $this->parse(); $buff = $this->parse();
Rhymix\Framework\Storage::write($this->compiled_file, $buff); if(Rhymix\Framework\Storage::write($this->compiled_file, $buff) === false)
{
$tmpfilename = tempnam(sys_get_temp_dir(), 'rx-compiled');
Rhymix\Framework\Storage::write($tmpfilename, $buff);
$this->compiled_file = $tmpfilename;
}
}
$output = $this->_fetch($this->compiled_file);
// delete tmpfile
if(isset($tmpfilename))
{
Rhymix\Framework\Storage::delete($tmpfilename);
} }
$output = $this->_fetch($buff);
if($__templatehandler_root_tpl == $this->file) if($__templatehandler_root_tpl == $this->file)
{ {
@ -327,10 +332,10 @@ class TemplateHandler
/** /**
* fetch using ob_* function * fetch using ob_* function
* @param string $buff if buff is not null, eval it instead of including compiled template file * @param string $filename compiled template file name
* @return string * @return string
*/ */
private function _fetch($buff) private function _fetch($filename)
{ {
$__Context = Context::getInstance(); $__Context = Context::getInstance();
$__Context->tpl_path = $this->path; $__Context->tpl_path = $this->path;
@ -338,7 +343,7 @@ class TemplateHandler
$__ob_level_before_fetch = ob_get_level(); $__ob_level_before_fetch = ob_get_level();
ob_start(); ob_start();
@eval('?>' . $buff); include $filename;
$contents = ''; $contents = '';
while (ob_get_level() > $__ob_level_before_fetch) while (ob_get_level() > $__ob_level_before_fetch)