タイトル: php4 を使用してネットワーク送信を高速化します。
/****************************************
** タイトル.... : PHP4 HTTP 圧縮により Web が高速化
** バージョン....: 1.10
** 著者....: catoc
** ファイル名....: gzdoc.php
** 最終変更日..: 2000/08/25
** 要件...: PHP4 >= 4.0.1
** PHP は - で構成されました-with-zlib[=DIR]
** 注意事項.....: Dynamic Content Acceleration は、
** データ送信データをオンザフライで圧縮します
** Sun jin hu (catoc)
** 1998/1999 年以降のほとんどの新しいブラウザーには、「コンテンツ エンコーディング」として知られる HTTP 1.1
** 標準をサポートするための
** が搭載されています。
** 基本的に、ブラウザは
** サーバーに「コンテンツ エンコーディング」を受け入れることができることを示します
** サーバーが対応している場合は、
**データを圧縮して送信します。
** ブラウザはそれを解凍し、
** ページをレンダリングします。
** 使用法....:
** 最初の「」の先頭の前にスペースは入れません。タグ
。
** ---------------ファイルの先頭----------
** |
** | include('gzdoc.php');
** | print "出力開始!!";
** |?>
** |
** |... ページ ...
** |
** |
** | gzdocout();
** |?>
** ---------------ファイルの終わり-----------
******************* ********************/
ob_start();
ob_implicit_flush(0);
関数 GetHeader(){
$headers = getallheaders();
while (list($header, $value) = each($headers)) {
$Message .= "$header: $value
";
}
$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('
','',GetHeader()
);
$Error_Msg .= "時間: ".date("Y-m-d H:i:s")."
";
$Error_Msg .= "リモートアドレス: ".$REMOTE_ADDR。
" ";
//mail('your@none.net', "ユーザーはファイル $PHP_SELF に x-gzip 出力
ut を持っています!!!", $Error_Msg);
}else{
$ENCODING = "gzip";
}
$ENCODING を返します。
}else{
0 を返す;
}
}
function GzDocOut(){
global $PHP_SELF, $CatocGz, $REMOTE_ADDR, $S_UserName;
$ENCODING = CheckCanGzip();
if ($ENCODING){
print " ";
$Contents = ob_get_contents();
ob_end_clean();
if ($CatocGz == 'Y'){
print "長さを圧縮しません: ".strlen($Contents)
."
";
print "圧縮長さ: ".strlen(gzcompress($
Contents))."
";
終了します。
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
);
$Contents を印刷します。
print Pack('V',$Crc);
print Pack('V',$Size);
終了します。
}else{
ob_end_flush();
$Error_Msg = str_replace('
','',GetHeader());
$Error_Msg .= "時刻: ".date("Y-m-d H:i:s")." ";
$Error_Msg .= "リモートアドレス: ".$REMOTE_ADDR." ";
//mail('your@none.net', "ユーザーはファイル $PHP_SELF で gzip 出力
を使用できません!!!", $Error_Msg);
終了します。
}
}
?>