Phil: Datenkompressionssscript will nicht so ganz funzen

Hi! Ich habe bei einem netten Menschen ein Datenkompressionsscript auf PHP-Basis bekommen. Eigentlich soll der Einbau recht einfach sein. Also daran liegt es nicht. Eher an der Funktion ;) Aber entweder bekomm ich eine 10-fache Ladezeit im Gegensatz zu vorher und eine leere Seite oder folgenden Fehler: Warning: Undefined index: HTTP_IF_NONE_MATCH in c:\apache\apache\htdocs\hpneu\compress.php on line 24

naja, die index.php: <?php if(!isset($_GET['site'])) {$_GET['site']="start";} include("compress.php"); ob_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>yubb.de - Die Webmaster-Community</title> ...metatags... <script src="js.js" type="text/javascript"> </script> <link rel="stylesheet" href="css.css" type="text/css"> </head> <body onLoad="javascript:frames();"> <table border="0" cellspacing="0" cellpadding="0" width="100%" align="center"> <tr> <td colspan="3"><img src="images/blank.gif" width="1" height="5" border="0" alt=""></td></tr> <tr> <td> </td> <td width="800"> <table border="0"> <colgroup><col width="120"><col width="100%"></colgroup> <tr><td colspan="2" bgcolor="#E9EBED"> <? include("header.php"); ?> </td></tr> <tr><td style="width:120px;" valign="top"> <? include("navi.php"); ?> </td><td valign="top" style="width:100%;" bgcolor="#F9F9F9"> <? include($_GET['site'].".php"); ?> </td></tr> <tr><td colspan="2"> <? include("footer.php"); ?> </td></tr> </table> </td> <td> </td> </tr> <tr> <td colspan="3"><img src="images/blank.gif" width="1" height="5" border="0" alt=""></td> </tr> </table> </body> </html> <? $buf = ob_get_contents (); ob_end_clean (); compressedOutput ($buf); ?>

die compress.php: <?php /**  * Gibt den Text in $page mit der in $c_level angegebenen Kompressionsstärke aus. Kann auch ein ETag erzeugen.  *  * @param string $page Der Text der ausgegeben werden soll.  * @param integer $c_level Wie stark soll komprimiert werden? Mögliche Werte sind 0 (garnicht) bis 9 (am stärksten).  * @param boolean $use_etag Soll ein ETag erzeugt werden oder nicht?  */ function compressedOutput ($page, $c_level = 5, $use_etag = true) {         // Je nach PHP-Version die benötigten Variablen aus der passenden         // Superglobalen holen.         if (phpversion () < '4.1.0')         {                 global $HTTP_SERVER_VARS;                 $user_agent      = $HTTP_SERVER_VARS['HTTP_USER_AGENT'];                 $accept_encoding = $HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'];                 $if_none_match   = $HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'];         }         else         {                 $user_agent      = $_SERVER['HTTP_USER_AGENT'];                 $accept_encoding = $_SERVER['HTTP_ACCEPT_ENCODING'];                 $if_none_match   = $_SERVER['HTTP_IF_NONE_MATCH'];         }

$send_body = true;

if (extension_loaded ('zlib'))         {                 // Prüfen ob sich $c_level im gültigen Bereich befindet, falls                 // nicht $c_level anpassen.                 $c_level = (int)$c_level;                 if ($c_level < 0)                         $c_level = 0;                 elseif ($c_level > 9)                         $c_level = 9;

// Feststellen ob der Browser komprimierte Seiten verabeiten kann -                 // falls ja die Seite komprimieren und einen passenden Header                 // ausgeben.                 // Beim IE 4 nicht komprimieren, wegen einem Bug im selbigen.                 if (!eregi ('MSIE 4', $user_agent))                 {                         if (eregi ('gzip', $accept_encoding))                         {                                 if (eregi ('x-gzip', $accept_encoding))                                         header ('Content-Encoding: x-gzip');                                 else                                         header ('Content-Encoding: gzip');                                 $page = gzencode ($page, $c_level);                         }                         elseif (eregi ('deflate', $accept_encoding))                         {                                 header ('Content-Encoding: deflate');                                 $page = gzdeflate ($page, $c_level);                         }                         header ('Vary: Accept-Encoding');                 }         }

$md5checksum = md5 ($page);

// Wenn ein ETag erzeugt werden soll dieses erzeugen und auswerten.         if ($use_etag)         {                 $etag = '"' . $md5checksum . '"';                 header ('ETag: ' .  $etag);

if (count ($if_none_match) > 0)                 {                         $inm = explode (',', $if_none_match);                         foreach ($inm as $i)                         {                                 if (trim ($i) == $etag)                                 {                                         header ('HTTP/1.0 304 Not Modified');                                         $send_body = false;                                         break;                                 }                         }                 }         }

if ($send_body)         {                 header ('Content-MD5: ' . $md5checksum);                 header ('Content-Length: ' . strlen ($page));                 header ('Date: ' . gmdate ('D, d M Y H:i:s') . ' GMT');                 print $page;         } } ?>

