エラー330(net :: ERR_CONTENT_DECODING_FAILED):


98

最近、新しいサーバーに移行しました。2日後、次の問題が発生しました

1)セッションテーブルでクラッシュが発生しました。修復することで簡単に修正できました

2)広告サーバーとしてOpenXを実行しましたが、クラッシュしましたが、error.logに証拠はありません。ログインできますが、dashboard.phpを見ると、次のようになります。

Error 330 (net::ERR_CONTENT_DECODING_FAILED): (Google Chrome)

そして

表示しようとしているページは、無効またはサポートされていない形式の圧縮を使用しているため、表示できません。(Firefox)


OpenXはPHPで次のサービスを使用します。

OpenXには以下が必要です:http ://www.openx.com/docs/2.8/adminguide/System%20requirements

OpenXはデフォルトのPHP設定を使用します。ただし、サーバー管理者はこれらの設定を変更することがあります。OpenXをインストールする前に、次の設定が正しいことを確認してください。

magic_quotes_runtimeはオフにする必要がありますsafe_modeはオフにする必要がありますregister_argc_argvはオンにする必要があります。

いずれかのmysql拡張子、またはpgsqlmysqli拡張機能はサポートされていません。ZLib拡張機能Flash MX。によって生成された圧縮Flashファイル内のリンクを変換します。FTP拡張。これが存在しない場合、OpenXはそれをシミュレートしようとしますが、これは安定性の低いソリューションになる可能性があります。

ホームページにグラフを生成するGD拡張。拡張機能が有効になっていないと、ホームページにグラフや統計を表示できません。ホームページにログオンするには、openssl拡張またはSSL対応のcurl拡張のいずれかが必要です。SSLが有効になっていない場合、ホームページにエラーメッセージが表示されますが、操作に影響はありません。


考えられる理由や、より多くの情報を収集する方法についての手がかりは、高く評価されます。ありがとう

回答:


133

これは、HTTPリクエストのヘッダーでコンテンツがgzipエンコードされていると主張されている場合に発生しますが、そうではありません。gzipエンコード設定をオフにするか、コンテンツが実際にエンコードされていることを確認してください。


これで私の問題は解決されました。使用しているブラウザがgzip圧縮をサポートしていない場合に発生するエラーであるかどうかを誰かが知っているのであれば、私は興味がありますか?
電球

6
PHPがgzip圧縮されたコンテンツの上にプレーンテキストの警告を出力していたときに、この問題に遭遇しました。
マイクコーザー

プレーンテキストファイルがApacheキャッシュでスタックしているときにこの問題が発生しましたが、ブラウザーはgzip圧縮されたコンテンツを期待していました
Ljudevit


21

コードは、記録中にBOMなしでUTF8を保存する必要があります。(Notepad ++)またはその他のコーディングツールでコードを記述し、UTF8エンコードを使用すると、このエラーが発生することがあります。すみません、英語がわかりません。これは私の経験です。


