Файлы кэша всегда создаются с неправильными разрешениями в Yii 2 - PullRequest
0 голосов
/ 04 мая 2018

Я получаю эту ошибку в моих файлах журналов каждый раз, когда файл кеша не существует, кажется. На первой странице загрузки я всегда получаю эту ошибку

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

Это больше не происходит при загрузке следующей страницы, но это один раз действительно раздражает, так как наблюдатель за слабым ботом спамит наш канал этим бесполезным предупреждением. Есть ли способ избежать этого или проблема с разрешениями?

Папки "runtime", "cache" и "my" имеют 775.

Обновление
Оказывается, проблема в том, что я использую error_get_last(), который также получает ошибки уровня предупреждения. Так что это совсем другая проблема, не связанная с Yii

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Вы должны получить это в PHP 7.1. попробуйте запустить это с PHP 5.5 и посмотрите, не появляется ли такая же ошибка.

Для воспроизведения необходимо удалить все файлы из директории runtime / cache Затем снова запустите приложение (перезагрузите страницу) и посмотрите в среду выполнения / кэш. Пусто Yii2 больше не создает кеш

0 голосов
/ 13 мая 2019

У меня такая же проблема в 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 () не будут действовать, и ваш обработчик ошибок будет вызван независимо

0 голосов
/ 04 мая 2018

Убедитесь, что вы не включили scream в вашем php.ini. Предупреждения от этого вызова filemtime() должны подавляться оператором @, но настройка scream может переопределить этот оператор и в любом случае генерировать предупреждение.

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