In definitiva, dipende. La maggior parte dei meccanismi di hosting PHP che ho usato trasmetteranno la risposta in blocchi, poiché viene ricevuta dallo script, omettendo completamente l'intestazione Content-Length
(poiché non è noto in anticipo). È possibile svuotare periodicamente la risposta utilizzando flush()
per forzare il server a trasmettere ciò che ha memorizzato nel buffer fino al client.
Quindi, se si stanno facendo cose che richiedono molto tempo e si desidera consentire il rendering della pagina in anticipo, il modo corretto per farlo sarebbe quello di stampare il maggior numero possibile di pagine, chiamare flush()
, quindi esegui le tue attività costose. Assicurati di non impiegare più tempo della massima durata dello script PHP dichiarata.
Ok, in modo che spiegazione è certamente un po 'semplificato:
L'intestazione Content-Length
può effettivamente essere inviato in alcune circostanze. Ad esempio, se la risposta dello script è inferiore al buffer di PHP per i dati inviati e/o se lo script impiega meno tempo per l'esecuzione, il server saprà esattamente per quanto tempo il contenuto è e può aggiungere l'intestazione della lunghezza.
Inoltre, flush()
in realtà non può fare nulla. Questo dipende dalla configurazione del tuo server e da altri fattori. Si noti in particolare questi avvertimenti nella documentazione in materia di comportamento sul lato server:
flush() potrebbe non essere in grado di sostituire il sistema di buffering del server web e non ha alcun effetto su qualsiasi buffer lato client nel browser. Inoltre, non influisce sul meccanismo di buffering dell'output userspace di PHP. Ciò significa che dovrai chiamare sia ob_flush() che flush() per svuotare i buffer di uscita ob se li stai utilizzando.
Diversi server, in particolare su Win32, eseguiranno comunque il buffering dell'output dallo script finché non verrà terminato prima di trasmettere i risultati al browser.
I moduli server per Apache come mod_gzip possono eseguire il buffering proprio per cui flush() non comporta l'invio immediato di dati al client.
In altre parole: test, test, test. Assicurati che il server web non interferisca con il comportamento che stai cercando di raggiungere. Riconfigurare il server Web, se necessario.
Ottima risposta, grazie! –