2
我使用PHP 7.1,我用下面的僞代碼來生成我的網站:PHP ob_start(「ob_gzhandler」)與ob_clean錯誤
<?php
ob_start("ob_gzhandler", 0, PHP_OUTPUT_HANDLER_CLEANABLE);
try{
echo "<h1>My awesome webpage!</h1>";
... more code that can throw exceptions...
echo "<h2>Welcome to my awesome webpage!</h2>";
}catch(\Throwable $e){
ob_clean();
echo "My awesome webpage crashed :((";
}
如果沒有異常被拋出,所有作品預期:網站被輸出並壓縮。 You can see the result here
但是,當異常被拋出時,意想不到的事情發生(link to the result):根據需要,只有文本後ob_clean輸出()被髮送到瀏覽器,但它可以在不正確解碼。
這個問題似乎與瀏覽器無法識別壓縮頁面的輸出有關。
深入研究這個問題,看起來,當調用ob_clean
時,標題content-encoding
不會發送到瀏覽器。爲了證實這一假設,我試圖手動設置該標題,並且一切按預期工作(link)。
<?php
ob_start("ob_gzhandler", 0, PHP_OUTPUT_HANDLER_CLEANABLE);
try{
echo "<h1>My awesome webpage!</h1>";
throw new \Exception("Whops");
echo "<h2>Welcome to my awesome webpage!</h2>";
}catch(\Throwable $e){
ob_clean();
header('content-encoding:gzip'); //Why PHP?... WHYYY?!?!?
echo "My awesome webpage crashed :((";
}
我的問題是這樣的:因爲ob_start(「ob_gzhandler」)並不總是使用gzip壓縮(例如,當瀏覽器不支持的話),我的工作圍繞手動設置標題是不可行。我怎樣才能達到相同的結果,而不使用一些可怕的黑客?
你有沒有報告過這是一個錯誤? – Andrea
「我怎樣才能達到同樣的結果,而不使用一些可怕的黑客?」說實話,如果我在你的鞋子裏,我根本不會使用ob_gzhandler。我會配置你的httpd/proxy來爲你做gzip,而不是試圖用PHP來處理它。 –
@Andrea我不知道這是否是一個錯誤,如果我做錯了 – Spotlight