Bitte geht nun nicht auf meine HTML-Fehler ein, darum kümmern wir uns wann anders (genauer: morgen ;), aber warum funktioniert das auf meinem lokalen Server nicht? Dieses ZLib oder wies heisst, habe ich aktiviert, daran liegts auch net. Oder liegts nur daran, dass ich mein lokal-PHP nicht geconfiggt hab und deswegen der parser extrem hart ist? Dankbar für jede Antwort http://www.yubb.de

  1. »»»» ?>

    Bitte geht nun nicht auf meine HTML-Fehler ein, darum kümmern wir uns wann anders (genauer: morgen ;), aber warum funktioniert das auf meinem lokalen Server nicht? Dieses ZLib oder wies heisst, habe ich aktiviert, daran liegts auch net. Oder liegts nur daran, dass ich mein lokal-PHP nicht geconfiggt hab und deswegen der parser extrem hart ist?
    Dankbar für jede Antwort
    http://www.yubb.de

    Dem fehlercode zu schließen ist dein Lokaler Server nen Win-Rechner ...

    Ich könnte mir vorstellen das Win-Apache mit gzip nicht umgehen kann.

    Aber btw: so nen gzip-Script interessiert mich auch (Linux; denke mal mein Hoster hat des *G*) ... besteht das Gzip-Script nur aus der abgebildeten compress.php und dem code am anfang und ende in der index.php ? oder kommt da noch was zu? Morgen dann mal probieren ;)

    Bis dann
    Wuppi

    1. Dem fehlercode zu schließen ist dein Lokaler Server nen Win-Rechner ...

      Ich könnte mir vorstellen das Win-Apache mit gzip nicht umgehen kann.

      Aber btw: so nen gzip-Script interessiert mich auch (Linux; denke mal mein Hoster hat des *G*) ... besteht das Gzip-Script nur aus der abgebildeten compress.php und dem code am anfang und ende in der index.php ? oder kommt da noch was zu? Morgen dann mal probieren ;)

      +... ich sollte mir angewöhnen, erst zu testen und dann zu fragen - net fragen, dann direkt testen ....

      Also das script funktioniert - dein fehler liegt als an Windows ...

      Bis dann
      Wuppi

      PS: und danke das du mir die Antwort auf eine künftige Frage schon gegeben hast ;)... jetzt weiß ich wie ich gzippe ;) thx

      1. Und ich kämpf mich hier seit 3 Stunden rum?

        1. Und ich kämpf mich hier seit 3 Stunden rum?

          Hi

          du hast des Script bei dir auf der Seite druff? ... da erscheint bei mir nämlich ne Fehlermeldung (du warst doch doch mit mit scrollbalkenfarben-generator? das teil muß ich eben nutzen *G*)

          Komisch eigentlich .... so wies ausschaut biste bie all-inkl.com ? Ich auch, und das script läuft bei mir aber ... haste da vielleicht was geändert? Ich habs 1:1 hierrausgenommen.

          Bis dann
          Wuppi

          1. Hi!
            Jo, die Scheisse war, dass ich es grad erst (13.00) selbst bemerkt hab...
            Also ich weiß es nicht, bei mir läufts net :(

            aber ich weiß nicht, ob

            zlib.output_compression
            off (Local Value)
            off (Master Value)

            was gutes verheisst...

            1. Hi!
              Jo, die Scheisse war, dass ich es grad erst (13.00) selbst bemerkt hab...
              Also ich weiß es nicht, bei mir läufts net :(

              aber ich weiß nicht, ob

              zlib.output_compression
              off (Local Value)
              off (Master Value)

              was gutes verheisst...

              Hi

              http://www.platzeck.net/TEST/gzip/gzip.php - da hab ich es am laufen ... ist nur müll, aber ging ja nur um funktionieren oder net ;8

              Vielleicht beißt sich das script mit irgendwas an scripts bei dir? Ich werde das übermorgen (oder morgen?) mal mit ner etwas umfangreicheren Seite testen.

              Probier das script bei dir am besten mal erst mit sinnlosen einfachen txt-inhalt - ohen formatierungen usw.  vielleicht haste ja doch was geändert .... wenn das script pur mit paar wörtern auch net funzt isses am ***** ... am Hoster kanns net liegen, da du den gleichen hast wie ich ...

              Also bis denn
              Wuppi

  2. Ich habe bei einem netten Menschen ein Datenkompressionsscript auf PHP-Basis bekommen.

    http://forum.de.selfhtml.org/archiv/2002/9/25053/#m137971 (und Vorfahren) dürfte Dich und den netten Menschen, der sich so viel unnütze Arbeit macht, sicher brennend interessieren.

    Aber entweder bekomm ich eine 10-fache Ladezeit im Gegensatz zu vorher und eine leere Seite oder folgenden Fehler: Warning: Undefined index: HTTP_IF_NONE_MATCH in c:\apache\apache\htdocs\hpneu\compress.php on line 24

    $if_none_match   = $HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'];

    Lies einfach die Warnung: Index HTTP_IF_NONE_MATCH existiert nicht im Feld $HTTP_SERVER_VARS. Die Dinger, die in diesem Feld mit HTTP_ anfangen, stellen die Kopfzeilen dar, die der Browser an den Server gesendet hat; ist HTTP_IF_NONE_MATCH nicht vorhanden, hat der Browser es nicht gesendet.
    Die Warnungen beim Zugriff auf nicht existierende PHP-Variablen kannst Du abstellen (siehe PHP-Anleitung, Kapitel Konfiguration, oder gleich die wesentlich besser kommentierte php.ini).
    Und die Funktion von If-None-Match findest Du nebenbei bemerkt in der HTTP-Spezifikation unter http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.26.

    Davon abgesehen hatte ich mal füchterliche Schwierigkeiten, die Binärdaten, die gzencode() ausgibt, in PHP-Variablen vom Typ String unterzubringen. In der Ausgabe war jedenfalls grundsätzlich dort, wo zwei 0xff hinterheinander kommen sollten, nur eines vorhanden. Dementsprechend waren die erzeugten Daten manchmal nicht zu gebrauchen.

    Auch halte ich den Ansatz, diese im Grunde sehr nützliche HTTP-Kompression mit einem PHP-Skript zu implementieren, für wenig sinnvoll.

    Kurzum: Benutze lieber die eingebaute Kompression von PHP (mit Vorsicht zu genießen, siehe andere Antwort oben) oder, noch besser, diejenige im Server (mod_gzip, sofern vorhanden).

    Gruß,
      soenk.e