Fwd: [PHP-CVS] cvs: php4 /pear Makefile.in /pear/HTTP Compress.php
Chuck Hagenbuch
chuck@horde.org
Fri, 12 Jan 2001 10:29:28 -0500
Those of you following Horde cvs closely will need this fairly soon.
----- Forwarded message from Chuck Hagenbuch <chuck@horde.org> -----
Date: Fri, 12 Jan 2001 15:24:21 -0000
From: Chuck Hagenbuch <chuck@horde.org>
Reply-To: Chuck Hagenbuch <chuck@horde.org>
Subject: [PHP-CVS] cvs: php4 /pear Makefile.in /pear/HTTP Compress.php
To: php-cvs@lists.php.net
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 <mnot@pobox.com>
* @author Chuck Hagenbuch <chuck@horde.org>
* @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: php-cvs-unsubscribe@lists.php.net
For additional commands, e-mail: php-cvs-help@lists.php.net
To contact the list administrators, e-mail:
php-list-admin@lists.php.net
----- End forwarded message -----
-chuck
--
Charles Hagenbuch, <chuck@horde.org>
"If you can't stand the heat, get out of the chicken!" - Baby Blues