今日、クライアントの Web サイトの整理を手伝っていたときに、Firefox で次のプロンプトを見つけました。無効な圧縮形式またはサポートされていない圧縮形式が使用されているため、コンテンツ エンコード エラーにより、表示しようとしているページを表示できません。クライアントが PHP であることがわかりました。原因は ob_gzhandler にある可能性があります。その解決策を以下にまとめます。
Firefoxエラーコード:
コンテンツエンコードエラー
表示しようとしているページは、無効な圧縮形式またはサポートされていない圧縮形式を使用しているため、表示できません。
この問題については、ウェブサイトの所有者に連絡してください
エラーの原因と解決策:
1. PHP プログラムに警告やエラー プロンプトがないことを確認します
2. PHP コード ob_start('ob_gzhandler') が原因です。 理由は 2 つあります。
a. サーバーはこの圧縮形式をサポートしていません。function_exists('ob_gzhandler') を使用して判断できます。ob_start('ob_gzhandler') を
に変更します。
b. ob_start('ob_gzhandler') を使用する場合、先頭にすでにコンテンツが出力されているため、以前のコンテンツと、require include 呼び出しファイルのコンテンツを確認します。見つからない場合は、他のファイルを呼び出す前に ob_start() を使用し、呼び出し後に ob_end_clean () を使用して出力コンテンツをクリアします。
3. set_magic_quotes_runtime() 関数:
4. PHP5.30 バージョンでは、デフォルトでこのような構文がサポートされなくなりました。出力変数は php echo $username;?> 構文を使用する必要があります。 php.ini の short_open_tag を On に設定することで、元の構文との互換性を保つことができます。
GZIP 圧縮を有効にする ob_start('ob_gzhandler') に関する php のバグ
ob_start("ob_gzhandler") を使用する場合
ob_clean() 後の出力は表示されません。これはバグです。
ob_clean();
の代わりに ob_end_clean();ob_start("ob_gzhandler") を使用できます。
それ以外の場合、後続の出力コンテンツは空になります。
エラー報告(E_ALL);
ob_start("ob_gzhandler");
「コンテンツ」をエコーする;
ob_clean();
「その他のコンテンツ」をエコーします;
?>
上記のコードはさらに多くのコンテンツを出力することを期待していますが、実際には何も出力しません。
あそこでは普通だよ
「コンテンツ」をエコーする;
ob_clean();
「その他のコンテンツ」をエコーします;
?>
上記は正常ですが、ob_clean の代わりに ob_end_clean を使用すると、後続の出力が表示されなくなります。
したがって、次のコードでも、ob_clean または ob_end_clean を使用した後でも出力は空になります。
実際、以下のコードはブラウザに表示されないだけです
エラー報告(E_ALL);
ob_start("ob_gzhandler");
「コンテンツ」をエコー;
ob_clean();
「その他のコンテンツ」をエコーします;
でも、テストしてみたら
telnet ローカルホスト 80
/test.php HTTP/1.0 を取得
<入力>
<入力>
以下の情報が返されます
HTTP/1.1 200 OK
日付: 2009 年 2 月 20 日金曜日 15:40:17 GMT
サーバー: Apache/2.2.6 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
変更: エンコーディングを受け入れる
コンテンツの長さ: 12
接続: 閉じる
コンテンツタイプ: text/html
その他のコンテンツ
ホストへの接続が失われました。
より多くのコンテンツが出力されたことがわかります
。