Error: Error 330 (net::ERR_CONTENT_DECODING_FAILED): Error desconocido.

El problema puede venir ocasionado por varias causas:

1. No está instalada la extensión zlib.

Nota: ob_gzhandler() requiere la extensión zlib.

2. No está habilitado el soporte de compresión de output buffer en el php.ini.

Para solucionarlo comprobaremos/estableceremos que zlib.output_compression está activo en el php.ini:

output_handler =
zlib.output_compression = On

También podríamos solucionarlo añadiendo al fichero .htaccess la siguiente línea:

php_flag zlib.output_compression on

IMPORTANTE: Si dejamos habilitado zlib.output_compression, deberemos asegurarnos que en el código no hay ninguna llamada a ob_gzhandler(), ya que ambos sistemas no pueden convivir. Ver punto siguiente

3. Se están usando juntos ob_gzhandler() y zlib.output_compression

Nota: No se pueden usar juntos ob_gzhandler() y zlib.output_compression. Observe también que se prefiere el uso de zlib.output_compression antes que ob_gzhandler().

Usar simultáneamente ambos sistemas de compresión provocaría que se comprimiese dos veces el output buffer, una vez por parte de zlib.output_compression y la segunda por parte de ob_gzhandler(), con lo que los contenidos del buffer doblemente comprimidos se enviarían al navegador, el cual no entendería la codificación de la información (ya que descomprimiría lo recibido una sola vez esperando ya encontrarse con el HTML a mostrar pero lo que se encontraría es con algo nuevamente comprimido, lo cual no entendería, provocando posiblemente el siguiente error (lo siguiente es lo que muestra Chrome por ejemplo):

Esta página web no está disponible

Es posible que la página web http://xxxxxxxx.xxx/ esté temporalmente inactiva o que se haya trasladado definitivamente a otra dirección.
Error 330 (net::ERR_CONTENT_DECODING_FAILED): Error desconocido.

If you’re using Apache’s gzip compression already (which by the looks of it you do, since CSS/JS are compressed as far as I can see), then using ob_start(‘ob_gzhandler’) will compress that compression… and the browser won’t be able to handle it.

I’m speaking under correction of course as I’ve always used Apache to do it for me, but it looks like you’re double gzipping things, that’s why it works without the “ob_gzhandler” statement.

Check your .htaccess files on the other sites and compare it with the site you’re running that has the same problem as I can’t see that you’re running Drupal on zacoders.net and jadeit.co.za, just on jadeit.co.za which makes me think they’re not the same framework as you said they are? shrug

answered Mar 26 ’11 at 11:14
AcidRaZor
41839
Just to add on to my answer here, the reason why curl returns the website normally is because (again, AFAIK) it doesn’t support gzip thus the server/software will give the site “as is”. But with browsers that do support gzip and tell the server they support it, will get back the gzipped-zipped content and can’t deflate it properly. – AcidRaZor Mar 26 ’11 at 11:16
You are right in saying that it will compress the compressed data, but I prevented it from happening by doing if (ob_get_level() === 0) { ob_start(‘ob_gzhandler’); } – Jrgns Mar 26 ’11 at 11:28
zacoders runs on backend-php, as does the actualy backend site and jrgns.net. I also use it at the company I work for. I haven’t had a chance to port jadeit.co.za to it…🙂 – Jrgns Mar 26 ’11 at 11:30
Well, try disabling Apache’s gzip then (using .htaccess if Texo allowed that) and see if it works. And AFAIK, ob_get_level only checks if ob_start has been called before. It doesn’t stop the page from being gzipped the first time since ob_start() was called before the ob_get_level check so that if statement will always be true and thus always compress the compressed page. – AcidRaZor Mar 26 ’11 at 11:46
ob_get_level returns the current output buffering level. If it’s > 0 without you calling ob_start, you know that PHP is doing the gzipping. I managed to sort out the issue by just closing of all output buffering before ending the script. But this is the funny part. When a script ends, PHP automatically flushes all output buffers one by one. For all the other sites this didn’t cause any problems. For this one it did. Doing it explicitly solved the problem, but I’m still not sure what the exact problem is!🙂 – Jrgns Mar 28 ’11 at 10:25

ust Put this line of code in starting and everything will be fine..

while (ob_get_level() > 0) { ob_end_clean() ; } 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s