2010-09-04 84 views
6

輸出緩衝存在一些問題。主要是,我試圖通過ob_gzhandler回調來運行輸出緩衝,但它一直告訴我它使用不受支持的壓縮類型。一切都被使能,我相信問題是,在我的腳本的起動器運行ob_get_level()產生1. php.ini中的水平我output_buffering設置爲4096ob_get_level()從級別1開始

如果我運行類似:

while(ob_get_level() > 0){ 
    ob_end_clean(); 
} 

然後我可以用ob_gzhandler回調成功運行ob_start()。但我想知道這是否應該是一個問題。在我的腳本中,我在各個點上調用ob_clean(),因爲我避免堆疊太多的緩衝區,因爲我讀過這可以提高性能。我只是不確定我應該在這裏做什麼。

乾杯。

回答

7

默認啓用了輸出緩衝(請參閱the docs) - 這基本上意味着每個PHP腳本都以ob_start()開頭。

如果要禁用所有PHP腳本的默認OB,請在php.ini中設置output_buffering = Off

如果您只想爲此特定腳本禁用默認OB,請使用while循環 - 這非常正確。

至於ob_clean - 您確定要刪除緩衝區中的輸出嗎?海事組織並不是真的有必要,除非你看到顯着緩慢的頁面加載。不要擔心優化(至少不是現在)。

+0

是的,我相信我是。它被設置爲:output_buffering = 4096(我在上面說過)。我得到的是,我應該保持原樣,只需運行上面的循環,以便我可以開始輸出緩衝ob_gzhandler? – 2010-09-04 09:24:25

+0

@Jason Lewis:這取決於你。我可能會爲所有腳本保留默認的OB,並在我想使用自己的情況下用'while'循環終止它。 – Piskvor 2010-09-04 09:28:43

+0

我的意思是說我在幾個地方使用ob_get_clean(),將輸出存儲在一些變量中,並最終將其刷新。這是做這件事的好方法,還是應該爲每個我想要捕獲輸出的地方啓動一個新的緩衝區,並使用ob_get_flush()來代替? – 2010-09-04 10:01:21