mod_gzip是一个Apache模块,其功能是使用Gzip压缩静态的html页面,遵循IETF标准的浏览器可以接受gzip编码(IE, Netscape等)。mod_gzip可以将页面的下载时间提高4-5倍。我强烈建议你在你的web服务器上使用mod_gzip。然而,我们还必须用PHP建立我们自己的压缩引擎。在这篇文章里,我将要介绍如何使用PHP的输出控制函数来大幅加速页面载入速度。
介绍PHP的输出控制函数
PHP4中最令人满意的事是——你可以让PHP缓存所有由脚本生成的输出,在你决定把它们送出之前,浏览器方是不会收到任何内容的。在脚本程序中你能用这些函数来设置header、cookies,然而这只是强大的输出函数的一小部分功能。
void ob_start(void);
?>
告诉PHP处理器把所有的输出重定向到一个内部的缓存(buffer)中。在调用ob_start之前,没有输出会被送到浏览器去。
string ob_get_contents(void);
?>
该函数将“输出缓存”(output buffer)以字符串的形式返回。你可以调用该函数把积累下来的输出送到浏览器中。(仅在把buffering功能关闭之后!!)
int ob_get_length(void);
?>
返回缓存中的字符串的长度。
void ob_end_clean(void);
?>
清空输出缓存,并将输出缓存关闭。在缓存中的内容输出到浏览器之前,必须使用这个函数。
void 501([int flag])
用来打开/关闭隐含的flush动作开关(默认是关)。如果flush是开的,每次调用print/echo或是其它输出命令的时候,输出的内容会被立即送到浏览器端。
使用输出控制来压缩PHP输出
你必须使用PHP4里编译的Zlib扩展包来压缩输出。如果需要的话,可以查看PHP文档中有关Zlib包的安装指导。
首先,初始化输出缓存:
ob_start();
ob_implicit_flush(0);
?>
之后,用print, echo, 或其他你喜欢的方法生成所有输出内容,例如:
print("Hey this is a compressed output!");
?>
页面生成后,我们取回输出内容:
$contents = ob_get_contents();
ob_end_clean();
?>
之后,必须检测浏览器是否支持压缩数据。如果支持,浏览器会发给服务器端一个ACCEPT-ENCODEING HTTP头。我们只需检查$HTTP_ACCEPT_ENCODING变量中是否有“gzip,deflate”字串。
if(ereg('gzip, deflate',$HTTP_ACCEPT_ENCODING)) {
// 在这里生成 Gzip 压缩的内容
} else {
echo $contents;
}
?>
这种方法使用起来既简单又结构清晰。下面让我们看看如何生成压缩的输出:
//告诉浏览器将要收到的是gzip数据
//当然在此之前,你已经检查了它们是否支持gzip,x-gzip数据格式
//如果支持的是x-gzip,那么下面的头就要用z-gzip来代替
header("Content-Encoding: gzip");
//显示gzip文件的头
//只需显示一次
echo "x1fx8bx08x00x00x00x00x00";
//计算出文件的大小和CRC码
$Size = strlen($contents);
$Crc = crc32($contents);
//压缩数据
$contents = gzcompress($contents, 9);
//我们不能就这样输出,因为CRC码是混乱的。
//如果我在这里使用“echo $contents”,压缩的数据会被送出,
//但是却不完整。文件最后的四个字节是CRC校验码,可是只发出去了三个字节。
//最后一个字节被丢掉了。我不知道这个bug在4.0.2版中解决了没有,
//不过最好避免错误的方法是把正确的CRC校验码加到压缩的数据的末尾。
//
//把旧的CRC校验码剥离
$contents = substr($contents, 0, strlen($contents) - 4);
//仅显示压缩的数据
echo $contents;
//输出CRC,和原来数据的大小(字节)
gzip_PrintFourChars($Crc);
gzip_PrintFourChars($Size);
function gzip_PrintFourChars($Val) {
for ($i = 0; $i echo chr($Val % 256);
$Val = floor($Val / 256);
}
}
?>
//好了,你还可以按此方式附加上更多的压缩数据。
要想进行实际的测试,所有的脚本代码如下:
ob_start();
ob_implicit_flush(0);
print("I'm compressed!n");
$contents = ob_get_contents();
ob_end_clean();
header("Content-Encoding: gzip");
echo "x1fx8bx08x00x00x00x00x00";
$Size = strlen($contents);
$Crc = crc32($contents);
$contents = gzcompress($contents, 9);
$contents = substr($contents, 0, strlen($contents) - 4);
echo $contents;
gzip_PrintFourChars($Crc);
gzip_PrintFourChars($Size);
function gzip_PrintFourChars($Val) {
for ($i = 0; $i echo chr($Val % 256);
$Val = floor($Val / 256);
}
}
?>
缓存PHP输出
当PHP4还没问世,我不得不使用PHP3的时候,我对开发一些缓存机制来减少数据库的载入、对文件系统的存取十分感兴趣。在PHP3中没有什么特别好的方法,但是有了输出缓存之后,在PHP4中一切变得容易多了。
这有一个简单的例子:
//为请求的URI构造一个文件名
$cached_file=md5($REQUEST_URI);
if((!file_exists("/cache/$cached_file"))||(!is_valid("/cache/$cached_file"))) {
//is_valid函数验证缓存,你可以用这个函数检查Cache是否过期或其他特定的条件。
//如果文件不在Cache中或者不可用则生成输出
ob_start();
ob_implicit_flush(0);
//在此输出……
$contents = ob_get_contents();
ob_end_clean();
$fil=fopen($cached_file,"w+");
fwrite($fil,$contents,$strlen($contents));
fclose($fil);
}
/如果请求的文件在缓存中且可用,则:
readfile($cached_file);
?>
这是一个简单的例子,使用输出缓存,你可以建立一个复杂的内容生成系统,对不同的块或程序使用不同的缓存机制,等等……
结论
PHP输出控制函数对把脚本生成的输出重定向到缓存中十分有用。为支持gzip的浏览器输出压过的缓存数据可以减少载入时间。也可作为缓存机制来减少对数据源的存取(数据库或文件),这对使用XML意义重大。
如果我们用PHP建立一个引擎,缓存从数据源得到的数据(xml文档和数据库),并且动态的生成XML格式的内容(没有外观-presentation)我们可以得到这些XML的输出,并使用XSLT转换成任意一种我们想要的外观格式(html, wap, palm, pdf等)。使用PHP4的输出缓存和Sablotron XSLT扩展可以很好地完成这个任务。

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

