За последние 24 часа нас посетили 18857 программистов и 1609 роботов. Сейчас ищут 913 программистов ...

Header HTTP - PHP

Тема в разделе "PHP для новичков", создана пользователем WHITE_DRAGON, 15 ноя 2016.

  1. WHITE_DRAGON

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

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    есть код:
    PHP:
    1. <?php
    2. // Подключаем транслит
    3. include('translit.php');
    4. $rawurldecode = rawurldecode( $_SERVER['REQUEST_URI'] );
    5. // Перевод кириллицы в транслит
    6. $name = translit($rawurldecode);
    7. // убираем все / и меняем их на
    8. $file_cache = preg_replace ('/\//isU' , '', $name);
    9. // удаляем последний
    10. $file_caches = rtrim ($file_cache, '');
    11. // дважды шифруем кешовый файл
    12. $encoded = md5(md5(trim($file_caches)));
    13. $cachefile = 'cache/cache' . $encoded . '.html';
    14. $cachetime = 86400;
    15. // вывод header HTTP
    16. $last_modified_time = filemtime($cachefile);
    17. $etag = md5_file($cachefile);
    18. header("Date: ".gmdate("D, d M Y H:i:s GMT"));
    19. header("Content-Type: text/html; charset=UTF-8");
    20. header("Content-Length: ".filesize($cachefile));
    21. header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT");
    22. header("Etag: $etag");
    23. if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time ||
    24.     trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) {
    25.     header("HTTP/1.1 304 Not Modified");
    26.     exit;
    27. }
    28. header("Expires: ".gmdate("D, d M Y H:i:s", strtotime("now +1 days")." GMT"));
    29. header("Content-Encoding: gzip");
    30. header("Vary: Accept-Encoding,User-Agent");
    31. // Обслуживается из файла кеша, если время запроса меньше
    32. if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
    33.     echo "<!-- Cached copy, generated ".date('d.m.Y - H:i', filemtime($cachefile))." -->\n";
    34.     include($cachefile);
    35.     exit;
    36. }
    37.     ob_start();
    38. // Запуск буфера вывода
    39. ?>
    и ответ сервера:
    Код (Text):
    1. HTTP/1.1 200 OK
    2. Server: nginx/1.10.2
    3. Date: Sat, 12 Nov 2016 22:49:47 GMT
    4. Content-Type: text/html; charset=UTF-8
    5. Content-Length: 16468
    6. Connection: keep-alive
    7. X-Powered-By: PHP/7.0.12
    8. Cache-Control: max-age=86400, private, must-revalidate
    9. Expires: Sun, 13 Nov 2016 22:49:47
    10. Last-Modified: Sat, 12 Nov 2016 19:20:40 GMT
    11. Etag: 45da776f40c842c422da345225abe9f1
    Если (вывод header HTTP) вставить перед (Обслуживается из файла кеша, если время запроса меньше) то при ответе сервера заголовки отображаются, но выводимая страница с кэша отображается не вся, либо верх либо низ исчезает, а если (вывод header HTTP) вставить в других местах, то сервер ничего не выдает, а страница наоборот отображается корректно...
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    может буфер вывода начинать с начала файла
     
  3. WHITE_DRAGON

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

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
    не помогло... проглатывает кусок кешированного кода...
     
  4. WHITE_DRAGON

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

    С нами с:
    13 апр 2009
    Сообщения:
    65
    Симпатии:
    0
    Адрес:
    Минск
  5. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв