Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Картинки и кеш
Форумы портала PHP.SU » PHP » Программирование на PHP » Картинки и кеш

Страниц (1): [1]
 

1. JustUserR - 27 Августа, 2009 - 21:08:51 - перейти к сообщению
Честно сказать никогда не любил кэш картинок и другого сожержимого сайта но тут возникла проблема и я не зная как решить ее напрямую
Имеется PHP-скрипт который получает ID картинки запрашивает из базы ее mime-тип и двоичное содержимое и выводит ее предварив соответствующим заголовком
Мне нужно чтобы всего навсего браузер не кэшировал эту картинку и каждый раз загружал ее заново - пробовал ставить и pragma и дату обновленая файла - но все равно грузится старая
Я конечно много вариантов walkaroundов на стороне страницы которая запрашивает эту картинку - напрмер вызывать ее с параметром типа &rnd=rand_num где rand_num случайно сгернерированное число или другие JS-хитростями - оно то конечно работает
Но меня интересует как именно сделать так чтобы браузер сам по факту приняв картинку (Напрмер если бы я просто ввел URL картинки в адресной строке) качал ее заново
2. EuGen - 27 Августа, 2009 - 22:23:12 - перейти к сообщению
Вообще говоря, от браузера тоже есть зависимость. Если в нем стоит уровень "никогда не запрашивать обновленную страницу с сервера" (или как там оно называется, скажем, в IE), то он всегда будет загружать со своего локального кэша.
В моей практике также были случаи, когда промежуточный кэширующий прокси сводил на нет все усилия программиста с серверной стороны. (Особенно плохо, если не знать о существовании оного)
Ну а вообще, с отдачей картинки скриптом никаких трудностей у меня скажем никогда не было (как пример, рисунок для CAPTCHA - всегда создается новый просто по нажатию F5). Так что "напрямую", как Вы выразились, все должно работать корректно.
3. JustUserR - 28 Августа, 2009 - 11:43:03 - перейти к сообщению
EuGen Спасибо за информацию но я позволю себе уточнить некоторый момент
Итак у нас есть PHP-скрипт генерирующий картинку (Пускай картинка будет почти всегда разная - типа капчи) и чтобы получить картинку надо запросить адрес типа http://mysite[dot]ru/img.php?img=10 (Несмотря на то что число 10 скажем постоянное но при этом картинка выдаваемая по такому запросу может быть совершенно разная - это важно)
Если я ввожу в строку браузера этот адрес и жму F5 то все отлично работает и рисуются разные картинки
Но вот беда - если создать страницу и сделать на этой странице <img src="http://mysite.ru/img.php?img=10"> то эта картинка закачается один раз и никогда не обновится - единственно возможное обновление это средствами JS
Я был уверен что браузеры не настолько вредные - я думал что если вывести заголовок Last-Modified текущее время и устанровить pragma no-cache то никто не будет кеэировать - а тут хрен
Цитата:
В моей практике также были случаи, когда промежуточный кэширующий прокси сводил на нет все усилия программиста с серверной стороны. (Особенно плохо, если не знать о существовании оного)
Остается надеяться только на это потому чо действительно гдето может висеть такая кэширущая прокси
4. valenok - 28 Августа, 2009 - 17:49:53 - перейти к сообщению
И так не работает?

header("Cache-Control: no-cache");
header("Expires: -1");

Тогда видимо дело в настройках браузера или прокси по пути.
5. Roler - 28 Августа, 2009 - 17:52:10 - перейти к сообщению
Цитата:
<img src="http://mysite.ru/img.php?img=10">

Капчи все так и устроены и работают. Это точно не сервер виноват.
6. JustUserR - 28 Августа, 2009 - 19:26:02 - перейти к сообщению
Цитата:
И так не работает?
header("Cache-Control: no-cache");
header("Expires: -1");
Неа и так не работает + еще пробовал добавлять must-revatidate и pragma no-cach и тп но все без толку

Цитата:
Тогда видимо дело в настройках браузера или прокси по пути.
Цитата:
Капчи все так и устроены и работают. Это точно не сервер виноват.
Да уж уже начал ковырть - похоже виноваты и тот и другой Улыбка
7. EuGen - 28 Августа, 2009 - 20:39:07 - перейти к сообщению
У Вас на сервере также может стоять неверно настроенный nginx - кэширующий подобную "статику".
Нужно смотреть логи всех демонов - nginx (если есть), apache. Поставьте также Firebug (для Mozilla Firefox, если используете), и смотрите ответы сервера (по-моему, в разделе "Сеть" - "Net")
Ну и проверьте, нет ли кэширующего прокси. Такое бывает.
8. JustUserR - 29 Августа, 2009 - 20:48:57 - перейти к сообщению
EuGen Кстати спасибо за мысль - я пользуюсь IE и решил попробовать для проверки Proximion чтобы посмотреть какие в действительности запросы идут - и как ни странно ни GET и HEAD (Для проверки даты обновления к примеру) запросов на "картинку" вообще не идет На сервере Apache в логах тоже не видать запросов на "картинку" с моего IP
Честно сказать пока так и не понял почему так происходит и оставил свой JS-код для обновление картинки
Буду выяснять дальше - если появятся интересные подробности обящательно расскажу Улыбка
Всем спасибо за помощь
9. EuGen - 29 Августа, 2009 - 23:20:00 - перейти к сообщению
Если у Вас в логах нет обращений на сервер за картинкой, то, значит, существует некий промежуточный кэш (возможно, и Ваш локальный), который отдает картинку "вместо сервера".
Насчет прокси - если он не прозрачный, попробуйте сделать traceroute (для MS Win аналогом служит tracert), можете увидеть этот узел. Но только если он действительно не прозрачный.
Если же прозрачный, помочь может ping. Сравнивая TTL (Time to live) пакетов из разных сегментов сети, можно обнаружить подобный узел. При этом, правда, потребуется иметь доступ к различным сегментам одной и той же сети.

 

Powered by ExBB FM 1.0 RC1