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