html编码器保存smarty模板时网站崩溃(PHP致命错误)

html编码器保存smarty模板时网站崩溃(PHP致命错误),php,smarty,Php,Smarty,我们正在运行一个相当大的网站(每天约40万页面浏览量),并使用Smarty作为模板引擎。HTML编码器每天都会更改模板,每次模板更改(几乎每次)都会导致网站崩溃,因为PHP致命错误:调用未定义函数\u smarty\u tplfunc\u f0cb5c08ca1726d24308f6bd56b4f\u 0()。PS:是的,我们正在使用$smarty->compile\u check立即查看模板更改 为了修复此错误,我们正在清理所有网站缓存。我觉得不舒服 谁知道,我该怎么修呢?以及为什么每次(几乎

我们正在运行一个相当大的网站(每天约40万页面浏览量),并使用Smarty作为模板引擎。HTML编码器每天都会更改模板,每次模板更改(几乎每次)都会导致网站崩溃,因为
PHP致命错误:调用未定义函数\u smarty\u tplfunc\u f0cb5c08ca1726d24308f6bd56b4f\u 0()。
PS:是的,我们正在使用
$smarty->compile\u check
立即查看模板更改

为了修复此错误,我们正在清理所有网站缓存。我觉得不舒服

谁知道,我该怎么修呢?以及为什么每次(几乎每次)更改模板时都会发生此错误


谢谢。

避免此类问题的最佳方法是上载到临时文件,然后重命名它。这样就不可能出现部分文件

至于为什么每次都会发生,想想看。每天400k页面浏览量==平均每秒4.6个请求。考虑到我所见过的大多数网站在特定时间(白天)的流量要大得多,我怀疑你每秒会看到10到20个请求。按照这种速度,如果文件写入(由于上传)所需时间超过0.05秒,则在写入时读取文件的几率会急剧上升

因此,您的选择(从最稳健到最稳健的顺序。您始终可以执行多项操作):

  • 在流量(希望)较低的几个小时后进行上传
  • 使用为您执行重命名位的FTP服务器
  • 上载新文件时手动重命名该文件。(重要;重命名以覆盖原件。不要先删除或移动原件)
  • 让Smarty忽略时间戳小于10到30秒的新文件(只需调用
    filemtime()
    确定上次修改的时间。确保先调用
    clearstatcache()
    ,这样就不会得到旧时间)

  • 一旦缓存重新生成,它是否正常?是的,完全正确!当缓存被重新分配时,一切都正常。在我看来,出现此错误是因为模板尚未100%上载到ftp,但Smarty已经认为该文件已被修改。您好,感谢您的建议。我明天就试试。我特别喜欢修改Smarty代码的想法。我刚刚尝试使用
    touch template.tpl
    而不是清理缓存-效果很好,所以我认为重命名会有帮助(稍后会检查)