context.view
19.04.2021 12:15
0
Довольно часто возникают ошибки вида

2021-04-19 12:06:07 - PHP Warning: fopen(system/storage/cache/cache.store.1618826767): failed to open stream: No such file or directory in www/system/library/cache/file.php on line 28
2021-04-19 12:06:07 - PHP Warning: flock() expects parameter 1 to be resource, boolean given in /www/system/library/cache/file.php on line 30
2021-04-19 12:06:07 - PHP Warning: fread() expects parameter 1 to be resource, boolean given in www/system/library/cache/file.php on line 32
2021-04-19 12:06:07 - PHP Warning: flock() expects parameter 1 to be resource, boolean given in www/system/library/cache/file.php on line 34
2021-04-19 12:06:07 - PHP Warning: fclose() expects parameter 1 to be resource, boolean given in www/system/library/cache/file.php on line 36

люди в интернете говорят что это изза хостинга
Суть в чем... скрипт кеша делает проверку
- Есть ли такой файл кеша
ФС хостера бодро рапортует (беря данные из своего кеша)
- Да есть!
Скрипт
- Удаляю
ФС хостера
- Я обманула: нету его давно уже, я "думала" он есть

Т е не правильно настроено кеширование ФС сервера, это баян у хостеров уже. Пользователи обращаются в тех. поддержку хостера и они исправляют.
Artem.M
19.04.2021 16:52
0
avshop
18.12.2021 23:50
0
меня техподдержка отшила
отправили ссылку на какойто форум где все сводилось к неправильньым правам на папку.... хотя причина не в этом
пришлось править скрипт
----------------------------
<?php // system/library/cache/file.php

namespace Cache;

class File {

        private $expire;



        public function __construct($expire = 7200) {

                $this->expire = $expire;

/* // 0leksa 2021-12-18 прибрав звідси щоб не робити очищення застарілого кешу при кожному запиті сторінки і переніс до function get()

                $files = glob(DIR_CACHE . 'cache.*');



                if ($files) {

                        foreach ($files as $file) {

                                $time = substr(strrchr($file, '.'), 1);



                                if ($time < time()) {

                                        if (file_exists($file)) {

                                                unlink($file);

                                        }

                                }

                        }

                }*/

        }



        public function get($key) {

        $files = [];

                $files2 = glob(DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.*');

        foreach ($files2 as $file) { // 0leksa 2021-12-18

            $time = substr(strrchr($file, '.'), 1);

            if ($time < time()) {

                if (file_exists($file)) {

                    unlink($file);

                }

            } else $files[] = $file;

        }



        if (!empty($files)&&is_file($files[0])&&filesize($files[0])) { // 0leksa 2021-12-18

                        $handle = fopen($files[0], 'r');

                        flock($handle, LOCK_SH);

                        $data = fread($handle, filesize($files[0]));

                        flock($handle, LOCK_UN);

                        fclose($handle);

                        return json_decode($data, true);

                }



                return false;

        }



        public function set($key, $value) {

                $this->delete($key);

                $file = DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.' . (time() + $this->expire);

                $handle = fopen($file, 'w');

                flock($handle, LOCK_EX);

                fwrite($handle, json_encode($value));

                fflush($handle);

                flock($handle, LOCK_UN);

                fclose($handle);

        }



        public function delete($key) {

                $files = glob(DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.*');



                if ($files) {

                        foreach ($files as $file) {

                if (!@unlink($file)) { // 0leksa 2021-12-18

                    clearstatcache(false, $file);

                                }

                        }

                }

        }

}
rudenko
20.12.2021 13:03
1
Читаем первый абзац мануала по функции PHP clearstatcache:

> Для обеспечения большей производительности при использовании функций stat(), lstat() или любой другой функции, перечисленных в приведённом ниже списке, PHP кеширует результаты их выполнения.

Обращаем внимание на фразу "PHP кеширует". Тут нет ничего про кеширование файловой системы или про настройки файловой системы. Кеширование - это встроенная функция PHP, которую хостер никак не может настроить. Выполнение clearstatcache() перед чтением решит вашу проблему.
Тема закрыта.