利用PHP控制摄像头:从连接到拍摄的全过程解析摄像头的应用越来越广泛,例如视频通话、监控系统等。而在Web应用中,我们常常需要通过PHP来控制和操作摄像头。本文将介绍如何利用PHP来实现从摄像头连接到拍摄的全过程。确认摄像头的连接状态在开始操作摄像头之前,我们首先需要确认摄像头的连接状态。PHP提供了扩展库video来实现对摄像头的操作。我们可以通过以下代码
![如何禁用媒体音量控制弹出窗口[永久]](https://img.php.cn/upload/article/000/000/164/168493981948502.png)
当您使用相应的快捷键微调音量级别时,屏幕上会出现一个媒体音量控制弹出窗口。这可能很烦人,因此请继续阅读以找出永久禁用媒体音量控制弹出窗口的不同方法。如何禁用媒体音量控制弹出窗口?1.在谷歌浏览器中单击任务栏上的Windows图标,在顶部的搜索栏中键入chrome,然后选择相关搜索结果以启动谷歌浏览器。在地址栏中键入或复制粘贴以下内容,然后按键。Enterchrome://flags在顶部的搜索框中键入媒体密钥,然后在硬件媒体密钥处理下拉列表中选择禁用。现在退出谷歌浏览器应用程序并重新启动它。谷歌

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

想象一下,一部没有正常运行的控制中心的iPhone。你不能,对吧?如果控制中心上的按钮无法正常工作,则无法正确使用iPhone。控制中心的主要思想是直接从手机上的任何地方轻松使用某些功能。在这种情况下,这些解决方案将有助于解决手机上的问题。修复1–使用布清洁手机有时,经常使用显示器的上部会变脏。这可能会导致控制中心无法正常工作。步骤1–取一块柔软、干净的超细纤维布,清理iPhone屏幕的上半部分。您也可以使用任何屏幕清除液。步骤2–确保清除手机显示屏上的任何灰尘、油或任何其他物品。清除手机屏幕后

近年来,机器人技术得到广泛应用,可见其在科技领域中的重要性。而机器人控制也是机器人开发的核心部分之一。使用Java语言实现机器人控制,能够实现快速的机器人控制,也为机器人的进一步发展提供了有力的支持。Java是一种高级语言,由于其良好的跨平台性、高效性和安全性,成为了广泛使用的编程语言。在实现机器人控制方面,它也能够提供很好的支持。首先,需要了解机器人控制的

转化方法:1、使用“mb_substr($url,stripos($url,"?")+1)”获取url的参数部分;2、使用“parse_str("参数部分",$arr)”将参数解析到变量中,并传入指定数组中,变量名转为键名,变量值转为键值。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Dreamweaver Mac版
시각적 웹 개발 도구
