За последние 24 часа нас посетили 35042 программиста и 1756 роботов. Сейчас ищут 772 программиста ...

output_add_rewrite_var и ob_get_clean

Тема в разделе "Прочие вопросы по PHP", создана пользователем kap210, 21 ноя 2007.

  1. kap210

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

    С нами с:
    21 ноя 2007
    Сообщения:
    3
    Симпатии:
    0
    Никак не могу решить задачу:
    если не поддерживаются Cookie, тогда цепляем ссесию к каждой ссылке.
    НО! если использовать сжатие(в том виде как я его реализовал), output_add_rewrite_var не хочет делать подстановку сессии к ссылкам.
    В мануале нечто вроде, что если используется output_add_rewrite_var, тогда ob_handler не дожен изменяться или я что-то не так понял?
    Как бы сделать чтобы сначала происходила подстановка сессии к ссылкам, а уже потом можно было сжать данные?

    Пример:
    PHP:
    1.  
    2. <?php
    3. function compression($buffer) {
    4.     switch ($GLOBALS['compression_enc']) {
    5.     case 'deflate':
    6.         header("Content-Encoding: deflate");
    7.         header("Vary: user-agent, accept-encoding");
    8.         $buffer = gzdeflate($buffer, 9);
    9.         break;
    10.     case 'gzip':
    11.         header("Content-Encoding: gzip");
    12.         header("Vary: user-agent, accept-encoding");
    13.         $buffer = gzencode($buffer, 9, FORCE_GZIP);
    14.         break;
    15.     default:
    16.         header("Vary: user-agent");
    17.         break;
    18.     }
    19.     return $buffer;
    20. }
    21.  
    22. header("Pragma: no-cache");
    23. header("Cache-Control: no-cache, no-store");
    24. header('Expires: '.gmdate("D, j M Y H:i:s \G\M\T"));
    25. header("Connection: close");
    26. header("Content-Type: text/html; charset=utf-8");
    27.  
    28. if (!$_COOKIE["s"]) {
    29.     ini_set("url_rewriter.tags", "a=href");
    30. ?>
    31. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    32.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    33. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    34. <head><title>HEADERS</title></head>
    35. <body>
    36. TEST<br /><a href="index.php?somevar=something">Something</a>
    37. </body></html>
    38. <?php
    39. $compress = FALSE;
    40. $compression_enc = 'no';
    41.  
    42. if (isset($_COOKIE['compression'])) {
    43.     $compress = TRUE;
    44.     $compression_enc = $_COOKIE['compression'];
    45. } elseif (isset($_SESSION['compression'])) {
    46.     $compress = TRUE;
    47.     $compression_enc = $_SESSION['compression']; }
    48.  
    49. if ($compress) print compression(ob_get_clean()); else header("Vary: user-agent");
    50. ?>
    51.  
     
  2. kap210

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

    С нами с:
    21 ноя 2007
    Сообщения:
    3
    Симпатии:
    0
    Как альтернатива годится и это, НО если в $_SERVER['HTTP_ACCEPT_ENCODING'] не определены gzip или deflate, ob_gzhandler не будет работать, выдает заголовки типа "Content-Encoding: gzip", но не сжимает!
    PHP:
    1. <?php
    2. header("Pragma: no-cache");
    3. header("Cache-Control: no-cache, no-store");
    4. header('Expires: '.gmdate("D, j M Y H:i:s \G\M\T"));
    5. header("Connection: close");
    6. header("Content-Type: text/html; charset=utf-8");
    7.  
    8. if ((isset($_GET['compression']))
    9.    && ($_GET['compression']==FORCE_DEFLATE || $_GET['compression']==FORCE_GZIP)) {
    10.     if ($_GET['compression'] == FORCE_DEFLATE) header("Content-Encoding: deflate");
    11.     elseif ($_GET['compression'] == FORCE_GZIP) header("Content-Encoding: gzip");
    12.     header("Vary: user-agent, accept-encoding");
    13.     ob_start("ob_gzhandler", $_GET['compression']);
    14. }
    15.  
    16. if (!$_COOKIE["s"] && $_GET['s']) {
    17.     ini_set("url_rewriter.tags", "a=href");
    18.  
    19. ?>
    20. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    21.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    22. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    23. <head><title>HEADERS</title></head>
    24. <body>
    25. <?php if ((isset($_GET['compression']))
    26.          && ($_GET['compression']==FORCE_DEFLATE || $_GET['compression']==FORCE_GZIP))
    27.     print "Compression: ".$_GET['compression']."<br />"; ?>
    28. TEST<br /><a href="index.php?somevar=something">Something</a>
    29. </body></html>
    [/php]