Forzare o bufferizzare l’output in php
Scritto il 20 Maggio 2008
Nella categoria Guide, PHP
Tag: output, PHP, Programmazione
Mi è capitato in questi giorni di scrivere una pagina di PHP con una query mySQL piuttosto onerosa (si trattava di importare un file csv di decine di migliaia di righe); normalmente il browser dell’utente visualizza una bella pagina bianca in caricamento, questo perché PHP non mostra subito l’output, ma lo memorizza in un buffer e (a meno che non si riempia), mostra la pagina solo a caricamento completato.

Forzatura dell’output
È possibile fare in modo che tutto l’output genereato, tramite echo o print per esempio, venga restituito subito all’utente e quindi mostrato nel browser. L’istruzione, semplicissima, è
flush()
La documentazione si trova come al solito sul sito di php, flush.
Un possibile utilizzo è prima di un ciclo esoso, di una chiamata esterna oppure di una query mySQL, ad esempio
echo "<p>Esecuzione di $max importazioni...</p>";
flush();
for (var $i=0; $i < %max; $i++)
Mysql_query("LOAD DATA LOCAL INFILE...");
Questo codice avverte l’utente dell’importazione in modo che la sua attesa sia meno sgradita.
Bufferizzazione
Al contrario della forzatura sopra esposta, solitamente è consigliabile mantere l’output in un buffer e inviarlo all’utente solo in determinati momenti, questo perché forzare l’output con il flush impone al server una transizione attiva HTTP, con relativo scambio di dati, effettuarne di meno risparmia risorse al server e all’utente, inoltre è un altro ottimo consiglio per velocizzare il php.
I comandi che permettono di svolgere questa attività sono: ob_start, ob_flush.
La prima inizializza il buffer (infatti ob sta per Output Buffer), il secondo invia il contenuto del buffer all’utente, in modo che inizi a visualizzare la pagina.
Utilizzare queste funzioni, nelle pagine molto estese, velocizza la pagina e non a caso vengono utilizzate in tutte le maggiori piattaforme: Wordpress, phpbb, eccetera.
Per una trattazione più estesa, consiglio l’articolo di HTML.it e Pratical PHP Programming.






Commenti
Scrivi un commento
Se vuoi.