ホームページ  >  記事  >  バックエンド開発  >  Firefox プロンプト: コンテンツ エンコード エラーにより、表示しようとしているページを表示できません_PHP チュートリアル

Firefox プロンプト: コンテンツ エンコード エラーにより、表示しようとしているページを表示できません_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:57:11875ブラウズ

今日、クライアントの 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() 関数:

ヒント: set_magic_quotes_runtime() 関数は廃止されました。このプロンプトが表示される理由は、この機能が PHP6 で完全に削除されたためです。つまり、この関数は存在しません。間違った行をコメントまたは削除するか、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();
「その他のコンテンツ」をエコーし​​ます;
?>
上記のコードはさらに多くのコンテンツを出力することを期待していますが、実際には何も出力しません。

あそこでは普通だよ

エラー報告(E_ALL);
ob_start("ob_gzhandler");
「コンテンツ」をエコーする;
ob_end_clean();
ob_start("ob_gzhandler");
「その他のコンテンツ」をエコーし​​ます;
?>

以下のコールバック関数をカスタマイズして、再度テストしてください

関数 my_ob_gzhandler($buffer,$mod){
header("コンテンツエンコーディング: gzip");
gzencode($buffer, 9, FORCE_GZIP) を返します
}

エラー報告(E_ALL);

ob_start("my_ob_gzhandler");

「コンテンツ」をエコーする;
ob_clean();
「その他のコンテンツ」をエコーし​​ます;
?>
上記は正常ですが、ob_clean の代わりに ob_end_clean を使用すると、後続の出力が表示されなくなります。

したがって、次のコードでも、ob_clean または ob_end_clean を使用した後でも出力は空になります。

if (ini_get('zlib.output_compression')) {
if (ini_get('zlib.output_compression_level') != 9) {
ini_set('zlib.output_compression_level', '9');
}
ob_start();
} その他 {
if (strstr($_SERVER['HTTP_ACCEPT_ENCODING'], "gzip")) {
ob_start("ob_gzhandler");
} その他 {
ob_start();
}
}
?>

ページ圧縮を有効にする最も安定した方法は次のようになります

if(extension_loaded('zlib')) {
ini_set('zlib.output_compression', 'オン');
ini_set('zlib.output_compression_level', '3');
}
?>

ただし、ページ圧縮を有効にするために ob_gzhandler を使用する必要がある場合は、この記事の最初の文に注意する必要があります。

実際、以下のコードはブラウザに表示されないだけです

エラー報告(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

その他のコンテンツ

ホストへの接続が失われました。

より多くのコンテンツが出力されたことがわかります

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632098.html技術記事今日、クライアントの Web サイトの整理を手伝っていたときに、Firefox で次のプロンプトを見つけました。無効な圧縮形式またはサポートされていない圧縮形式が使用されているため、コンテンツ エンコード エラーにより、表示しようとしているページを表示できません...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。