【问题标题】:Php and Smarty3 - filemtime() [function.filemtime]: stat failed forPhp 和 Smarty3 - filemtime() [function.filemtime]: stat 失败
【发布时间】:2014-07-16 16:04:38
【问题描述】:

我正在将我的 WebAPP 从 Smarty2 迁移到 Smarty3。每一步都很容易,除了一个。当我显示 Smarty 模板 ( tpl ) 时,会引发异常。

这一行

Source: /path_to_file/smarty/libs/sysplugins/smarty_resource.php (773)

(这是源代码$compiled->timestamp = @filemtime($compiled->filepath);

当文件不存在时引发此异常

filemtime() [function.filemtime]: stat failed for /path_to_templates/smarty/templates_c/219dfe732aae7bd7c0edab091e3c53f3ce86b058.file.index.tpl.php

文件夹权限

Smarty 模板文件夹权限:775

Smarty 缓存文件夹权限:775

文件夹所有者

ftp_user:webserver_user

我正在尝试实施不同的解决方案,但似乎无法通过更改 Php 错误报告 或禁用我的 错误处理程序 来解决此问题。

如何在没有 hack 的情况下解决这个问题?

【问题讨论】:

  • 更换版本后你清理templates_ccache目录了吗?
  • 是的,我愿意。这似乎是一个 Smarty 3.1.16 错误。切换到 Smarty 3.1.1,该错误不再出现。

标签: exception error-handling smarty smarty3


【解决方案1】:

您应该做的不是降级到 3.1.1,而是尝试升级到3.1.19 版本。许多错误一直被删除,所以也许在这个版本中你不会拥有它。

另一件事是,您可以使用muteExpectedErrors 方法向 Smarty 隐藏文件系统警告(此功能的文档不是很清楚,但它会影响文件系统警告,如 error_reporting 文档中所述)。您可以在error_reporting documentation页面阅读:

Smarty 3.1.2 引入了 muteExpectedErrors() 函数。打电话 Smarty::muteExpectedErrors();设置自定义错误处理后 将确保警告和通知(故意)由 Smarty 不会传递给其他自定义错误处理程序。如果你的 错误日志充满了有关 filemtime() 或 unlink() 调用,请启用 Smarty 的错误静音。

【讨论】:

  • 我已经用 3.1.19 升级了我的工作副本(下载 Smarty-3-1-19.zip),但问题仍然存在。所以,我下载了 Smarty-stable.zipmarked as 3.1.19 ,我注意到 zip 里面有 Smarty 3.1.18 版本,而不是 3.1 .19.我会尽快测试这个版本!!!!
  • 根据 Smarty 管理员的说法,您应该像我所说的那样简单地忽略这些错误,根本不用担心它们。
  • @alesdario 还有一件事。您可能会收到此通知,因为文件 simple 不存在。很可能进行了一些优化并删除了简单的if file_exists。可以看stackoverflow.com/a/7120844/3593996
  • muteExpectedErrors() 似乎工作正常,但它也会静音警告错误,如 wrong parameters count 错误(例如 var_dump() 没有参数应该引发警告)。我可以修改静音错误级别吗?
  • 据我所知,它根本不影响它。假设我在我的 tpl {$x|var_dump} 中有变量 'x' 没有在 Smarty 中设置。当我使用 $smarty->muteExpectedErrors(); 时,我收到 2 个通知。当我想隐藏它们时,我还需要使用 $smarty->error_reporting = 0; 所以对我来说 muteExpectedErrors 不会影响其他警告
【解决方案2】:

检查 /path_to_templates/smarty/templates_c/219dfe732aae7bd7c0edab091e3c53f3ce86b058.file.index.tpl.php 上的文件系统权限

PHP 不具备对该文件的读/写权限。

还要检查 /path_to_templates/smarty/templates_c/ 文件夹中的权限。 PHP是否也允许读取列表和写入?

【讨论】:

  • templates_c 文件夹属于哪个用户/组? PHP 在哪个用户/组下运行?因为,如果不同,775 将不够用,需要 777。
  • ftp_user:webserver_user
猜你喜欢
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
相关资源
最近更新 更多