ФорумПрограммированиеPHP для идиотов → Кэш

Кэш

  • Serj

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 15 февраля 2008 г. 14:54

    Делаю загрузку аватары в профиле пользователя, загружаю, файл помещаю на сервер, а в базу добавляю путь к файлу. Проблема в том что когда я перегружаю аватару по новой, она берётся из кэша, а новая отображается только при принудительном обновлении браузера. Пробовал использовать:

    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Expires: ".date("r"));

    Не помогло.

    Вот запрос и вывод картинки:

    <?
    $query = &quot;SELECT avatar FROM users WHERE id=&quot;.$_SESSION[&#39;user_id&#39;];
    $sql = mysql_query($query) or die(mysql_error());
    $row = mysql_fetch_array($sql);

    ?>
    <img src=&quot;<?=&#39;/avatars/&#39;.$row[&#39;avatar&#39;]?>&quot; />


    Помогите плз.
    joby.kharkov.ua
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 16 февраля 2008 г. 4:17, спустя 13 часов 23 минуты 10 секунд

    Браузеры жестко кэшат картинки. Поможет только изменение URL (чтобы браузер считал это разными картинками).
    Наиболее простой вариант — добавить GET-параметр:
    &lt;img src=&quot;image.gif?getparam&quot; />
    Параметр сделать либо рандомным, но тогда вообще каждый раз будет запрашиваться картинка и забиваться кэш. Либо, лучше всего, записывать в него время последней модификации файла.
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 16 февраля 2008 г. 4:48, спустя 31 минуту 1 секунду

    Необязательно жестко привязывать имя файла аватара к ID пользователя - можно добавить в таблицу пользователей поле avatar (unique) и изменять это значение при изменении картинки.
  • Serj

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 16 февраля 2008 г. 9:56, спустя 5 часов 7 минут 49 секунд

    Спасибо, помогло :)
    А как вам такой вариант, без get? Или лучше с get?

    $a=rand(1, 1000);
    ?>
    <img src=&quot;<?=&#39;/avatars/&#39;.$row[&#39;avatar&#39;].&#39;?&#39;.$a?>&quot; />
    joby.kharkov.ua
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 16 февраля 2008 г. 10:01, спустя 4 минуты 47 секунд

    Это как раз и есть рандомный GET-параметр, о котором я говорил. Чем он плох я так же сказал.
  • Serj

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 16 февраля 2008 г. 10:21, спустя 19 минут 39 секунд

    Понял, спасибо.
    joby.kharkov.ua

Пожалуйста, авторизуйтесь, чтобы написать комментарий!