导航:首页 > 编程语言 > phpobgzhandler

phpobgzhandler

发布时间:2022-09-07 03:38:54

① wordpress优化怎么开启GZIP压缩

方法一、通过修改index.php文件开启Gzip压缩
下载Wordpress网站根目录index.php文件到本地,用专业网页或代码编辑软件打开编辑,请勿使用系统自带的记事本。填的时候注意标点符号,需英文状态输入。
在打开的index.php
中找到:
define(’WP_USE_THEMES’,
true);
在后面加上:
ob_start(‘ob_gzhandler’)
这种方法最简单,推荐使用。不过有个弊端,就是当wordpress系统升级后需要重新设置。
方法二、通过.htaccess启用Gzip压缩
如果你的网站空间或服务器支持.htaccess文件,那么在wordpress根目录的.htaccess中添加以下代码,然后上传到wordpress根目录即可。
用FTP软件登陆Wordpress博客网站目录。
右键.htaccess文件-编辑,打开.htaccess文件。在最后面加上第3点中介绍的两种代码中的任意一种。
实现gzip压缩代码有两种具体如下:
第一种:php_value
output_handler
ob_gzhandler
第二种:
<IfMole
mod_expires.c>
ExpiresActive
On
ExpiresByType
image/gif
A2592000
ExpiresByType
image/jpeg
A2592000
ExpiresByType
image/png
A2592000
ExpiresByType
image/x-icon
A2592000
ExpiresByType
application/x-javascript
A604800
ExpiresByType
text/css
A604800
</IfMole>
<IfMole
mod_deflate.c>
SetOutputFilter
DEFLATE
AddOutputFilterByType
DEFLATE
text/html
text/css
image/gif
image/jpeg
image/png
application/x-javascript
</IfMole>
方法三、通过php.ini
启用Gzip压缩
如果服务器支持php.ini重定义的话,可以在php.ini中增加以下代码来开启gzip。
zlib.output_compression_level
=
number
其中number为1—9的值,1的压缩比率最低,
建议取5。
方法四、安装gzippy插件开启Gzip压缩
下载Gzippy插件(下载地址见参考资料。),点wordpress后台的安装插件-上传-选择文件-现在安装,安装完成后启动插件即可。
方法五、利用WP
Super
Cache缓存插件自带功能开启Gzip压缩
已安装WP
Super
Cache缓存插件的朋友,可以在WP
Super
Cache设置-高级选项中勾选Compress
pages
so
they’re
served
more
quickly
to
visitors.(Recommended)一项,这样也可以开启Gzip压缩。不过勾选这个选项可能导致网页乱码。
方法六、Cpanel控制面板的空间开启Gzip压缩
使用Cpanel面板的空间如果服务器支持,可以在Cpanel后台设置开启网站Gzip压缩。在Cpanel面板的软件栏目-优化网站中进行设置。点优化网站后,选择压缩所有内,然后更新设置。
查看Gzip是否开启成功
选择以上任一适合自己的方法设置好之后,大家可以到Gzip压缩检测网页(见参考资料)进行测试,看看wordpress
Gzip压缩有没有成功。祝你成功。以下是本人博客的Gzip检测图-Gzip压缩已开启:
注意事项及说明
如果在.htaccess文件中禁止了gzip功能的话,那在php.ini文件中开启后也需在.htaccess文件中开启gzip,否则没有效果。
开启wordpress的gzip功能后,服务器将在页面传输前将页面压缩后传送,可以有效减少服务器的带宽使用,也可以加速页面下载。
另外请注意只能选择一种方式来开启wordpress
gzip压缩,否则有可能造成冲突,请谨记。

② php echo 形式输出的图片怎样让浏览器缓存(缓存相关的http头已经试过了,无效,每次都是200),谢谢

