2010-11-08 77 views
0

我已经开发了一个CMS,它使用Smarty将内容页面构建为PHP文件,然后将它们保存到光盘,以便同一页面的所有后续视图都可以绕过生成阶段,保持数据库负载和页面加载时间缩短。这些页面将是完全独立的,不必在另一个脚本的上下文中运行。缓存并显示生成的PHP页面时替代eval()

问题是用户第一次访问未被缓存的页面的实例,他们仍然必须显示生成的内容。我希望我可以保存我生成的文件,然后include()它,但文件系统延迟意味着这不是一个选项。

我能找到的唯一解决方案是使用eval()在生成并保存到光盘后运行生成的字符串。虽然这可行,但不得不进行调试,所以我非常希望找到替代方案。

在上述情况下,除了eval是否还有其他方法可以使用?

回答

0

鉴于你的情况,我认为没有其他选择。

至于调试部分,您可以随时将其写入光盘,然后用include开发测试/修复它,然后当您解决错误时,将其切换到eval

不知道你的系统,我不会再猜测你知道它比我更好,但它似乎是一个很大的努力,尤其是因为上述情况将只发生在每页一次......有史以来。我只想说,对于那个实例来说,显示通过eval的初始页面以及为什么你不能成为生成页面的初始用户,这是否真的值得呢​​?

+0

你说得对,当eval只在页面上次未被高速缓存时才第一次运行,我对eval有一个相当强烈的反感,而且更愿意找到运行生成页面的另一种方式。 – GordonM 2010-11-09 06:52:43

+0

您可以替换变量的PHP密钥并将其替换。例如,如果您将变量存储到$ view_data = array('title'=>'MyTitle')中,您可以将其用于渲染,如下所示:function render($ file,$ data){include $ file; foreach($ data为$ k => $ v){$$ k = $ v; #look at $$ k}。希望这个人帮忙!如果您不喜欢缓存,ob_handler等,则不需要评估... – 2014-04-08 22:27:06