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

Кэш

  • Serj

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

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

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

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

    Не помогло.

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

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

    ?>
    <img src="<?='/avatars/'.$row['avatar']?>" />


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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