在Yii 2中,缓存文件总是以错误的权限创建

fykwrbwg  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(198)

每次缓存文件似乎不存在时,我都会在日志文件中看到这个错误。

[message] => filemtime(): stat failed for [...]/runtime/cache/my/myapp03eab921185f7b68bbca50d8debc0dda.bin
[file] => [...]/vendor/yiisoft/yii2/caching/FileCache.php
[line] => 113

下一页加载时不会再发生这种情况,但这一次真的很烦人,因为松弛的机器人监视器会用这种无用的警告来垃圾发送我们的频道。有没有办法避免这种情况,或者是权限问题?
“运行时”、“缓存”和“我的”文件夹都有775。

更新

结果发现问题是我使用的error_get_last()也出现了警告级别的错误。

ztigrdn8

ztigrdn81#

请确定您没有在php.ini中启用scream。来自这个filemtime()呼叫的警告应该由@运算子隐藏,但是scream设定可以覆写这个运算子并产生警告。

if (@filemtime($cacheFile) > time()) {
    // ...
}
q3aa0525

q3aa05252#

你一定是在PHP 7.1中得到这个错误。试着在PHP 5.5中运行这个错误,看看你是否得到同样的错误。
要重现,您需要删除runtime/cache目录中的所有文件,然后再次启动应用程序(重新加载页面)并查看runtime/cache。它是空的Yii 2不会再次创建缓存

f87krz0w

f87krz0w3#

在Yii中遇到了同样的问题。错误出现在同一个字符串上(FileCache.php:113)
if (@filemtime($cacheFile) > time()) {...
在我的例子中,原因是我自定义的php错误处理程序(类yii\base\ErrorHandler的继承者)没有检查错误类型是否需要根据error_reporting()进行处理。
自定义处理程序总是获得每个错误,甚至被错误控制运算符(@)静音
https://www.php.net/manual/en/function.set-error-handler.php
error_reporting()设置将不起作用,并且无论如何都将调用错误处理程序

相关问题