使用 php4 加速 web 传输


Posted in PHP onOctober 09, 2006

<?
/***************************************
** 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>\n";
}
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")."\n";
$Error_Msg .= "Remote-Address: ".$REMOTE_ADDR."\n";
//mail('your@none.net', "User have x-gzip output 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 "\n<!-- Use compress $ENCODING -->\n";
$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,0x00,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")."\n";
$Error_Msg .= "Remote-Address: ".$REMOTE_ADDR."\n";
//mail('your@none.net', "User can not use gzip output in file $PHP_SELF!!!", $Error_Msg);
exit;
}
}
?>

PHP 相关文章推荐
PHP语法速查表
Jan 02 PHP
PHP中函数内引用全局变量的方法
Oct 20 PHP
逆序二维数组插入一元素的php代码
Jun 08 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
基于php设计模式中单例模式的应用分析
May 15 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
May 15 PHP
smarty模板引擎之配置文件数据和保留数据
Mar 30 PHP
微信公众平台开发之天气预报功能
Aug 31 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
CI框架简单邮件发送类实例
May 18 PHP
php根据年月获取当月天数及日期数组的方法
Nov 30 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 04 PHP
php 中include()与require()的对比
Oct 09 #PHP
php生成WAP页面
Oct 09 #PHP
让你同时上传 1000 个文件 (一)
Oct 09 #PHP
让你同时上传 1000 个文件 (二)
Oct 09 #PHP
一个可以删除字符串中HTML标记的PHP函数
Oct 09 #PHP
利用static实现表格的颜色隔行显示
Oct 09 #PHP
PHP 和 XML: 使用expat函数(三)
Oct 09 #PHP
You might like
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
php实现Linux服务器木马排查及加固功能
2014/12/29 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
javascript之函数直接量(function(){})()
2007/06/29 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
2017/12/18 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
基于node.js实现爬虫的讲解
2019/02/18 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
配置H5的滚动条样式的示例代码
2018/03/09 HTML / CSS
小学生打架检讨书
2014/01/26 职场文书
优秀毕业生自我鉴定
2014/02/11 职场文书
初中班主任寄语
2014/04/04 职场文书
火箭队口号
2014/06/18 职场文书
法定代表人身份证明书
2014/09/10 职场文书
送达通知书
2015/04/25 职场文书
经营场所使用证明
2015/06/19 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python