在Yii 2中始终使用错误的权限创建缓存文件

时间:2018-05-04 14:38:22

标签: yii yii2

每次看起来不存在缓存文件时,我的日志文件中都会出现此错误。在第一页加载时,我总是收到此错误

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

在下一页加载时不再发生这种情况,但有一次真的很烦人,因为松散的机器人观察者用这个无用的警告向我们的频道发送垃圾邮件。有没有办法避免这种情况,或者是权限问题?

“运行时”,“缓存”和“我的”文件夹都有775。

更新
原来问题是我使用的error_get_last()也出现了警告级错误。所以这完全是一个不同的问题,而不是Yii相关的

3 个答案:

答案 0 :(得分:1)

确保您的php.ini中未启用screamfilemtime()运算符应禁止此@调用的警告,但scream设置可以覆盖此运算符并生成警告。

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

答案 1 :(得分:0)

您必须在PHP 7.1中获得此功能。尝试使用PHP 5.5运行它,看看你是否得到了同样的错误。

要重现,您需要从运行时/缓存目录中删除所有文件 然后再次启动应用程序(重新加载页面)并查看运行时/缓存。它是空的 Yii2不再制作缓存

答案 2 :(得分:0)

在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()设置无效,并且无论如何都会调用您的错误处理程序