2012-04-22 5 views
8

Ho una chiamata ajax a somefile.php. voglio che lo script php faccia un compito semplice e che rimandi i dati all'utente, e solo che eseguo compiti molto dispendiosi in termini di tempo. quindi ho bisogno di svuotare l'output dopo il primo compito semplice. non funziona, probabilmente perché ho abilitato gzip.Per php flush - come disabilitare gzip per file specifici?

Io sicuramente non voglio disabilitare gzip su tutto il vhost, e anche non in tutte le cartelle in cui è presente somefile.php. voglio solo disabilitarlo per questo specifico file. è possibile?

EDIT:

questo è quello che ho incluso nel mio conf apache:

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

questo è il mio 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); 
} 
?> 

non funziona. vedo ancora tutta l'uscita insieme dopo 10 secondi.

+1

Se è il tuo server web che gestisce la compressione gzip, penso che non puoi disabilitarlo via PHP. – noli

+0

Forse guarda questo: http://stackoverflow.com/questions/1922934/how-to-disable-mod-deflate-in-apache2 – noli

risposta

1

mettere questo in 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

Come puoi disabilitarlo solo per determinate richieste allo stesso file? es .: 'ajax.php? a = list & id = 5' -> con compressione ' ajax.php? a = download & file = image.png' -> senza compressione –

+0

@ B.Martin Lasciare il '$' fuori dalla regex e includi il parametro di richiesta. Come 'ajax \ .php \? A = download'. – Chloe

6

ero alla ricerca di una soluzione per lo stesso problema. Questo è ciò che ha funzionato per me, ma sfortunatamente NON sembra essere un header VALID.

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

Ecco le specifiche 'Content-Encoding': https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.5 – Chloe

1

apache_setenv() è corretto. Vedi la documentazione.

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

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

Il tuo problema è che si è attivata su buffer di uscita con ob_start(). Commentalo.

Ho appreso che apache_setenv() è disponibile solo con il modulo Apache PHP. Non è disponibile quando si utilizza FPM. In tal caso, è necessario utilizzare .htaccess per disattivare GZip. Un esempio è

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

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

Il - mezzi NOOP, E significa assetto variabile, 1 è il valore. Dopo i reindirizzamenti, le variabili vengono rinominate e anteposte con REDIRECT_.

Se l'output è ancora in fase di buffering, controllare se si sta attraversando un proxy o una cache. Verifica se sono presenti intestazioni come Via: 1.1 varnish o Via: 1.1 vegur. Inoltre, bufferizzeranno la risposta.