我正面临服务器负载问题。我检查了所有的查询和其他东西,但他们是最终我发现它来自这个功能的问题
function compress($buffer) {
$buffer = str_replace("\t", '', $buffer);
return $buffer;
}
ob_start("ob_gzhandler");
ob_start("compress");
当我删除该功能时,负载正常。
关于这个问题的任何想法。
此致
答案 0 :(得分:0)
ob_start("ob_gzhandler");
此方法依赖于Apache服务器,此外,还必须安装和加载mod_gzip模块。在使用压缩时,记住,只有当浏览器不能理解压缩内容或者没有请求压缩内容时,服务器上的压缩才会激活,服务器只是服务于简单的未压缩内容!
上面提到的方法既快速又简单,但是它的缺点是它只适用于带有mod_gzip的Apache。不仅如此,但根据Php手册,这不是gzipping的首选方法。
默认情况下,压缩级别设置为6。压缩级别越高意味着服务器CPU的负载越大。您可能希望尝试使用这些级别来查找一个值,该值可以为服务器上可接受的负载量提供良好的压缩。
要更改压缩级别,只需在ob_start(“ob_gzhandler”)之前插入以下行:
ini_set('zlib.output_compression_level', 4);
ob_start("ob_gzhandler"):
另一件事,如果你使用PHP gzipping然后记得关闭压缩,如果gzipping没有关闭,那么它有时会导致服务器加载。使用ob_end_flush
将输出刷新到浏览器ob_end_flush();
推荐使用GZip连接:
方法1:
如果你在所有页面上进行压缩,那么我建议使用.htaccess方法,因为它实现起来非常简单,通过.htaccess文件,你可以进一步配置服务器配置。现在要启用gzip压缩,请将以下行添加到.htaccess文件中。
php_value output_handler ob_gzhandler
方法2:
通过PHP优化方式使用Gzipping的正确方法是:
// Include this function on your pages
function print_gzipped_page() {
global $HTTP_ACCEPT_ENCODING;
if( headers_sent() ){
$encoding = false;
}elseif( strpos($HTTP_ACCEPT_ENCODING, 'x-gzip') !== false ){
$encoding = 'x-gzip';
}elseif( strpos($HTTP_ACCEPT_ENCODING,'gzip') !== false ){
$encoding = 'gzip';
}else{
$encoding = false;
}
if( $encoding ){
$contents = ob_get_contents();
ob_end_clean();
header('Content-Encoding: '.$encoding);
print("\x1f\x8b\x08\x00\x00\x00\x00\x00");
$size = strlen($contents);
$contents = gzcompress($contents, 9);
$contents = substr($contents, 0, $size);
print($contents);
exit();
}else{
ob_end_flush();
exit();
}
}
// At the beginning of each page call these two functions
ob_start();
ob_implicit_flush(0);
// Then do everything you want to do on the page
echo 'Hello World';
// Call this function to output everything as gzipped content.
print_gzipped_page();
希望这可以解决您的服务器加载问题。