Nel mio sito Web (in esecuzione con drupal) la funzione ob_flush
richiede molto tempo (tra 10 e 100 secondi) per essere eseguita. Come faccio a scoprire perché? Cosa può causare questo così tanto tempo? ob_flush richiede molto tempo per essere eseguito
risposta
uso
<?ob_start();?>
all'inizio della pagina e
<?ob_flush();?>
alla fine della pagina, per risolvere questo problema.
SET
output_buffering = Off
in php.ini
Prova questa:
ob_start();
//Your code to generate the output
$result = ob_get_contents(); //save the contents of output buffer to a string
ob_end_clean();
echo $result;
E 'gestito veloce per me.
[È possibile taggare la domanda con Drupal, poiché sembra che potrebbe trattarsi di un problema di Drupal. In particolare, sospetto che quando svuoti il buffer, stai scrivendo su un buffer esterno, che innesca una tonnellata di hook da chiamare per filtrare i dati appena scritti.]
Sospetto che il tuo problema sia buffer annidati. Drupal ama molto i buffer e fa da buffer a tutto il resto. Controllare il risultato di:
echo "<pre>\nBuffering level: ";
. ob_get_level() .
. "\nBuffer status:\n"
. var_dump(ob_get_status(TRUE))
. "\n</pre>";
buffer nidificate Se hai, allora ho il sospetto ob_flush() non farà nulla per voi: solo aggiunge il contenuto del buffer interno nel prossimo strato più esterno della buffering.
I buffer nidificati possono provenire da Drupal stesso (come mostrato sopra), o dalle impostazioni per zlib-output-compression e output_buffering (provare a giocarci, vedere se cambia qualcosa).
Se i tamponi non sono annidati, e le impostazioni di cui sopra non risolve il problema, allora si potrebbe anche voler dividere l'operazione in pezzi, ed eseguire il profiler lì, per vedere quale parte sta prendendo il tempo:
$data = ob_get_contents(); // Return the contents of the output buffer.
ob_clean(); // Clean (erase) the output buffer.
ob_end(); // Close the buffer.
echo($data); // Output our data - only works if there's no outer buffer!
ob_start(); // Start our buffer again.
La domanda diventa, quindi, "cosa stai cercando di realizzare?" Cosa pensi che ob_flush() stia facendo qui? Perché se la risposta è "Voglio spingere tutto ciò che ho fatto finora al browser" ... allora temo che ob_flush() non sia la strada giusta.
Cosa ti fa pensare che questa funzione blocchi la tua applicazione? – ualinker
@ualinker Vedi l'immagine che ho appena caricato – user16948
Puoi incollare il codice anche con il contesto 'ob_start()' e 'ob_flush()'? – ualinker