有没有其他方法来解析没有eval()的文件?我试图在不使用index.gs中的php标签的情况下呈现php代码,到目前为止我只能使用eval()。问题不仅在于解析变量,还有自定义模板字符。
以下是代码示例。
$render = file_get_contents($this->file);
$render = $this->parse_extends($render);
$render = $this->parse_assets($render);
$render = $this->parse_vars($render);
$render = $this->parse_vars_skip($render);
try {
ob_start();
eval('?>' . $render);
$render = ob_get_contents();
} finally {
ob_get_clean();
}
return $render;
return $ render - 返回View :: class代码以获取响应
答案 0 :(得分:1)
如果在allow_url_include
中启用了php.ini
指令,则可以使用
include "data://text/plain;base64," . base64_encode($render);
但默认情况下此设置已禁用,并且无法在用户代码中更改,只能通过编辑php.ini
文件进行更改;所以除非在php.ini
中明确启用(并且通常没有任何正当理由),否则它实际上不是一个选项。
另一种方法是创建一个临时文件,在那里编写代码,然后使用include:
执行它$tempFilename = tempnam("/tmp", "MyTemplate");
file_put_contents($tempFilename, $render);
include $tempFilename;
unlink($tempFilename);
但两者都有类似的问题和对eval()的危险。