[php] не кэшировать если есть ошибки

12
ДП
На сайте с 23.11.2009
Offline
203
#11

Раз уж вы кеш пилите, то задумайтесь над таким вопросом, что будет, если у вас при пустом кеше придёт одновременно несколько запросов - каждый из них запустит процесс генерации кеша?

TF-Studio
На сайте с 17.08.2010
Offline
334
#12

"cache/" . md5($url) . ".cache";

а я вот вижу тут возможно злонамеренного переполнения диска

просто перебором. и везде буде код 200 скорее всего и все уйдет на диск

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
doctorpc
На сайте с 12.07.2009
Offline
112
#13

Думаю, лучше с warning изначально бороться и писать код, чтобы их не возникало. Это не задача кеша.

Какая разница warning покажется один раз не из кеша или много раз впоследствии из кеша.

Ни первого ни второго быть не должно.

Aisamiery
На сайте с 12.04.2015
Offline
295
#14
TF-Studio:
"cache/" . md5($url) . ".cache";

а я вот вижу тут возможно злонамеренного переполнения диска
просто перебором. и везде буде код 200 скорее всего и все уйдет на диск

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

Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
Ragnarok
На сайте с 25.06.2010
Offline
239
#15
TF-Studio:
"cache/" . md5($url) . ".cache";

а я вот вижу тут возможно злонамеренного переполнения диска
просто перебором. и везде буде код 200 скорее всего и все уйдет на диск

404 не кэшируются

---------- Добавлено 10.08.2016 в 22:40 ----------

LEOnidUKG:
ТС, понимаете, программирование это не там, где есть волшебство. Тут ТУПО нужно сделать, то что вы хотите. Магии нет, волшебных слов тоже.

да, но есть вещи о которых не знаешь. я не знал про error_get_last)

Дикий пионер:
Раз уж вы кеш пилите, то задумайтесь над таким вопросом, что будет, если у вас при пустом кеше придёт одновременно несколько запросов - каждый из них запустит процесс генерации кеша?

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

file_put_contents($cacheName, $data, LOCK_EX);

doctorpc:
Думаю, лучше с warning изначально бороться и писать код, чтобы их не возникало. Это не задача кеша.
Какая разница warning покажется один раз не из кеша или много раз впоследствии из кеша.
Ни первого ни второго быть не должно.

да, согласен, конечно. но на всякий случай

//TODO: перестать откладывать на потом
L
На сайте с 10.02.2015
Offline
231
#16

Если кеш нужно тупо выплюнуть браузеру, то можно так:

//кэш

$cacheName = "cache/" . md5($url) . ".cache";
$cacheExists = file_exists($cacheName);

if(!$cacheExists) { //создаём кэш
ob_start();
getData(); //условная функция, собирает страницу и выводит её
$data = ob_get_contents();
ob_end_clean();
echo $data;

if(is_null(error_get_last()))
{
file_put_contents($cacheName, $data, LOCK_EX); //КЭШ СОЗДАН
}
}
else //либо грузим из кэша
{
readfile($cacheName); //ЗАГРУЖЕНО ИЗ КЭША
}

П.С.

Не хватает времени кеширования.

С функциями хеширования возможны колизии.

Посмотрите также в сторону fastcgi кеширования.

Страницу целиком можно не кешировать, а нарезать ее на маленькие блоки.

php.developer
На сайте с 22.11.2010
Offline
94
#17

Не для бугагашечки, а серьезно. Зачем самому себе придумывать проблемы?

Что мешает изначально писать код в дебаг-режиме с максимальным уровнем нотификации об ошибках, исключая ворнинги и нотисы на этапе разработки?

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

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий