2012-04-22 17 views
8

Tengo una llamada ajax a somefile.php. Quiero que el script php haga una tarea simple y que envíe datos al usuario, y solo que realice tareas que consuman mucho tiempo. entonces necesito enjuagar la salida después de la primera tarea simple. no funciona, probablemente porque tengo gzip habilitado.Para php flush: cómo desactivar gzip para archivos específicos?

Definitivamente no quiero deshabilitar gzip en todo el vhost, y tampoco en toda la carpeta donde está somefile.php. solo quiero deshabilitarlo para este archivo específico. ¿es eso posible?

EDIT:

esto es lo que he incluido en mi configuración del Apache:

<FilesMatch \.php$> 
    SetEnv no-gzip 1 
</FilesMatch> 

esta es mi script PHP:

<?php 
$sucesss = @apache_setenv('no-gzip', 1); 
@ini_set('zlib.output_compression', 0); 
@ini_set('implicit_flush', 1); 

ob_start(); 

for($i=0;$i<10;$i++) 
{ 
    echo 'printing...'; 
    ob_flush(); 
    flush(); 

    sleep(1); 
} 
?> 

no funciona. Todavía veo toda la salida juntos después de 10 segundos.

+1

Si es su servidor web el que maneja la compresión gzip, creo que no puede deshabilitarlo a través de PHP. – noli

+0

Quizás vea esto: http://stackoverflow.com/questions/1922934/how-to-disable-mod-deflate-in-apache2 – noli

Respuesta

1

poner esto en httpd.conf

# exclude certain page requests (e.g. for requesting getMyFile.php?action=getFile&id=3 as non-compressed) 
SetEnvIfNoCase Request_URI getMyFile\.php$ no-gzip dont-vary 
+0

¿Cómo puede desactivarlo solo para ciertas solicitudes al mismo archivo? por ejemplo: 'ajax.php? a = list & id = 5' -> con compresión ' ajax.php? a = download & file = image.png' -> sin compresión –

+0

@ B.Martin Deje el '$' apagado de la expresión regular e incluye el parámetro de solicitud. Como 'ajax \ .php \? A = download'. – Chloe

6

Yo estaba buscando una solución para el mismo problema. Esto es lo que funcionó para mí, pero lamentablemente NO debe ser un encabezado VÁLIDO.

<? 
header("Content-Encoding: none"); 
?> 
+0

Aquí está la especificación 'Content-Encoding': https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.5 – Chloe

1

apache_setenv() es correcto. Ver la documentación.

http://php.net/manual/en/function.apache-setenv.php#60530

apache_setenv('no-gzip', '1'); 

Su problema es el que se activó en el búfer de salida con ob_start(). Comenta eso.

Me enteré de que apache_setenv() solo está disponible con el módulo PHP Apache. No está disponible cuando se usa FPM. En ese caso, debe usar .htaccess para desactivar GZip. Un ejemplo es

https://stackoverflow.com/a/36212238/148844

RewriteRule ^dashboard/index - [E=no-gzip:1] 
SetEnvIf REDIRECT_no-gzip 1 no-gzip 

El - significa NOOP, E significa establecer variables, 1 es el valor. Después de los redireccionamientos, las variables se renombran y anexan con REDIRECT_.

Si la salida todavía se está almacenando en el búfer, verifique si está pasando por un proxy o caché. Ver si los encabezados como Via: 1.1 varnish o Via: 1.1 vegur están presentes. También amortiguarán la respuesta.

Cuestiones relacionadas