Наконец-то я победил одну неприятную проблему, которая загадочно появлялась у многих клиентов.
Это Warningи о невозможности удалить файл кеша такого вида:
Warning: unlink(httpdocs/storage/cache/cache.catalog.language.1582103414): No such file or directory
Пришлось глубоко покопаться, и выяснилось много интересных вещей. В Lightning есть код для подавления этих сообщений, но он почему-то не всегда срабатывал. Оказывается, в OpenCart 3 зачем-то есть два обработчика ошибок, которые показывают этот Warning. Один, как обычно, контролируется настройками магазина config_error_display и config_error_log. А второй, весьма загадочный - параметрами error_display и error_log, прописаными в system/config/default.php.
Ну ок, с этим разобрались. Но все же, почему OpenCart настолько часто пишет-удаляет этот файл, что периодически случаются накладки, когда другой процесс удаляет этот файл в микро-промежутке между проверкой первым процессом наличия файла и попыткой его удалить?
Выяснилось, что во всех версиях OpenCart 3 есть несостыковка в кешировании информации о языках:
В начале проверяется, не записан ли уже кеш по ключу language. Если его нет, данные получаются и записываются по ключу catalog.language !!!
Естественно, это приводит к тому, что при каждом открытии страницы данные получаются и записываются в кеш, который никогда не читается. Перед записью кеша старый кеш постоянно удаляется - и мы получаем эту накладку.
По сути, проблема безобидная и на работу магазина не влияет, разве что под нагрузками засоряет лог Warningами. Но, в комбинации с неподавляемым выводом ошибок, это уже серьезно - Warningи иногда проскакивают на витрину, нарушают работу AJAX-запросов, даже если вывод ошибок отключен в настройках.
Зачем я это тут расписываю? Может кому-то из разработчиков будет интересно и полезно.
В Lightning эту проблему я исправил, и поправленая версия 3.36 уже выложена - хотя номер версии не изменился. Просто уже совесть не позволяет через день выкладывать новые версии, а они прут в связи с карантином