오류 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는 명령 줄을 통해 유지 관리를 실행하려는 경우 켜져 있어야합니다. HTTP 파일 업로드를 허용하려면 file_uploads를 켜야합니다. OpenX에는 다음 PHP 확장이 필요합니다.

중 하나를 mysql확장하거나 pgsql. mysqli확장은 지원되지 않습니다. ZLib 확장, Flash MX. FTP 확장입니다. 이것이 존재하지 않으면 OpenX는이를 시뮬레이션하려고하는데, 이는 덜 안정적인 솔루션이 될 수 있습니다.

홈 페이지에서 그래프를 생성하기위한 GD 확장. 확장 기능이 활성화되어 있지 않으면 홈페이지에서 그래프 나 통계를 볼 수 없습니다. 홈 페이지에 로그온하려면 openssl 확장 또는 SSL 사용 curl 확장이 필요합니다. SSL이 활성화되지 않은 경우 홈 페이지에 오류 메시지가 표시되지만 작업에는 영향을주지 않습니다.


가능한 이유 또는 더 많은 정보를 수집하는 방법에 대한 단서가 있으면 감사하겠습니다. 감사

답변:


133

HTTP 요청의 헤더가 콘텐츠가 gzip으로 인코딩되었다고 주장하지만 그렇지 않은 경우 발생합니다. gzip 인코딩 설정을 끄거나 콘텐츠가 실제로 인코딩되었는지 확인합니다.


이것은 내 문제를 해결했습니다. 사용하는 브라우저가 gzip 압축을 지원하지 않는 경우 오류가 발생하는지 아는 사람이 있는지 궁금합니다.
Lightbulb1

6
PHP가 gzip으로 압축 된 콘텐츠 위에 일반 텍스트 경고를 출력 할 때이 문제가 발생했습니다.
Mike Causer 2013

일반 텍스트 파일이 아파치 캐시에 갇혀있을 때이 문제가 발생했지만 브라우저는 gzip 압축 된 콘텐츠를 예상했습니다
Ljudevit 2014 년

54

나는 활성화 zlib.output_compressionphp.ini나를 위해 문제를 해결할 것 같았다.


나를 위해 일했습니다. (신-4.0.39 + glassfish4 + 만들 WEB-INF / php.ini 파일을 수동으로.
말콤 Boekhoff

21

코드는 기록하는 동안 BOM없이 UTF8을 저장해야합니다. 때때로 (Notepad ++) 또는 기타 코딩 도구로 코드를 작성하고 UTF8 인코딩을 사용하면이 오류가 발생합니다. 죄송합니다. 영어를 모릅니다. 이것은 제 경험입니다.


+1 이것은 또한 내 문제였습니다. 시프트-이스케이프를 충분히 빠르게 누르지 않았기 때문에 하드 재부팅을해야했습니다. :(. 여전히 파일이 utf-8로 인코딩되지 않은 이유를 모릅니다 (sublime text 3 build 3083). 기본값을 확인했고 utf- 8. 어쩌면 내가 실수 ... 다른 형식으로 저장하기 위해 CTRL-S-뭔가에 충돌
R_Ice

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 )는 zlib.output_compression을 사용하는 것이 ob_gzhandler ()보다 선호된다는 것을 언급합니다.
Kristjan Adojaan

5

Codeigniter프레임 워크 를 사용하려면 다음을 구성 파일로 만드십시오.

$config['compress_output'] = FALSE;

그리고 php.ini구성 파일에서 다음을 사용하십시오.

zlib.output_compression=On

실제로 php.ini 지시문 값을 변경하면 모든 출력이 gzipped. Codeigniter설정은 헤더를 설정하고 그것을 출력에 그것을 적용 할 웹 응용 프로그램 서버에 달려있다. 나는 세트에 시도 $config['compress_output'] = TRUE을 유지하면서 zlib.output_compression=On. 같은 효과가 있습니다. 방향 +1.
codarrior

2

ob_start(ob_gzhandler)기능 을 사용 합니까? 그렇다면 ob_start(ob_gzhandler)함수 위에 콘텐츠를 출력 하면이 오류가 발생합니다. 이 기능을 사용할 수 없거나이 기능 위에 콘텐츠를 출력 할 수 없습니다. ob_gzhandler콜백 함수를 수락 할 브라우저를 인코딩하는 내용의 유형을 결정하고 그에 따라 출력합니다. 따라서이 함수 위에 콘텐츠를 출력하면 콘텐츠의 인코딩이의 출력 콘텐츠 ob_gzhandler와 다를 수 있으며 이로 인해이 오류가 발생합니다.


2

이 혐오스러운 문제의 원인을 찾는 사람이 있다면 원인 파일을 찾을 수있는 해결책이 있습니다. 커뮤니티 에서 https://www.drupal.org/node/1622904#comment-10768958Drupal .

그리고 나는 인용한다 :

편집하다

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;
}

감사합니다. 이것은 내 문제를 추적하는 데 도움이되었고 코드가없는 사용자 정의 드루팔 모듈이있었습니다. 추가하면 <?php해결되었습니다.
Sean Bannister

2

다른 사람을위한 아이디어가 하나 더 있습니다.

gzip으로 압축 된 svg가 있었지만 출력에 php 오류가있어서이 오류 메시지가 발생했습니다. (gzip 바이너리 중간에 텍스트가 있었기 때문입니다.) PHP 오류를 수정하면 문제가 해결되었습니다.


동의합니다. 압축을 켜기 전에 모든 PHP 오류 로그를 확인하십시오. 특히 최근에 zlib 압축을 끄지 않았고 이제 오류가 발생하는 경우. 이 같은 오류를 일으키는 잘못된 DB 쿼리를 수정했습니다. 활성화 zlib.output_compression하면 가비지 문자로 가득 찬 브라우저가 생겼습니다.
Bert

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 Debugger를 통해 액세스하려고 할 때 작동했다는 것입니다.

나에게 문제는 프로젝트의 PHP 파일 중 하나에 문자를 잘못 입력했다는 것입니다. Git에서 프로젝트 변경 사항을 확인할 때까지 이것을 알지 못했습니다.

제 경우에는 m<?php runMyProgram(); ?>.

m을 지우면 다시 작동하기 시작했습니다.


열린 PHP 태그 앞에 공백이 있으면 동일한 오류가 발생할 수 있습니다.
deepcell

1

제 경우에는 Apache로 프록시해야하는 IIS에 새 응용 프로그램을 추가 할 때 발생했습니다.

콘텐츠를 얻으려면 로 설정 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

시스템을 Revive로 업그레이드 할 때도이 문제가 발생했습니다. GZIP을 켠 후에도 문제가 여전히 지속되는 것을 발견했습니다. 추가 조사를 통해 업그레이드 후 수정되지 않은 파일 권한을 발견했습니다. 간단한 재귀 chmod가 트릭을 수행했습니다.



0

훨씬 더 일반적인 대답은 압축에 추가되는 오류가 있다는 것입니다. 해결책은 display_errors = Offphp.ini 파일 에 설정 하는 것입니다 (실행하여 터미널이 켜져 있는지 확인하십시오.php --info "display_errors"를 찾으십시오).

그렇게해야합니다. 그리고 실제로 어떤 오류인지 어떻게 발견합니까? 해당 경로 / 페이지에 도달 할 때마다 PHP 오류 로그를 확인하십시오.

좋은 luclk!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.