chagenbu Fri Jan 12 07:24:21 2001 EDT Added files: /php4/pear/HTTP Compress.php Modified files: /php4/pear Makefile.in Log: Add HTTP_Compress::, which provides an easy wrapper around producing gzip-compressed html. This should be ported to use the ob_gzhandler() output handler, but I haven't had a chance to look into that yet. Index: php4/pear/Makefile.in diff -u php4/pear/Makefile.in:1.61 php4/pear/Makefile.in:1.62 --- php4/pear/Makefile.in:1.61 Fri Jan 12 01:13:55 2001 +++ php4/pear/Makefile.in Fri Jan 12 07:24:21 2001 @@ -18,6 +18,7 @@ DB \ File \ HTML \ + HTTP \ Image \ Log \ Mail \ @@ -52,6 +53,7 @@ File/SearchReplace.php \ HTML/Form.php \ HTTP.php \ + HTTP/Compress.php \ Image/Remote.php \ Log.php \ Log/composite.php \ Index: php4/pear/HTTP/Compress.php +++ php4/pear/HTTP/Compress.php <?php /** * HTTP_Compress:: provides a wrapper around php's output buffering * mechanisms and also does compression, generates headers - ETag, * Content-Length, etc. - which may be beneficial to bandwidth * usage and performance. * * @author Mark Nottingham <[EMAIL PROTECTED]> * @author Chuck Hagenbuch <[EMAIL PROTECTED]> * @version $Revision: 1.1 $ */ class HTTP_Compress { /** * Start the output buffer, and make sure that implicit flush is * off so that data is always buffered. */ function start() { ob_start(); ob_implicit_flush(0); } /** * Output the contents of the output buffer, compressed if * desired, along with any relevant headers. * * @param boolean $compress (optional) Use gzip compression, if the browser supports it. * @param boolean $use_etag Generate an ETag, and don't send the body if the browser has the same object cached. * @param boolean $send_body Send the body of the request? Might be false for HEAD requests. */ function output($compress = true, $use_etag = true, $send_body = true) { $min_gz_size = 1024; $page = ob_get_contents(); $length = strlen($page); ob_end_clean(); if ($compress && extension_loaded('zlib') && (strlen($page) > $min_gz_size) && isset($GLOBALS['HTTP_SERVER_VARS']['HTTP_ACCEPT_ENCODING'])) { $ae = explode(',', str_replace(' ', '', $GLOBALS['HTTP_SERVER_VARS']['HTTP_ACCEPT_ENCODING'])); $enc = false; if (in_array('gzip', $ae)) { $enc = 'gzip'; } else if (in_array('x-gzip', $ae)) { $enc = 'x-gzip'; } if ($enc) { $page = gzencode($page); $length = strlen($page); header('Content-Encoding: ' . $enc); header('Vary: Accept-Encoding'); } else { $compress = false; } } else { $compress = false; } if ($use_etag) { $etag = '"' . md5($page) . '"'; header('ETag: ' . $etag); if (isset($GLOBALS['HTTP_SERVER_VARS']['HTTP_IF_NONE_MATCH'])) { $inm = explode(',', $GLOBALS['HTTP_SERVER_VARS']['HTTP_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-Length: ' . $length); echo $page; } } } ?> -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]