Output Control 函数可以让你自由控制脚本中数据的输出。它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况。
输出控制函数不对使用 header() 或 setcookie(), 发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用。
我们先举一个简单的例子,让大家对Output Control有一个大致的印象:
Example 1.
复制代码 代码如下:
<?php
ob_start(); //打开缓冲区
echo \"Hellon\"; //输出
header(“location:index.php”); //把浏览器重定向到index.php
ob_end_flush();//输出全部内容到浏览器
?>
所有对header()函数有了解的人都知道,这个函数会发送一段文件头给浏览器,但是如果在使用这个函数之前已经有了任何输出(包括空输出,比如空格,回车和换行)就会提示出错。如果我们去掉第一行的ob_start(),再执行此程序,我们会发现得到了一条错误提示:“Header had all ready send by”!但是加上ob_start,就不会提示出错,原因是当打开了缓冲区,echo后面的字符不会输出到浏览器,而是保留在服务器,直到你使用 flush或者ob_end_flush才会输出,所以并不会有任何文件头输出的错误!
一、 相关函数简介:
1、Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。
2、ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。
3 、ob_get_contents :返回内部缓冲区的内容。
使用方法:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。
4、ob_get_length:返回内部缓冲区的长度。
使用方法:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回 FALSE。
5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。
使用方法:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)。
6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
使用方法:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除!
7、ob_implicit_flush:打开或关闭绝对刷新
使用方法:void ob_implicit_flush ([int flag])
说明:使用过Perl的人都知道$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()
二、深入了解:
1. 关于Flush函数:
这个函数在PHP3中就出现了,是一个效率很高的函数,他有一个非常有用的功能就是刷新browser的cache.我们举一个运行效果非常明显的例子来说明flush.
Example 2.
复制代码 代码如下:
<?php
for($i = 1; $i <= 300; $i++ ) print(“ “);
// 这一句话非常关键,cache的结构使得它的内容只有达到一定的大小才能从浏览器里输出
// 换言之,如果cache的内容不达到一定的大小,它是不会在程序执行完毕前输出的。经
// 过测试,我发现这个大小的底限是256个字符长。这意味着cache以后接收的内容都会
// 源源不断的被发送出去。
For($j = 1; $j <= 20; $j++) {
echo $j.”
”;
flush(); //这一部会使cache新增的内容被挤出去,显示到浏览器上
sleep(1); //让程序“睡”一秒钟,会让你把效果看得更清楚
}
?>
具体效果你可以到这里看看http://www.php2000.com/~uchinaboy/out.php
PHP2000的最新的PHP聊天室就是用的这个技术,可惜的是源代码未公开 L
注:如果在程序的首部加入ob_implicit_flush()打开绝对刷新,就可以在程序中不再使用flush(),这样做的好处是:提高效率!
2. 关于ob系列函数:
我想先引用我的好朋友y10k的一个例子:
Example 3.
比如你用得到服务器和客户端的设置信息,但是这个信息会因为客户端的不同而不同,如果想要保存phpinfo()函数的输出怎么办呢?在没有缓冲区控制之前,可以说一点办法也没有,但是有了缓冲区的控制,我们可以轻松的解决:
复制代码 代码如下:
<?php
ob_start(); //打开缓冲区
phpinfo(); //使用phpinfo函数
$info=ob_get_contents(); //得到缓冲区的内容并且赋值给$info
$file=fopen(\'info.txt\',\'w\'); //打开文件info.txt
fwrite($file,$info); //写入信息到info.txt
fclose($file); //关闭文件info.txt
?>
用以上的方法,就可以把不同用户的phpinfo信息保存下来,这在以前恐怕没有办法办到!其实上面就是将一些“过程”转化为“函数”的方法!
或许有人会问:“难道就这个样子吗?还有没有其他用途?”当然有了,比如笔者论坛的PHP 语法加亮显示就和这个有关(PHP默认的语法加亮显示函数会直接输出,不能保存结果,如果在每次调用都显示恐怕会很浪费CPU,笔者的论坛就把语法加亮函数显示的结果用控制缓冲区的方法保留了),大家如果感兴趣的话可以来看看http://www.zphp.com/bbs/!
可能现在大家对ob_start()的功能有了一定的了解,上面的一个例子看似简单,但实际上已经掌握了使用ob_start()的要点。
<1>.使用ob_start打开browser的cache,这样可以保证cache的内容在你调用flush(),ob_end_flush()(或程序执行完毕)之前不会被输出。
<2>.现在的你应该知道你所拥有的优势:可以在任何输出内容后面使用header,setcookie以及session,这是 ob_start一个很大的特点;也可以使用ob_start的参数,在cache被写入后,然后自动运行命令,比如 ob_start(\"ob_gzhandler\");而我们最常用的做法是用ob_get_contents()得到cache中的内容,然后再进行处理……
<3>.当处理完毕后,我们可以使用各种方法输出,flush(),ob_end_flush(),以及等到程序执行完毕后的自动输出。当然,如果你用的是ob_get_contents(),那么就要你自己控制输出方式了。
来,让我们看看能用ob系列函数做些什么……
一、 静态模版技术
简介:所谓静态模版技术就是通过某种方式,使得用户在client端得到的是由PHP产生的html页面。如果这个html页面不会再被更新,那么当另外的用户再次浏览此页面时,程序将不会再调用PHP以及相关的数据库,对于某些信息量比较大的网站,例如sina,163,sohu。类似这种的技术带来的好处是非常巨大的。
我所知道的实现静态输出的有两种办法:
<1>.通过y10k修改的phplib的一个叫template.inc.php类实现。
<2>.使用ob系列函数实现。
对于第一种方法,因为不是这篇文章所要研究的问题,所以不再赘述。
我们现在来看一看第二种方法的具体实现:
Example 4.
<?php
ob_start();//打开缓冲区
?>
php页面的全部输出
<?
$content = ob_get_contents();//取得php页面输出的全部内容
$fp = fopen(“output00001.html”, “w”); //创建一个文件,并打开,准备写入
fwrite($fp, $content); //把php页面的内容全部写入output00001.html,然后……
fclose($fp);
?>
这样,所谓的静态模版就很容易的被实现了……
二、 捕捉输出
以上的Example 4.是一种最简单的情况,你还可以在写入前对$content进行操作……
你可以设法捕捉一些关键字,然后去对它进行再处理,比如Example 3.所述的PHP语法高亮显示。个人认为,这个功能是此函数最大的精华所在,它可以解决各种各样的问题,但需要你有足够的想象力……
Example 5.
<?
Function run_code($code) {
If($code) {
ob_start();
eval($code);
$contents = ob_get_contents();
ob_end_clean();
}else {
echo “错误!没有输出”;
exit();
}
return $contents;
}
以上这个例子的用途不是很大,不过很典型$code的本身就是一个含有变量的输出页面,而这个例子用eval把$code中的变量替换,然后对输出结果再进行输出捕捉,再一次的进行处理……
Example 6. 加快传输
<?
/*
** Title.........: PHP4 HTTP Compression Speeds up the Web
** Version.......: 1.20
** Author........: catoc <[email protected]>
** Filename......: gzdoc.php
** Last changed..: 18/10/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) <[email protected]>
** 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.
**
** Modified by John Lim ([email protected])
** based on ideas by Sandy McArthur, Jr
** Usage........:
** No space before the beginning of the first \'<?\' tag.
** ------------Start of file----------
** |<?
** | include(\'gzdoc.php\');
** |? >
** |<HTML>
** |... the page ...
** |</HTML>
** |<?
** | gzdocout();
** |? >
** -------------End of file-----------
*/
ob_start();
ob_implicit_flush(0);
function CheckCanGzip(){
global $HTTP_ACCEPT_ENCODING;
if (headers_sent() || connection_timeout() || connection_aborted()){
return 0;
}
if (strpos($HTTP_ACCEPT_ENCODING, \'x-gzip\') !== false) return \"x-gzip\";
if (strpos($HTTP_ACCEPT_ENCODING,\'gzip\') !== false) return \"gzip\";
return 0;
}
/* $level = compression level 0-9, 0=none, 9=max */
function GzDocOut($level=1,$debug=0){
$ENCODING = CheckCanGzip();
if ($ENCODING){
print \"n<!-- Use compress $ENCODING -->n\";
$Contents = ob_get_contents();
ob_end_clean();
if ($debug){
$s = \"<p>Not compress length: \".strlen($Contents);
$s .= \"
Compressed length: \".strlen(gzcompress($Contents,$level));
$Contents .= $s;
}
header(\"Content-Encoding: $ENCODING\");
print \"x1fx8bx08x00x00x00x00x00\";
$Size = strlen($Contents);
$Crc = crc32($Contents);
$Contents = gzcompress($Contents,$level);
$Contents = substr($Contents, 0, strlen($Contents) - 4);
print $Contents;
print pack(\'V\',$Crc);
print pack(\'V\',$Size);
exit;
}else{
ob_end_flush();
exit;
}
}
?>
这是catoc的一段很早以前的代码,是在weblogs.com看到的,他利用了zlib的函数,对传输的内容进行了压缩,测试表明,对于10k以上的页面,会产生效果,而且页面越大,效果越明显……

③ 我在本地测试php的源码为什么打不开后台呢

date_default_timezone_set
函数是PHP5.1.0版本后才支持的函数,请确认你的PHP版本是否高于5.1.0。
Fatal error: Call to undefined function: date_default_timezone_set() in d:\usr\www\html\admin\login.php on line 12
这句的意思是找不到date_default_timezone_set() 这个函数,也就是你的php引擎不认识date_default_timezone_set() 这个函数。

④ php ob_start提高多少速度

由于PHP是“一边编译一边执行”的脚本语言,某种程度上也提供了一种相当方便的结果集缓存使用方法—通过动态include相应的数据定义代码段的方式使用缓存。

近来做了一阵子程序性能的优化工作,有个比较有意思的想法,想提出来和大家交流一下。

Cache是“以空间换时间”策略的典型应用模式,是提高系统性能的一种重要方法。缓存的使用在大访问量的情况下能够极大的减少对数据库操作的次数,明显降低系统负荷提高系统性能。相比页面的缓存,结果集是一种“原始数据”不包含格式信息,数据量相对较小,而且可以再进行格式化,所以显得相当灵活。由于PHP是“一边编译一边执行”的脚本语言,某种程度上也提供了一种相当方便的结果集缓存使用方法——通过动态include相应的数据定义代码段的方式使用缓存。如果在“RamDisk”上建缓存的话,效率应该还可以得到进一步的提升。以下是一小段示例代码,供参考。

// load data with cache

function
load_data($id,$cache_lifetime) {

// the return data

$data =
array();

// make cache filename

$cache_filename =
‘cache_‘.$id.‘.php‘;

// check cache file‘s last modify time

$cache_filetime = filemtime($cache_filename);

if (time() -
$cache_filetime <= $cache_lifetime) {

//** the cache is not expire

include($cache_filename);

} else {

//** the cache is
expired

// load data from database

// ...

while
($dbo->nextRecord()) {

// $data[] = ...

}

// format
the data as a php file

$data_cache = "
while (list($key, $val) =
each($data)) {

$data_cache .= "\$data[‘$key‘]=array(‘";

$data_cache .= "‘NAME‘=>\"".qoute($val[‘NAME‘])."\","

$data_cache .= "‘VALUE‘=>\"".qoute($val[‘VALUE‘])."\""

$data_cache .= ";);\r\n";

}

$data_cache = "?>\r\n";

// save the data to the cache file

if ($fd =
fopen($cache_filename,‘w+‘)) {

fputs($fd,$data_cache);

fclose($fd);

}

}

return $data;

}

?> 适用情况:

1.数据相对比较稳定,主要是读取操作。

2.文件操作要比数据库操作快。

3.复杂数据访问,大数据量访问,密集数据访问,系统数据库负载极重。

4.Web/DB分离结构或者多Web单DB结构。

未经证实的问题:

1.并发访问时对文件的读写是否会引起锁定问题。

2.涉及到的数据文件太多时,性能如何。

扩展思路:

1.生成JavaScript数据定义代码,在客户端调用。

2.还未想到……

望共同探讨。

缓存

如果你想要让自己庞大的PHP应用有更好的性能表现,采用缓存也是一种很好的方法。现在已经有许多缓存方案可供选择,其中包括:Zend
Cache,APC,和Afterburner Cache。

所有这些产品都属于“缓存模块”。当第一次出现对.php文件的请求时,它们会在Web服务器内存中保存PHP的中间代码,此后就用“经过编译”的版本响应后继的请求。这种方法确实能够改善应用的性能,因为它使得磁盘访问量减低到了最少的程度(代码已经读取和解析),代码直接在内存中运行使得服务器响应请求的速度大大提高。当然,缓存模块还会监视PHP源文件的变化,必要时重新缓存页面,从而防止了用户得到的页面仍旧由过时的PHP代码生成。由于缓存模块能够明显地降低服务器的负载、提高PHP应用的响应效率,因此它们非常适合于负载较大的网站使用。

如何选择这些缓存产品

Zend Cache是Zend Technologies公司的商业软件,而Zend
Technologies就是前面提到的那个为我们提供PHP引擎和免费Zend Optimizer的公司。Zend
Cache确实是名不虚传!对于大型的PHP页面,你可以感觉到第一次运行之后速度就会有所提高,而且服务器也会有更多的可用资源。遗憾的是这个产品并不免费,不过在有些情形下它仍旧是物超所值。

Afterburner Cache是来自Bware Technologies的免费缓存模块,当前这个产品还是Beta版。Afterburner
Cache的做法看起来与Zend Cache差不多,但它对性能的改善程度(还)不能与Zend Cache相比,而且它还不能与Zend
Optimizer一起工作。

APC是Alternative PHP Cache的缩写,它是来自Community
Connect的又一个免费缓存模块。这个产品已经具有足够的稳定性供正式场合使用,而且它看起来也能在很大程度上提高响应请求的速度。

有关压缩

来自Remote
Communications的免费Apache模块mod_gzip就具有为支持这类内容编码的浏览器压缩静态Web内容的能力。对于绝大多数静态Web内容,mod_gzip都非常有效。mod_gzip可以方便地编译到Apache里面,也可以作为DSO使用。据Remote
communications公司说,mod_gzip也能够压缩来自mod_php、mod_perl等的动态内容。我试了一次又一次,但看来还是不行。我看了许多关于mod_gzip的论坛和文章,看来到了mod_gzip的下一个版本(可能是1.3.14.6f)这个问题有望得到解决。在此之前,我们可以在网站的静态部分使用mod_gzip。

然而有时我们确实蹊要压缩动态内容,所以必须找找其他办法。有一种办法是使用class.gzip_encode.php,这是一个可以用来压缩页面内容的PHP类,具体方法是在PHP脚本的开头和末尾调用该类的某些函数。如果要在网站级实现这个方案,可以从php.ini文件的auto_prepend以及auto_append指令调用这些函数。这种方法虽然有效,但它无疑为高负载的网站带来了更多的开销。关于如何使用这个类的详细说明,请参见它的源代码。它的源代码说明相当完善,作者告诉了你所有你必须知道的事情。

PHP
4.0.4有一个新的输出缓存句柄ob_gzhandler,它与前面的类相似,但用法不同。使用ob_gzhandler时要在php.ini中加入的内容如下:

output_handler = ob_gzhandler
;

这行代码使得PHP激活输出缓存,并压缩它发送出去的所有内容。如果由于某种原因你不想在php.ini中加上这行代码,你还可以通过PHP源文件所在目录的.htaccess文件改变默认的服务器行为(不压缩),语法如下:

php_value
output_handler ob_gzhandler

或者是从PHP代码调用,如下所示:
ob_start("ob_gzhandler");

采用输出缓存句柄的方法确实非常有效,而且不会给服务器带来什么特殊的负荷。但必须注意的是,Netscape
Communicator对压缩图形的支持不佳,因此除非你能够保证所有用户都使用IE浏览器,否则你应该禁止压缩JPEG和GIF图形。一般地,对于所有其他文件,这种压缩都有效,但建议你针对各种浏览器都分别进行测试,特别是当你使用了特殊的插件或者数据查看器时这一点尤其重要。

阅读提示:PEAR 的缓冲包提供了缓冲动态内容,数据库查询和 PHP 函数调用的框架。本文介绍如何采用 PEAR 来缓冲 PHP 程序

采用 PEAR 来缓冲 PHP 程序

PHP 世界中缓冲是一个热门的话题,因为 PHP 产生的动态页面,每次用户请求都需要重新计算,不论请求的结果是否一样,同时,PHP
每次都会编译一次脚本。这样的超负荷运转对一个流量很高的网站来说肯定难以忍受。幸运的是, Web 的结果可以缓冲,而不需要重新运行和编译脚本,商品化的产品像
ZendCache 或者开源的 Alternate PHP Cache都提供了把 PHP 脚本编译为字节代码并缓冲的办法。

PEAR
的缓冲包提供了缓冲动态内容,数据库查询和 PHP 函数调用的框架。

就像 Perl 有 CPAN, TeX 有 CTAN,PHP
也有自己的中心资源库,存放类,库和模块。这个库称为 PEAR(PHP Extension and Add-On
Repository)。

本文假设你已经安装了 PEAR 环境,如果没有的话,可以去 PHP 网站下载。PEAR
的缓冲包包含一个总体的缓冲类和几个特别的子类。缓冲类使用容器类来存贮和管理缓冲数据。

下面是 PEAR
缓冲当前所包含的容器,以及各自的参数:

file -- file 容器在文件系统存储了缓冲的数据,是最快的容器。

cache_dir
-- 这是容器存储文件的目录。

filename_prefix -- 缓冲文件的前缀,例如:"cache_"。

shm -- shm
容器把缓冲数据放入共享内存,基准测试显示,目前的实现下,这个容器的速度要比文件容器慢。

shm_key --
共享内存使用的键值。

shm_perm -- 使用共享内存数据段的权限。

shm_size --
分配共享内存的大小。

sem_key -- 信号灯的键值。

sem_perm -- 信号灯的权限。

db --
PEAR 的数据库抽象层。

dsn -- 数据库连接的 DSN 。可以参考 PEAR 的 DB 文档。

cache_table --
表的名字。

phplib -- phplib
容器使用数据库抽象层存储缓冲。

db_class

db_file

db_path

local_file

local_path

ext/dbx
-- PHP
的数据库抽象层扩展,如果像把缓冲存入数据库,可以采用这个容器。

mole

host

db

username

password

cache_table

persistent

使用
PEAR Cache 所得到的性能提升取决于你所选择的缓冲容器,例如,把数据库的结果再次存入数据库缓冲中就显得毫无意义。

PEAR Cache
的函数缓冲模块能把任何函数或者方法的结果缓冲,不论是 PHP
的内置函数还是用户自定义函数,他缺省采用文件容器,把缓冲数据放入到一个叫做function_cache 的目录。

Cache_Function
类的构造器可以有三个可选的参数:

$container :缓冲容器的名字。

$container_options
:缓冲容器的数组参数。

$expires:缓冲对象过期的时间(秒数)。

普通的函数调用采用 Cache_Function 类的
call() 方法时,就能触发缓冲。调用 call()
很容易,的一个参数是函数的名字,然后是函数的参数,第二个参数是要调用函数中的第一个,依此类推,我们来看例子:

例1
缓冲函数和方法的调用
// 调用 PEAR Cache 的函数缓冲。

require_once
'Cache/Function.php';

// 定义一些类和函数。

class foo {

function
bar($test) {

echo
"foo::bar($test)

";

}

}

class bar {

function
foobar($object) {

echo
'$'.$object.'->foobar('.$object.')

';

}

}

$bar =
new bar;

function foobar() {

echo 'foobar()';

}

//
取得 Cache_Function 对象

$cache = new Cache_Function();

// 对 foo
类的静态函数 bar() 作缓冲(foo::bar())。

$cache->call('foo::bar',
'test');

// $bar->foobar()

$cache->call('bar->foobar',
'bar');

$cache->call('foobar');

?>

下面我们采用
Cache_Output 来把输出作缓冲:

例2 缓冲脚本的输出

// 加载 PEAR
Cache 的输出缓冲

require_once 'Cache/Output.php';

$cache = new
Cache_Output('file', array('cache_dir' => '.') );

//
计算要缓冲页面的标记,我们假定页面的缓冲取决于

// URL, HTTP GET 和 POST 变量以及
cookies。

$cache_id = $cache->generateID(

array('url' =>
$REQUEST_URI, '

post' => $HTTP_POST_VARS, 'cookies' =>
$HTTP_COOKIE_VARS) );

// 查询缓冲

if ($content =
$cache->start($cache_id)) {

// 缓冲命中

echo
$content;

die();

}

// 缓冲丢失

// -- 在这里插入内容产生代码
--

// 把页面存入缓冲

echo $cache->end();

?>
利用 Cache_Output 类,很容易把一个动态的数据库驱动的网站应用转化为静态,从而极大的提升站点的性能。越来越多的站点在采用 GZIP 压缩
HTML 内容,这样减少了服务器的带宽消耗,对于使用 Modem 上网的用户来说也能受益不少。

Cache_OutputCompression
扩展了 Cache_Output 类的功能,他把 GZIP 压缩的 HTML 内容进行缓冲,从而节省了 CPU 压缩的时间。

阅读提示:在本篇文章中,我们将对PHP应用程序的分析、如何改变脚本代码以及比较优化前后的各种参数值进行简要的介绍。

PHP应用程序的性能优化

使用PHP编程的最大好处是学习这种编程语言非常容易以及其丰富的库。即使对需要使用的函数不是十分了解,我们也能够猜测出如何完成一个特定的任务。

尽管PHP非常简单易学,但我们仍然需要花费一点时间来学习PHP的一些编程技巧,尤其是与性能和内存占用相关的技巧。在PHP中,有许多小技巧能够使我们减少内存的占用,并提高应用程序的性能。在本篇文章中,我们将对PHP应用程序的分析、如何改变脚本代码以及比较优化前后的各种参数值进行简要的介绍。

通过在程序中设置计时的程序,并反复执行这些代码,我们可以获得有关程序执行速度的一组数据,这些数据可以可以用来发现程序中的瓶颈,以及如何进行优化,提高应用程序的性能。

也许读者曾经听说过PEAR库吧。我们将使用PEAR库创建在分析时需要使用的例子,这也是对现有的代码进行分析的最简单的方法,它使我们无需使用商用产品就能对代码进行分析。

我们要使用的库的名字是PEAR::Benchmark,它对于对代码进行分析和性能测试非常有用。这个库提供一个名字为Benchmark_Timer()的类,能够记录一个函数调用和下一个函数调用之间的时间。在对代码的性能进行测试时,我们可以得到一个详细的脚本执行结果,它非常简单,如下所示:
include_once("Benchmark/Timer.php");

$bench
= new Benchmark_Timer;

$bench-> start();

$bench->
setMarker('Start of the script');

//
现在处于睡眠状态几分钟

sleep(5);

$bench-> stop();

//
从计时器中获得分析信息

print_r($bench->
getProfiling());

?>

上面代码执行后的输出如下所示:

Array

(

[0] => Array

(

[name] =>
Start

[time] => 1013214253.05751200

[diff] =>
-

[total] => 0

)

[1] =>
Array

(

[name] => Start of the script

[time] =>
1013214253.05761100

[diff] => 9.8943710327148E-05

[total]
=> 9.8943710327148E-05

)

[2] =>
Array

(

[name] => Stop

[time] =>
1013214258.04920700

[diff] => 4.9915959835052

[total] =>
4.9916949272156

)

)

上面的数字似乎是一组杂乱无章的数字,但如果程序的规模更大,这些数字就十分地有用了。

也许广大读者也能猜测到,数组的第一个表目是实际调用Benchmark_Timer()类的方法,例如

$bench->
start()、$bench-> setMarker()和$bench->
stop(),与这些表目有关的数字是相当简单的,现在我们来仔细地研究这些数字:

[0] => Array

(

[name] => Start

[time] => 1013214253.05751200

[diff] => -

[total] => 0

)

time表目指的是何时对Benchmark_Timer()的start()方法调用的UNIX的timestamp,diff表目表示这次调用和上次调用之间的时间间隔,由于这里没有上一次,因此显示出了一个破折号,total表目指的是自测试开始到这一特定的调用之前代码运行的总的时间。下面我们来看看下一个数组的输出:

[1]
=> Array

(

[name] => Start of the script

[time] => 1013214253.05761100

[diff] =>
9.8943710327148E-05

[total] => 9.8943710327148E-05

)
从上面的数字我们可以看出,在调用$bench->
start()之后,程序运行了9.8943710327148E-05秒(也就是0.0000989秒)后开始调用$bench->
setMarker(....)。

一次真实的性能测试经历

尽管上面的例子不错,但在对于决定如何优化你的站点代码设计方面,它真的不能算是一个好例子。下面我将用我自己作为网站技术人员的一段亲身经历来说明如何解决性能方面存在的问题。

我并不大理解网站使用的代码,因为它是根据特殊的需求,历经多年开发而成的━━其中的一个模块包括网站转换代码,另一个模块记录网站的使用情况,其他的模块也各有各的作用。我和网站的主要开发者都意识到网站的代码需要优化,但又不清楚问题出在哪儿。

为了尽快地完成任务,我开始研究网站的主要脚本代码,并在全部脚本代码以及其包含文件中添加了一些$bench->
setMarker()命令,然后分析$bench->
getProfiling()的输出,并对得到的结果大吃一惊,原来问题出在一个与获得特定语言名字(例如en代表english)的转换代码的函数调用中,该函数在每个页面上都会被使用数百次。每次调用该函数时,脚本代码都会对一个MySQL数据库进行查询,从一个数据库表中获得真正的语言名字。

于是我们这一类的信息创建了一个缓冲系统。经过短短2天时间的工作,我们使系统的性能得到了很大的提高,第一周内页面的浏览量也因此而增加了40%。当然了,这只是一个有关分析代码能够提高互联网应用或互联网网站性能的例子。

性能测试函数调用

在分析一个脚本或网页(以及其包含文件)时,尽管Benchmark_Timer()特别有用,但它并不科学,因为要获得分析的数据我们必须多次加载脚本,而且它也不是针对某个类或函数调用的。

PEAR::Benchmark库中的另一个被称作Benchmark_Iterator的类能够很好地解决这一个问题,它能够针对特定的函数或类的方法,显示其分析信息。它的用途是能够能够从测试中获得一致的结果,因为我们知道,如果运行一段脚本一次,其运行时间为10秒,并不意味着它每次的运行时间总是10秒。
In
any case, let's see some examples:

//
连接数据库的代码

include_once("DB.php");

$dsn = array(

'phptype'
=> 'mysql',

'hostspec' => 'localhost',

'database'
=> 'database_name',

'username' =>
'user_name',

'password' => 'password'

);

$dbh =
DB::connect($dsn);

function getCreatedDate($id)

{

global
$dbh;

> $stmt = "SELECT created_date FROM users WHERE
id=$id";

// 在这里使用PEAR::DB

$created_date = $dbh->
getOne($stmt);

if ((PEAR::isError($created_date)) ||

(empty($created_date))) {

return false;

} else
{

return $created_date;

}

}

include_once
'Benchmark/Iterate.php';

$bench = new Benchmark_Iterate;

//
运行getDate函数10次

$bench-> run(10, 'getCreatedDate', 1);

//
打印分析信息

print_r($bench-> get());

?> 运行上面的代码能够产生与下面相似的结果:

Array

(

[1] => 0.055413007736206

[2] =>
0.0012860298156738

[3] => 0.0010279417037964

[4] =>
0.00093603134155273

[5] => 0.00094103813171387

[6] =>
0.00092899799346924

[7] => 0.0010659694671631

[8] =>
0.00096404552459717

[9] => 0.0010690689086914

[10] =>
0.00093603134155273

[mean] => 0.0064568161964417

[iterations]
=> 10

)
上面的这些数字很好理解,mean条目表示getCreatedDate()函数10次运行的平均时间。在进行实际测试时,应该至少运行1000次,但这个例子得出的结果已经足够说明问题了。

⑤ php网站如何更新缓存

每个程序使用的缓存,可能都不一样,你最好找程序作者问一下

PHP 输出缓存详解

作者: 字体:[增加 减小] 类型:转载

Output Control
函数可以让你自由控制脚本中数据的输出。它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况。

输出控制函数不对使用 header() 或 setcookie(),
发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用。
我们先举一个简单的例子,让大家对Output
Control有一个大致的印象:
Example 1.

复制代码
代码如下:

<?php
ob_start(); //打开缓冲区
echo
\"Hellon\"; //输出
header(“location:index.php”); //把浏览器重定向到index.php

ob_end_flush();//输出全部内容到浏览器
?>

所有对header()函数有了解的人都知道,这个函数会发送一段文件头给浏览器,但是如果在使用这个函数之前已经有了任何输出(包括空输出,比如空格,回车和换行)就会提示出错。如果我们去掉第一行的ob_start(),再执行此程序,我们会发现得到了一条错误提示:“Header
had all ready send
by”!但是加上ob_start,就不会提示出错,原因是当打开了缓冲区,echo后面的字符不会输出到浏览器,而是保留在服务器,直到你使用
flush或者ob_end_flush才会输出,所以并不会有任何文件头输出的错误!
一、 相关函数简介:

1、Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。

2、ob_start :打开输出缓冲区
函数格式:void ob_start(void)

说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。

3 、ob_get_contents :返回内部缓冲区的内容。
使用方法:string
ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。

4、ob_get_length:返回内部缓冲区的长度。
使用方法:int
ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回
FALSE。
5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。

使用方法:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)。

6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
使用方法:void
ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除!

7、ob_implicit_flush:打开或关闭绝对刷新
使用方法:void
ob_implicit_flush ([int flag])

说明:使用过Perl的人都知道$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用
flush()
二、深入了解:
1. 关于Flush函数:

这个函数在PHP3中就出现了,是一个效率很高的函数,他有一个非常有用的功能就是刷新browser的cache.我们举一个运行效果非常明显的例子来说明flush.

Example 2.

复制代码
代码如下:

<?php
for($i = 1; $i <= 300; $i++
) print(“ “);
// 这一句话非常关键,cache的结构使得它的内容只有达到一定的大小才能从浏览器里输出
//
换言之,如果cache的内容不达到一定的大小,它是不会在程序执行完毕前输出的。经
//
过测试,我发现这个大小的底限是256个字符长。这意味着cache以后接收的内容都会
// 源源不断的被发送出去。
For($j = 1; $j
<= 20; $j++) {
echo $j.”
”;
flush();
//这一部会使cache新增的内容被挤出去,显示到浏览器上
sleep(1); //让程序“睡”一秒钟,会让你把效果看得更清楚
}

?>

具体效果你可以到这里看看http://www.php2000.com/~uchinaboy/out.php

PHP2000的最新的PHP聊天室就是用的这个技术,可惜的是源代码未公开 L

注:如果在程序的首部加入ob_implicit_flush()打开绝对刷新,就可以在程序中不再使用flush(),这样做的好处是:提高效率!

2. 关于ob系列函数:
我想先引用我的好朋友y10k的一个例子:
Example 3.

比如你用得到服务器和客户端的设置信息,但是这个信息会因为客户端的不同而不同,如果想要保存phpinfo()函数的输出怎么办呢?在没有缓冲区控制之前,可以说一点办法也没有,但是有了缓冲区的控制,我们可以轻松的解决:

复制代码
代码如下:

<?php
ob_start(); //打开缓冲区

phpinfo(); //使用phpinfo函数
$info=ob_get_contents(); //得到缓冲区的内容并且赋值给$info

$file=fopen(\'info.txt\',\'w\'); //打开文件info.txt
fwrite($file,$info);
//写入信息到info.txt
fclose($file); //关闭文件info.txt
?>

用以上的方法,就可以把不同用户的phpinfo信息保存下来,这在以前恐怕没有办法办到!其实上面就是将一些“过程”转化为“函数”的方法!

或许有人会问:“难道就这个样子吗?还有没有其他用途?”当然有了,比如笔者论坛的PHP
语法加亮显示就和这个有关(PHP默认的语法加亮显示函数会直接输出,不能保存结果,如果在每次调用都显示恐怕会很浪费CPU,笔者的论坛就把语法加亮函数显示的结果用控制缓冲区的方法保留了),大家如果感兴趣的话可以来看看http://www.zphp.com/bbs/!

可能现在大家对ob_start()的功能有了一定的了解,上面的一个例子看似简单,但实际上已经掌握了使用ob_start()的要点。

<1>.使用ob_start打开browser的cache,这样可以保证cache的内容在你调用flush(),ob_end_flush()(或程序执行完毕)之前不会被输出。

<2>.现在的你应该知道你所拥有的优势:可以在任何输出内容后面使用header,setcookie以及session,这是
ob_start一个很大的特点;也可以使用ob_start的参数,在cache被写入后,然后自动运行命令,比如
ob_start(\"ob_gzhandler\");而我们最常用的做法是用ob_get_contents()得到cache中的内容,然后再进行处理……

<3>.当处理完毕后,我们可以使用各种方法输出,flush(),ob_end_flush(),以及等到程序执行完毕后的自动输出。当然,如果你用的是ob_get_contents(),那么就要你自己控制输出方式了。

来,让我们看看能用ob系列函数做些什么……
一、 静态模版技术

简介:所谓静态模版技术就是通过某种方式,使得用户在client端得到的是由PHP产生的html页面。如果这个html页面不会再被更新,那么当另外的用户再次浏览此页面时,程序将不会再调用PHP以及相关的数据库,对于某些信息量比较大的网站,例如sina,163,sohu。类似这种的技术带来的好处是非常巨大的。

我所知道的实现静态输出的有两种办法:
<1>.通过y10k修改的phplib的一个叫template.inc.php类实现。

<2>.使用ob系列函数实现。
对于第一种方法,因为不是这篇文章所要研究的问题,所以不再赘述。

我们现在来看一看第二种方法的具体实现:
Example 4.
<?php
ob_start();//打开缓冲区

?>
php页面的全部输出
<?
$content =
ob_get_contents();//取得php页面输出的全部内容
$fp = fopen(“output00001.html”, “w”);
//创建一个文件,并打开,准备写入
fwrite($fp, $content);
//把php页面的内容全部写入output00001.html,然后……
fclose($fp);
?>

这样,所谓的静态模版就很容易的被实现了……
二、 捕捉输出
以上的Example
4.是一种最简单的情况,你还可以在写入前对$content进行操作……
你可以设法捕捉一些关键字,然后去对它进行再处理,比如Example
3.所述的PHP语法高亮显示。个人认为,这个功能是此函数最大的精华所在,它可以解决各种各样的问题,但需要你有足够的想象力……
Example 5.

<?
Function run_code($code) {
If($code) {
ob_start();

eval($code);
$contents = ob_get_contents();
ob_end_clean();

}else {
echo “错误!没有输出”;
exit();
}
return $contents;
}

以上这个例子的用途不是很大,不过很典型$code的本身就是一个含有变量的输出页面,而这个例子用eval把$code中的变量替换,然后对输出结果再进行输出捕捉,再一次的进行处理……

Example 6. 加快传输
<?
/*
** Title.........: PHP4 HTTP
Compression Speeds up the Web
** Version.......: 1.20
** Author........:
catoc <[email protected]>
** Filename......: gzdoc.php
** Last
changed..: 18/10/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) <[email protected]>
** 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.
**
** Modified
by John Lim ([email protected])
** based on ideas by Sandy McArthur, Jr

** Usage........:
** No space before the beginning of the first
\'<?\' tag.
** ------------Start of file----------
** |<?
** |
include(\'gzdoc.php\');
** |? >
** |<HTML>
** |... the page
...
** |</HTML>
** |<?
** | gzdocout();
** |? >

** -------------End of file-----------
*/
ob_start();

ob_implicit_flush(0);
function CheckCanGzip(){
global
$HTTP_ACCEPT_ENCODING;
if (headers_sent() || connection_timeout() ||
connection_aborted()){
return 0;
}
if (strpos($HTTP_ACCEPT_ENCODING,
\'x-gzip\') !== false) return \"x-gzip\";
if
(strpos($HTTP_ACCEPT_ENCODING,\'gzip\') !== false) return \"gzip\";
return
0;
}
/* $level = compression level 0-9, 0=none, 9=max */
function
GzDocOut($level=1,$debug=0){
$ENCODING = CheckCanGzip();
if ($ENCODING){

print \"n<!-- Use compress $ENCODING -->n\";
$Contents =
ob_get_contents();
ob_end_clean();
if ($debug){
$s = \"<p>Not
compress length: \".strlen($Contents);
$s .= \"
Compressed length:
\".strlen(gzcompress($Contents,$level));
$Contents .= $s;
}

header(\"Content-Encoding: $ENCODING\");
print
\"x1fx8bx08x00x00x00x00x00\";
$Size = strlen($Contents);
$Crc =
crc32($Contents);
$Contents = gzcompress($Contents,$level);
$Contents =
substr($Contents, 0, strlen($Contents) - 4);
print $Contents;
print
pack(\'V\',$Crc);
print pack(\'V\',$Size);
exit;
}else{

ob_end_flush();
exit;
}
}
?>

这是catoc的一段很早以前的代码,是在weblogs.com看到的,他利用了zlib的函数,对传输的内容进行了压缩,测试表明,对于10k以上的页面,会产生效果,而且页面越大,效果越明显……

⑥ 如何正确实现PHP网站优化

1、使用GZip

在每一个PHP页面顶部加入以下代码:

<?php ob_start("ob_gzhandler");?>

使用该代码后服务器会压缩所有需要传送到客户端的代码,并在浏览器中进行解压,从而使网站运行速度加快。这一功能还可以节省网站空间的流量。

2、不要滥用Javascript和Ajax

只在需要的时候才使用Javascript和Ajax,千万不要滥用它们。有些网站使用了太多不必要的Ajax动画,或使用Ajax来加载无用的部分。这样一来Javascript文件就会变得很大,而实际上却有很多其他方案来实现这些功能。

3、图片、头文件和HTTP请求

网页所引用的图片、外部文件以及CSS样式文件越多,网页就加载得越慢。花些时间把图片文件和其他外部文件缩小一些吧,使它们能更快地被加载。此外,每一次加载图片和外部文件时都会产生一个HTTP请求,这一定会拖延加载时间。

4、限制MySQL查询次数

对数据库的每一次请求都会使网页的加载速度减缓一些。网络开发者允许很难控制这一点,但是在一些细节的地方是可以进行优化的。比如,在选择数据库记录时,不要使用以下代码:

SELECT * FROM database

而是使用:

SELECT id, name, date, author, etc, blah, blah FROM database
这会消耗更少的查询时间并减少服务器的负载。

5、.php扩展名

有些人认为将JS文件保存为filename.js.php以及将CSS文件保存为stylesheet.css.php会让加载的时间减少些,但我并没有察觉到这其中的差别。当然,如果你网站的速度变得很慢,你可以试试这个方法。当然,你需要在每个PHP文件中用include()去载入这些文件。

⑦ PHP里的output_buffering 怎么开启

在PHP.INI可以设置以下与输出缓冲有关的:
名称 默认值 作用范围 修正记录
output_buffering "0" PHP_INI_PERDIR
output_handler NULL PHP_INI_PERDIR 自 PHP 4.0.4 起可用
implicit_flush "0" PHP_INI_ALL 在 PHP <= 4.2.3 版本中是 PHP_INI_PERDIR

简单解释如下:
output_buffering boolean/integer
该选项设置为 On 时,将在所有的脚本中使用输出控制。如果要限制输出缓冲区的最大值,可将该选项设定为指定的最大字节数(例如 output_buffering=4096)。从PHP 4.3.5 版开始,该选项在 PHP-CLI 下总是为 Off。

output_handler string
该选项可将脚本所有的输出,重定向到一个函数。例如,将 output_handler 设置为 mb_output_handler() 时,字符的编码将被修改为指定的编码。设置的任何处理函数,将自动的处理输出缓冲。

注意: 不能同时使用 mb_output_handler() 和 ob_iconv_handler(),也不能同时使用 ob_gzhandler() 和 zlib.output_compression。

注意: 只有内置函数可以使用此指令。对于用户定义的函数,使用 ob_start()。

implicit_flush boolean
默认为 FALSE。如将该选项改为 TRUE,PHP 将使输出层,在每段信息块输出后,自动刷新。这等同于在每次使用 print()、echo() 等函数或每个 HTML 块之后,调用 PHP 中的 flush() 函数。

不在web环境中使用 PHP 时,打开这个选项对程序执行的性能有严重的影响,通常只推荐在调试时使用。在 CLI SAPI 的执行模式下,该标记默认为 TRUE。

参见 ob_implicit_flush()。

设置了肯定会有用的,除非你修改的PHP.INI位置不是系统使用的那个,比如一般是C::\WINDOWS\PHP.INI,当然可以设置到其它地方。另外控制台程序是不缓冲的。

另外,你还可以在程序里面控制输出缓冲,请参考手册里面的“CXIV. Output Control 输出控制函数”那一章,主要有如下函数:

flush -- 刷新输出缓冲
ob_clean -- Clean (erase) the output buffer
ob_end_clean -- Clean (erase) the output buffer and turn off output buffering
ob_end_flush -- Flush (send) the output buffer and turn off output buffering
ob_flush -- Flush (send) the output buffer
ob_get_clean -- Get current buffer contents and delete current output buffer
ob_get_contents -- Return the contents of the output buffer
ob_get_flush -- Flush the output buffer, return it as a string and turn off output buffering
ob_get_length -- Return the length of the output buffer
ob_get_level -- Return the nesting level of the output buffering mechanism
ob_get_status -- Get status of output buffers
ob_gzhandler -- ob_start callback function to gzip output buffer
ob_implicit_flush -- Turn implicit flush on/off
ob_list_handlers -- List all output handlers in use
ob_start -- Turn on output buffering
output_add_rewrite_var -- Add URL rewriter values
output_reset_rewrite_vars -- Reset URL rewriter values

例子程序:

<?php

ob_start();
echo "Hello\n";

setcookie("cookiename", "cookiedata");

ob_end_flush();

?>

⑧ php框架中的初始文件一般会判断用ob_start('ob_gzhandler')还是ob_start(),那ob_end_clean在哪里呢

ob_start() 是启用内部缓冲区,将要输出的内容存储在内部缓冲区中,可以使用 ob_end_flush() 函数,在请求结束之际才会输出缓冲区内容到浏览器。
使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容
一般情况下如果使用了输出语句如 echo/print 等函数后数据就会输出到浏览器,那么执行 header() 或 setcookie()就会报错,启用 ob_start() 就是将数据临时存储在缓冲区,这样再执行执行 header() 或 setcookie()就不会报错。
ob_start('ob_gzhandler') 是启用缓存并启用 GZIP 压缩功能,这样输出到浏览器的数据流会更小

⑨ php问题@ob_start("ob_gzhandler");

千言万语。
建议搜索函数名,你将看到更详细的资料。
你可以在手册里搜,也可以在搜索引擎搜。
搜:
1.ob_start(看下方的链接)
2.ob_gzhandler(看下方的链接)
3.microtime

我搜到的一些,希望对你有所帮助。
http://hi..com/%B4%F3%CE%C3%D7%D3%D1%A7php/blog/item/84a4ce8d477f75e4f01f36d7.html

⑩ 如何用PHP实现页面的GZIP压缩输出

第一步,你需要对php的设置如下:
php.ini: output_buffering = Off output_handler = ob_gzhandler zlib.output_compression = Off zlib.output_compression_level = -1

第二步,你需要在apache下增加如下设置:

AddOutputFilter DEFLATE html php js css

这样就可以对html php js css进行gzip压缩了。

第三步,你需要使用如下php压缩html并输出到客户端的函数:

function compress_html($string) { return ltrim(rtrim(preg_replace(array("/> *([^ ]*) *</","//","'/\*[^*]*\*/'","/\r\n/","/\n/","/\t/",'/>[ ]+</'), array(">\\1<",'','','','','','><'),$string))); }

上面的这个正则表达式,很强大的哦,经过我本人亲自测试可使用。
通过以上方法,你就可以将你的html代码压缩然后输出给客户端了。不信你可以查看源代码,就是一行,网页瞬间压缩很小。

阅读全文

与phpobgzhandler相关的资料

热点内容
android伸缩控件 浏览:851
androidm3u8缓存 浏览:234
imphp开源知乎 浏览:706
清除网络通配符dos命令 浏览:837
鸿蒙系统怎么快速换回安卓 浏览:712
pdf绿色虚拟打印机 浏览:213
androidtab框架 浏览:147
java转php的时间戳 浏览:639
编译libstdc依赖 浏览:659
清算法人与原法人的区别 浏览:410
家庭装修下载什么app软件 浏览:576
美食博主用什么app拍视频 浏览:817
ipone手机如何加密微信 浏览:358
自来水加密阀阀帽 浏览:438
华为交换机dhcp配置命令 浏览:319
androidbitmap缩小 浏览:275
单片机串口控制灯 浏览:88
大讯云服务器安装视频 浏览:788
华为算法领先世界 浏览:658
linux路由重启 浏览:570