似乎 twig getTimestamp() 函数与 PHP 5.5.12 (windows/linux) 不完全兼容,并在文件不可用时引发异常。
public function getTimestamp($key)
{
return (int) @filemtime($key);
}
我们使用的是 Twig 1.22.2,没有 symfony 的其余部分。我正在检查请求的密钥,但该文件不存在。twig 不应该在调用 filemtime() 之前检查文件是否存在?否则缓存永远不会被填充。我们正在配置树枝如下:
$this->loader = new \Twig_Loader_Filesystem($options['TEMPLATE_DIR']);
$this->twig = new \Twig_Environment($this->loader, array(
"auto_reload" => true
, "cache" => 'cache/twig'
));
像这样永远不会创建缓存文件。我们必须禁用缓存才能使其正常工作。
"cache" => false
对于生产环境,这不起作用
另一个解决方案如下:
public function getTimestamp($key)
{
**return false;**
return (int) @filemtime($key);
}
然后恢复到原始来源。然后缓存文件被写入磁盘,一切都像一个魅力。
我猜 php 内部发生了一些变化,twig 团队需要适应这种变化。默认情况下,twig 总是希望文件存在于第一次命中的每个应用程序中,而不是这种情况!