使用php4加速网络传输
<?
/***************************************
** title.........: php4
http compression speeds up the web
** version.......: 1.10
**
author........: catoc <catoc@163.net>
** filename......: gzdoc.php
** last changed..: 25/08/2000
** requirments...: php4 >= 4.0.1
**
php was configured with --with-zlib[=dir]
** notes.........: dynamic content
acceleration compresses
** the data transmission data on the fly
** code
by sun jin hu (catoc) <catoc@163.net>
** most newer browsers since
1998/1999 have
** been equipped to support the http 1.1
** standard
known as "content-encoding."
** essentially the browser indicates to the
** server that it can accept "content encoding"
** and if the server is
capable it will then
** compress the data and transmit it. the
**
browser decompresses it and then renders
** the page.
** useage........:
** no space before the beginning of the first '<?' tag
.
**
------------start of file----------
** |<?
** | include('gzdoc.php');
** | print "start output !!";
** |?>
** |<html>
** |...
the page ...
** |</html>
** |<?
** | gzdocout();
**
|?>
** -------------end of file-----------
***************************************/
ob_start();
ob_implicit_flush(0);
function getheader(){
$headers =
getallheaders();
while (list($header, $value) = each($headers)) {
$message .= "$header: $value<br> ";
}
return $message;
}
function checkcangzip(){
global $http_accept_encoding, $php_self, $wget,
$remote_addr,
$s_username;
if (connection_timeout() ||
connection_aborted()){
return 0;
}
if
((strpos('catoc'.$http_accept_encoding, 'gzip')) || $wget =
= 'y'){
if
(strpos('catoc'.$http_accept_encoding, 'x-gzip')){
$encoding = "x-gzip";
$error_msg = str_replace('<br>','',getheader()
);
$error_msg
.= "time: ".date("y-m-d h:i:s")."
";
$error_msg .= "remote-address:
".$remote_addr.
" ";
//mail('your@none.net', "user have x-gzip outp
ut in file $php_self!!!", $error_msg);
}else{
$encoding = "gzip";
}
return $encoding;
}else{
return 0;
}
}
function
gzdocout(){
global $php_self, $catocgz, $remote_addr, $s_username;
$encoding = checkcangzip();
if ($encoding){
print " <!-- use
compress $encoding --> ";
$contents = ob_get_contents();
ob_end_clean();
if ($catocgz == 'y'){
print "not compress lenth:
".strlen($contents)
."<br>";
print "compressed lenth:
".strlen(gzcompress($
contents))."<br>";
exit;
}else{
header("content-encoding: $encoding");
}
print
pack('cccccccc',0x1f,0x8b,0x08,0x00,0x00,0x00,0x
00,0x00);
$size =
strlen($contents);
$crc = crc32($contents);
$contents =
gzcompress($contents);
$contents = substr($contents, 0, strlen($contents) -
4
);
print $contents;
print pack('v',$crc);
print
pack('v',$size);
exit;
}else{
ob_end_flush();
$error_msg =
str_replace('<br>','',getheader());
$error_msg .= "time: ".date("y-m-d
h:i:s")." ";
$error_msg .= "remote-address: ".$remote_addr." ";
//mail('your@none.net', "user can not use gzip output
in file
$php_self!!!", $error_msg);
exit;
}
}
?>
制作:罗可龙 电邮:luokelong(at)it168.com