2011-05-07 153 views
0

我正面临我的服务器负载问题。我检查了我所有的问题和其他东西的,但他们是好finaly我发现它来源于此功能html压缩问题

function compress($buffer) { 
    $buffer = str_replace("\t", '', $buffer); 
    return $buffer; 
    } 

ob_start("ob_gzhandler"); 
ob_start("compress"); 

当我删除功能的负载来正常的问题。

有关这个问题的任何想法。

问候

+0

摆脱“压缩”功能,这是毫无意义的。两个处理程序中哪一个造成问题? – 2011-05-07 19:07:47

+0

我也不明白,它应该怎么做? – 2011-05-07 19:09:15

+0

你究竟得到了什么错误?在Apache {debug,error} .log中有什么东西吗?是不是有一些非UTF ecoded错字?你不是在重新定义同名的函数么? – 2011-05-07 19:11:27

回答

0
ob_start("ob_gzhandler"); 

此方法依赖Apache服务器上,并且另外地,mod_gzip的模块必须安装和加载。记住使用压缩时,服务器上的压缩只有在浏览器请求压缩内容时才会激活,如果浏览器不理解压缩内容或不请求压缩内容,则服务器只是简单地为未压缩的内容提供服务!

上面提到的方法既快速又简单,但缺点是只能在mod_gzip上使用Apache。不仅如此,而且根据Php手册,这不是gzip的首选方法。

默认情况下,压缩级别设置为6。更高的压缩级别意味着服务器CPU上的负载更大。您可能想要尝试使用这些级别来查找可以在服务器上为可接受的负载量提供良好压缩的值。

要更改压缩级别,只需ob_start之前插入以下行(“ob_gzhandler”):

ini_set('zlib.output_compression_level', 4); 
ob_start("ob_gzhandler"): 

还有一件事,如果你使用的是PHP然后使用gzip压缩记得关闭压缩,如果使用gzip压缩没有关闭,那么它有时会导致服务器负载。刷新输出到浏览器与ob_end_flush

的gzip
ob_end_flush(); 

Recommandations使用连接:

方法1:

如果你在所有页面做压缩,那么我会建议使用.htaccess方法,因为它很容易实现,通过.htaccess文件你可以进一步配置服务器配置。现在启用gzip压缩,将以下行添加到.htaccess文件中。

php_value output_handler ob_gzhandler 

方法2:

通过PHP优化的方式使用gzip压缩的正确方法是:

// 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(); 

希望这将解决您的服务器负载问题。