За последние 24 часа нас посетили 24469 программистов и 1656 роботов. Сейчас ищут 880 программистов ...

Мой блог. Зацените.

Тема в разделе "Прочее", создана пользователем C, 6 май 2007.

  1. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    если будет скажем images/1.jpg которое будет на самом деле show.php?id=1 то браузер будет оставлять у себя в кеше
    при запросе этой картинки он будет спрашивать типа не изменилась ли она с такого-то момента. если нет - выдаешь в ответ 304 заголовок и браузер показывает картинку из кеша, иначе обновляешь картинку в браузерном кеше
     
  2. C

    C Активный пользователь

    С нами с:
    28 май 2006
    Сообщения:
    326
    Симпатии:
    0
    хедер посылаю такой:
    Код (Text):
    1. header("Content-Type: image/jpeg");
    2. header("Cache-control: private");
    3. header("Cache-control: max-age=999999999999");
    ссылка выглядит так: show_image/8/
    но кеширует картинки только фаерфокс. Опера и ИЕ нет! Чё ещё сделать? :(
     
  3. C

    C Активный пользователь

    С нами с:
    28 май 2006
    Сообщения:
    326
    Симпатии:
    0
    Неужели давать прямой доступ к папке с картинками? в смысле производительности это даже лучше, но они у меня хранятся без расширения, просто номерок. Это надо будет переписывать ещё сохранение файла... Может, есть ещё какой хедер?
     
  4. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Правду говорить :)

    Надо:
    1. Выдавать Last-Modified при запросе
    2. При запросе анализировать заголовки на предемет If-Modified-Since и отвечать на него
    3. Можно еще E-Tag юзать в паре с If-None-Match.

    Подробно писать неохота (информации в инете очень много)…
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    попробуй еще добавить такое дело
    PHP:
    1. <?
    2. $Tag = md5($id); // или как там у тебя передается id картинки
    3. if(isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $Tag) header('HTTP/1.0 304 Not Modified' ); // повторный запрос - скажем что не изменено
    4.  
    5.  
    6. //первый запрос
    7. header("Content-Type: image/jpeg");
    8. header("Cache-Control: max-age=2592000"); // на 30 дней
    9. header("ETag: ".$Tag);
    10. header('Content-type: image/jpeg');
    11.  
    12. // выводи свою пикчу
    13. ?>
     
  6. C

    C Активный пользователь

    С нами с:
    28 май 2006
    Сообщения:
    326
    Симпатии:
    0
    PHP:
    1. <?php
    2.     $last_modified=gmdate("D, d M Y H:i:s", filemtime($path));
    3.     $expires=gmdate("D, d M Y H:i:s", gmmktime( 1, 1, 1, 1, 1, 2020));
    4.     //die("Expires: {$expires} <br>Last-Modified: {$last_modified}");
    5.     $Tag = md5($ID); //
    6.     if(isset($_SERVER['HTTP_IF_NONE_MATCH']) &&
    7.         $_SERVER['HTTP_IF_NONE_MATCH'] == $Tag) {
    8.         // повторный запрос - скажем что не изменено
    9.         header('HTTP/1.0 304 Not Modified' );
    10.     }
    11.     header("Cache-control: private");
    12.     header("Cache-control: max-age=999999999999");
    13.     header("Expires: " . $expires);
    14.     header("Last-Modified: " . $last_modified);
    15.     header("ETag: ".$Tag);
    16.     header("Content-Type: image/jpeg");
    17. ?>
    Так тоже не помогает :x Может как-то проследить хедеры, которые апач выкидывает при выдаче картинки, как это сделать?
     
  7. C

    C Активный пользователь

    С нами с:
    28 май 2006
    Сообщения:
    326
    Симпатии:
    0
    Наверно легче просто давать ссылку на картинку с диска, но с этим проблемы, так как мод реврайт любой запрос на сайт переадресует в скрипт... Как сделать исключения?
     
  8. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    RewriteRule /images/ /img/$1 [QSA]
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    лично я не пользуюсь передачей инфы о последней модификации файла
    у меня
    Код (Text):
    1. $Tag = md5($FILE_PATH.filemtime($FILE_PATH));
    поэтому картинку рекешируют автоматом при ее изменении (ведь меняется значение тага)...
    вернее было не автоматом пока я не задал такой вопрос ;)
     
  10. C

    C Активный пользователь

    С нами с:
    28 май 2006
    Сообщения:
    326
    Симпатии:
    0
    PHP:
    1. <?php
    2. function show_just_image_v1()
    3. {
    4.     global $uri_parser;
    5.     $ID=(int)$uri_parser->get_level(1);
    6.     $size=(int)$uri_parser->get_level(2);
    7.     if($size>0) $ID=get_sized_image_ID_v1($ID, $size);  
    8.     $path=IMAGE_DIR.$ID;
    9.     if(!file_exists($path)) die("Картинки {$ID} не найдено на сервере.");
    10.     $Tag = md5($ID); //
    11.     if(isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
    12.         if($_SERVER['HTTP_IF_NONE_MATCH'] == $Tag) {
    13.             header('HTTP/1.0 304 Not Modified' );
    14.             exit();
    15.         }
    16.     }
    17.     if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
    18.         $browser_date=$_SERVER['HTTP_IF_MODIFIED_SINCE'];
    19.         if(str_date_to_int_v1($browser_date)>filemtime($path)) {
    20.             header("HTTP/1.1 304 Not Modified");
    21.             exit();
    22.         }
    23.     }
    24.     $last_modified=gmdate("D, d M Y H:i:s", filemtime($path)) . " GMT";
    25.     $expires=gmdate("D, d M Y H:i:s", gmmktime( 1, 1, 1, 1, 1, 2020)) . " GMT";
    26.     header("Cache-control: private");
    27.     header("Cache-control: max-age=999999999999");
    28.     header("Expires: " . $expires);
    29.     header("Last-Modified: " . $last_modified);
    30.     header("ETag: ".$Tag);
    31.     header("Content-Type: image/jpeg");
    32.     imagejpeg($img);
    33.     exit();
    34. }
    35. ?>
    Боюсь, что преждевременно, но похоже в осле это работает, а Опера всё равно перезагружает картинку.
     
  11. C

    C Активный пользователь

    С нами с:
    28 май 2006
    Сообщения:
    326
    Симпатии:
    0
    metadon
    А есил оно у меня так
    Код (Text):
    1.  
    2. RewriteEngine On
    3. RewriteRule ^([^.]+)$ index.php
    ,

    то это будет так:

    Код (Text):
    1. RewriteEngine On
    2. RewriteRule ^([^.]+)$ index.php
    3. RewriteRule /images/ /img/$1 [QSA]
    Просто добавить строчку? А то я не понимаю :(
     
  12. C

    C Активный пользователь

    С нами с:
    28 май 2006
    Сообщения:
    326
    Симпатии:
    0
    Ganzal
    Интересно, спасибо, спасибо вообще всем за то, что помогаете.
     
  13. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    RewriteRule ^([^.]+)$ index.php - не советую так делать, очень не удобно и очень глобально, вот и теперь с картинками лажа, вот в DLE например в .htaccess очень много прописано и она не мешает ничему на сервере.

    RewriteEngine On
    RewriteRule /images/ /img/$1 [QSA]
    RewriteRule ^([^.]+)$ index.php

    попробуй но не проверял сработает иои нет так как глобально прописано
     
  14. C

    C Активный пользователь

    С нами с:
    28 май 2006
    Сообщения:
    326
    Симпатии:
    0
    PHP:
    1. <?php
    2.     if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
    3.           $browser_date=$_SERVER['HTTP_IF_MODIFIED_SINCE'];
    4.           if(str_date_to_int_v1($browser_date)>filemtime($path)) {
    5.               header("HTTP/1.1 304 Not Modified");
    6.               exit();
    7.           }
    8.       }
    9. ?>
    Может тут дату файла конвертить в гринвич?
     
  15. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    C
    попробуйте сюда позаходить
    картинка кешируется у меня оперой, лисичкой, ие, браузерами на кпк, смарте и PSP....

    отпишитесь о результатах
     
  16. C

    C Активный пользователь

    С нами с:
    28 май 2006
    Сообщения:
    326
    Симпатии:
    0
    Ganzal
    Просто картинку Опера кеширует. Может .jpg добавлять что-то в url? :)
     
  17. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а ты не добавлял? =)
    у меня изначально добавлено
    кстати вопрос хочется вопросить... то что я посылаю хедером контент image/jpeg а расширение файла не jpg|jpeg - никого не корежит?
    то есть если моя ссылка будет не на jpg заканчиваться а на gif, png, iso и прочее сочетание латинских символов это нормально со стороны браузера? или лучше подкорректировать?
     
  18. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Ganzal
    Я думаю что браузеру пофиг какое расширение главное чтоб указывался формат (image/jpeg), почти все капчи с расширением php и всё норм :)
     
  19. C

    C Активный пользователь

    С нами с:
    28 май 2006
    Сообщения:
    326
    Симпатии:
    0
    У меня вопрос.
    На gamedev.ru меня раскритиковали за русские слова в url при фильтрации по тагам, так как они в браузерах кроме Оперы показываются плохо. Можно как-то сдедлать чтобы они показывались хорошо, или таги должны быть только на латинице?
     
  20. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    Я за русские url, кривое отображение это проблемы браузеров, а не сайта. В IE и Опере рабоает, FF нет.
    С тегами, тоже, почему бы и не на русском?
    Как аргумент, достаточно крупный проект Википедия давно и успешно юзает русские url.
    +уже юзаюца домены на русском.
     
  21. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    1. не таги, а тэги
    2. я бы сказал, что они в браузерах кроме мозиллы показываются хорошо :) для неё, впрочем, есть исправляющее расширение.
     
  22. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Что за расширение?
     
  23. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
  24. C

    C Активный пользователь

    С нами с:
    28 май 2006
    Сообщения:
    326
    Симпатии:
    0
    Таги у меня будут на инглише, картинке будут прямо на диске. Мод реврайт я уже замастерил, уже умею почти в нём писать. Вот чё написал:

    Код (Text):
    1. RewriteEngine On
    2.  
    3. RewriteCond %{REQUEST_URI} !show_image/\d+\.jpg$
    4. RewriteCond %{REQUEST_URI} !style/.*
    5. RewriteRule .* index.php
     
  25. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    C
    вообще тебе респект.
    думаю со мной согласятся и другие, но ты как минимум что-то делаешь,
    причем это видно.