+1これも私の問題でした。Shift-Escapeに十分な速さでヒットしなかったため、ハードリブートを実行する必要がありました:( 8.誤ってctrl-s-somethingを
押して

7

このエラーは、出力バッファリングモジュール拡張(ob_gzhandler)が追加されたために発生しました。出力バッファリングは、ob_start()の開始時とob_flush()の終了時に使用します。

<?php   
    ob_start( 'ob_gzhandler' ); 
    echo json_encode($array);
    ob_end_flush();
?>

これを使って:

<?php   
    ob_start(); 
    echo json_encode($array);
    ob_flush();
?>

php.iniでzlib.output_compressionを有効にすることと連動します。ちなみに-[PHP.net](php.net/manual/en/function.ob-gzhandler.php)は、ob_gzhandler()よりもzlib.output_compressionを使用する方が好ましいと述べています。
Kristjan Adojaan 2017

5

Codeigniterフレームワークを使用する場合は、これを構成ファイルに追加するだけです。

$config['compress_output'] = FALSE;

そして、php.ini設定ファイルで、以下を使用します:

zlib.output_compression=On

実際にphp.iniディレクティブの値を変更すると、修正が行われますgzipped。これにより、すべての出力が強制的に適用されます。構成Codeigniterはヘッダーを設定し、それを出力に適用するのはWebアプリケーションサーバーの責任です。を$config['compress_output'] = TRUE残しながら設定してみましたzlib.output_compression=On。同じ効果があります。方向の+1。
codarrior 2017年

2

このob_start(ob_gzhandler)機能を使っていますか?その場合、およびob_start(ob_gzhandler)関数の上にコンテンツを出力すると、このエラーが発生します。この関数を使用したり、この関数の上にコンテンツを出力したりすることはできません。ob_gzhandlerコールバック関数が受け入れるブラウザをコードするコンテンツの種類を決定し、それに応じて出力を返します。したがって、この関数の上にコンテンツを出力する場合、コンテンツのエンコーディングがの出力コンテンツと異なるob_gzhandler可能性があり、それがこのエラーの原因です。


2

まだこの嫌な問題の原因を探している人がいる場合、原因となっているファイルを釘付けにする解決策があります。https://www.drupal.org/node/1622904#comment-10768958からDrupalコミュニティ。

そして私は引用します:

編集する

includes/bootstrap.inc:

機能drupal_load()。短い機能です。次の行を見つけます:include_once DRUPAL_ROOT . '/' . $filename; 一時的に次の ものに置き換えます

ob_start();
include_once DRUPAL_ROOT . '/' . $filename;
$value = ob_get_contents();
ob_end_clean();
if ($value !== '') {
  $filename = check_plain($filename);
  $value = check_plain($value);
  print "File '$filename' produced unforgivable content: '$value'.";
  exit;
}

これをありがとう。これは私の問題を追跡するのに役立ち、コードが含まれていないカスタムdrupalモジュールがありました。追加して<?php修正しました。
ショーンバニスター

2

これを取得している他の人のためのもう一つのアイデア...

私はgzip圧縮されたsvgをいくつか持っていましたが、出力にphpエラーがあり、このエラーメッセージが表示されました。(gzipバイナリの途中にテキストがあったため。)phpエラーを修正して解決しました。


同意して、圧縮をオンにする前にすべてのPHPエラーログを確認してください。特に、最近zlib圧縮をオフにしておらず、現在エラーが発生している場合。これと同じエラーを引き起こしていた不正なDBクエリを修正しただけです。有効にzlib.output_compressionすると、文字化けしたブラウザが表示されます。
バート

2

php.iniで gzip圧縮を有効にます。

zlib.output_compression = On

これを.htaccessファイルに追加します。

<IfModule mod_deflate.c>
  # Compress HTML, CSS, JavaScript, Text, XML and fonts
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
  AddOutputFilterByType DEFLATE application/x-font
  AddOutputFilterByType DEFLATE application/x-font-opentype
  AddOutputFilterByType DEFLATE application/x-font-otf
  AddOutputFilterByType DEFLATE application/x-font-truetype
  AddOutputFilterByType DEFLATE application/x-font-ttf
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE font/opentype
  AddOutputFilterByType DEFLATE font/otf
  AddOutputFilterByType DEFLATE font/ttf
  AddOutputFilterByType DEFLATE image/svg+xml
  AddOutputFilterByType DEFLATE image/x-icon
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/xml

  # Remove browser bugs (only needed for really old browsers)
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  Header append Vary User-Agent
</IfModule>

1

私はこの問題を経験していました サイトとこのスレッドの他のソリューションのどれも助けにはなりませんでした。いくつかのトラブルシューティングを行った後、local.settings.phpに次のようにスペースのある終了タグがあることがわかりました。

<?php
$databases = array(
  'default' =>
  array (
    'default' =>
    array (
      'driver' => 'mysql',
      'database' => 'xxx',
      'username' => 'xxx',
      'password' => 'xxx',
      'port' => '',
      'host' => 'xxx',
    ),
  ),
);
?>
 

local.settings.phpを次の解決済みに更新:

<?php
$databases = array(
  'default' =>
  array (
    'default' =>
    array (
      'driver' => 'mysql',
      'database' => 'xxx',
      'username' => 'xxx',
      'password' => 'xxx',
      'port' => '',
      'host' => 'xxx',
    ),
  ),
);

ここでは、「?>」終了PHPタグは必要ありません。終了タグを使用する場合は、その後に文字や空白がないことを確認する必要があります。


1

今朝私がこの問題の原因を理解したとき、少しダミーの瞬間がありました。

奇妙なことに、リクエストはFirefoxとChromeの両方で失敗しましたが、Fiddler Webデバッガーを介してアクセスしようとしたときに機能しました。

私にとっての問題は、プロジェクトのPHPファイルの1つに文字を誤って入力していたことです。Gitでプロジェクトの変更を確認するまで、このことに気づきませんでした。

私の場合、私は持っていました:m<?php runMyProgram(); ?>

mを消去すると、再び機能し始めました。


phpタグを開く前の空白は、同じエラーを引き起こす可能性があります。
ディープセル

1

私の場合、IISにApacheでプロキシする必要のある新しいアプリケーションを追加するときに発生しました。

コンテンツを取得するために設定ProxyHTMLEnable Onする必要がありましたProxyHTMLEnable Off。(ほとんどのjsコードがエラーを引き起こしたようですが、これにより少なくとも何かをすることができました。)

IISがページコンテンツを送信しています Content-Encoding: gzip

<Proxy "http://192.168.1.1:81">
    ProxyHTMLEnable On   #> change this to Off
    ProxyHTMLURLMap  ...  ...
</Proxy>

0

システムをリバイブにアップグレードするときにもこの問題が発生しました。GZIPを有効にした後も、問題が解決しないことがわかりました。さらに調査したところ、アップグレード後にファイルの権限が正しくないことがわかりました。単純な再帰的なchmodでうまくいきました。



0

はるかに一般的な答えは、あなたがあなたの圧縮するものに追加されているいくつかのエラーがあるということです。解決策はdisplay_errors = Off、php.iniファイルに設定することです(実行してターミナルがオンになっているかどうかを確認し、php --info「display_errors」を探します)。

それでうまくいくはずです。また、実際にどのようなエラーを発見しているのですか?そのルート/ページにアクセスするたびに、PHPエラーログを確認してください。

いいね!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.