Журнал ошибок в ocStore


maximka77
120

Подскажите, пожалуйста. На сайте периодически в журнале ошибок появляется примерно такое:

2020-09-28 19:36:46 - PHP Warning:  fopen(сайт.ру/storage/cache/cache.seopro.cat_tree.1601325405): failed to open stream: No such file or directory in сайт.ру/system/library/cache/file.php on line 28
2020-09-28 19:36:46 - PHP Warning:  flock() expects parameter 1 to be resource, boolean given in сайт.ру/html/system/library/cache/file.php on line 30
2020-09-28 19:36:46 - PHP Warning:  filesize(): stat failed for сайт.ру/storage/cache/cache.seopro.cat_tree.1601325405 in сайт.ру/system/library/cache/file.php on line 32
2020-09-28 19:36:46 - PHP Warning:  fread() expects parameter 1 to be resource, boolean given in сайт.ру/system/library/cache/file.php on line 32
2020-09-28 19:36:46 - PHP Warning:  flock() expects parameter 1 to be resource, boolean given in сайт.ру/system/library/cache/file.php on line 34
2020-09-28 19:36:46 - PHP Warning:  fclose() expects parameter 1 to be resource, boolean given in сайт.ру/system/library/cache/file.php on line 36

Файл /system/library/cache/file.php выглядит в этом месте так:

Журнал ошибок в ocStore

Подскажите, из-за чего это и как это можно исправить? Заранее благодарен.


Алеандр

maximka77 :
Подскажите, из-за чего это и как это можно исправить? Заранее благодарен.

Отсутствует файл, с которым должны производиться действия. Возможно, что файл должен создаваться ранее автоматически, может быть проблема в правах на папку, т.е. этот файл невозможно там создать из-под пользователя, из-под которого работает скрипт. Это или юзер apache может быть или юзер с именем вашего аккаунта FTP и т.д., смотря что за сервер/хостинг. Следовательно, нужно проверить права на эту самую папку, которая DIR_CACHE (storage/cache/) и разрешить в нее запись для нужного пользователя.

Вся остальная пачка проблем в том, что по определению проверяется не наличие открываемого файла, а лишь указание его имени. Имя приехало, файла на месте нет. Учитывая, что это кэш, он должен автоматом создаваться и обновляться. Так что, первым делом копайте в сторону прав на директорию, а если не поможет — нужно искать кто и где должен был создать этот файл ранее и уже там смотреть, почему не создался.


maximka77

Алеандр , права на папку /system/library/cache/file.php стоят — 755, на сам файл file.php — 655.

Это правильно?


Андрей Воробьев

В коде явно напрашивается в `if` добавить проверку на наличие файла,

что-то типа `if ($files and array_key_exists(0, $files) and file_exists($files[0])) {`

+ проверить результат `fopen` на `false`.

Проверьте, может в новой версии cms/расширения это уже реализовано,

если нет, то напишите разработчикам и скиньте им этот лог с предупреждениями.


LEOnidUKG

Кэш очистили руками когда шёл запрос к сайту вот и всё. Ничего страшного нет, нормальная работа.

В коде явно напрашивается в `if` добавить проверку на наличие файла,

А glob по вашему что делает? Из воздуха этот файл берёт? Это вам не самописная CMS.

 Возможно, что файл должен создаваться ранее автоматически, может быть проблема в правах на папку, т.е. этот файл невозможно там создать из-под пользователя, из-под которого работает скрипт.

Если Opencart/ocStore не видели в глаза, зачем эту ахинею писать? Если файл не создался, то и запрашивать будет нечего, так работает там система.


Андрей Воробьев

О, вот узнаю типичное хамское поведение на рунетовском форуме.
> Ничего страшного нет
Согласен
> нормальная работа
Нет, предупреждения по возможности надо исправлять, но это не критично, да.
> А glob по вашему что делает? Из воздуха этот файл берёт?
Во время работы glob файл есть, когда работает fopen файла уже нет.
Такую ситуацию file_exists перед fopen отловит, если нет — то проверка результата fopen на false.


LEOnidUKG

Андрей Воробьев #:

О, вот узнаю типичное хамское поведение на рунетовском форуме.
> Ничего страшного нет
Согласен
> нормальная работа
Нет, предупреждения по возможности надо исправлять, но это не критично, да.
> А glob по вашему что делает? Из воздуха этот файл берёт?
Во время работы glob файл есть, когда работает fopen файла уже нет.
Такую ситуацию file_exists перед fopen отловит, если нет — то проверка результата fopen на false.

А вот типичное проявление глупость в рунете, лезьте с советами туда, в чём ничего не понимаешь. Классика!

А если и после fopen он исчезнет как быть? На каждую строчку писать условия проверки?

Такое поведение не стандартное для движка и вызвано «третьей стороной». Поэтому делать ничего не нужно.

Хотя можно сделать, рекомендую перевести на memcache или redis кэш, в разы бодрее будет работать движок.


maximka77

Спасибо большое всем за помощь!


Андрей Воробьев

> А если и после fopen он исчезнет как быть? На каждую строчку писать условия проверки?

Да.

С таким подходом можно и тесты не писать — а зачем?

> Такое поведение не стандартное для движка и вызвано «третьей стороной». Поэтому делать ничего не нужно.

Но это же происходит не один раз, а периодически, с этим надо что-то делать — перенести кэш в мемкеш норм вариант.

Если на такое забивать, то когда-нибудь в потоке такого мусорного шума будет пропущено важное.


V_G

Андрей Воробьев #:

> А если и после fopen он исчезнет как быть? На каждую строчку писать условия проверки?

Да.

С таким подходом можно и тесты не писать — а зачем?

> Такое поведение не стандартное для движка и вызвано «третьей стороной». Поэтому делать ничего не нужно.

Но это же происходит не один раз, а периодически, с этим надо что-то делать — перенести кэш в мемкеш норм вариант.

Если на такое забивать, то когда-нибудь в потоке такого мусорного шума будет пропущено важное.

Проблема инвалидации кеша идет именно в ситуации «стая собак». Это когда один процесс инициирует инвалидацию кеша, а второй еще успевает получить ответ что файл кеша есть. Но на момент доступа файла фиически уже и еще нет.


LEOnidUKG

Андрей Воробьев #:

> А если и после fopen он исчезнет как быть? На каждую строчку писать условия проверки?

Да.

Мде… сразу видно человека, который вообще никогда не работал с высоконагруженными проектами. Даже в голову не приходит вам, что каждая проверка = жор ресурса диска.

Благо вы не разработчик данной CMS.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *