PHP: dati di output prima e dopo sleep ()?

Questo è puramente per imparare di più sul buffering dell'output e nient'altro. Quello che desidero fare è ricall una string nel browser, attendere 10 secondi e quindi ripetere qualcos'altro. Normalmente il browser aspetterebbe 10 secondi completi e quindi pubblicherà l'integer risultato, come dovrei interromperlo? Un esempio:

ob_start(); echo "one"; sleep(10); echo "two"; 

La risposta di faileN è corretta in teoria. Senza ob_flush() i dati resterebbero nel buffer di PHP e non arriverebbero al browser fino a quando il buffer non verrà scaricato in modo implicito alla fine della richiesta.

Il motivo per cui ancora non funziona è perché i browser contengono anche dei buffer. I dati vengono ora inviati correttamente, ma il browser attende dopo aver ottenuto "uno" prima che inizi effettivamente il rendering. Altrimenti, con connessioni lente, il rendering della pagina sarebbe davvero molto lento.

La soluzione alternativa (per illustrare che funziona correttamente) è, naturalmente, per submit molti dati contemporaneamente (forse qualche enorme commento html o qualcosa del genere) o per usare uno strumento come curl sulla row di command.

Se si desidera utilizzare questo ciclo di invio / sospensione per l'interface utente di aggiornamento di stato sul client, è necessario trovare un altro metodo (ad esempio il polling lungo e AJAX)

 ob_start(); echo "one"; ob_flush(); sleep(10); ob_start(); echo "two"; 

È questo che vuoi dire?

Se ho capito bene, stai provando a printingre parte della risposta sullo schermo, attendi 10 secondi e produci il resto, tutto questo quando la pagina si sta caricando. Ciò richiederebbe uno scripting lato client per questo, poiché PHP genererà l'intera risposta alla fine.

Penso che una combinazione di ob_flush e flush potrebbe funzionare, ma il buffering non è gestito allo stesso modo su tutti i browser (come ad esempio IE).

Io uso la function setTimeOut() di JavaScript per questo. Funziona bene. Inoltre, puoi utilizzare il tag <noscript> per i browser in cui JavaScript è disabilitato.

  $txt = setPageHeader(); // a PHP function that returns a new DOCTYPE // plus <html><head>(...)</head>, // plus an opening <body> tag echo 'All things were completed. You should be redirected in about 3 seconds'; $txt .= '<script type="text/javascript">'; $txt = $txt.'function Rediriger() {document.location.replace(\'http://yoursite.com/yourpage.php?anticaching='.rand().'\');}'; $txt .= 'setTimeout (\'Rediriger()\', \'3000\')'; $txt .= '</script>'; $txt .= '<noscript><a href="http://yoursite.com/yourpage.php?anticaching='.rand().'">Javascript is disabled in your browser. Click here for being redirected.</a></noscript>'; $txt .= '</body></html>'; echo ($txt); 

Con ob_flush () – ma questo cancellerà il contenuto del buffer. Non si può iniettare un ritardo in un buffer, semplicemente non funziona così.

Si esegue l'output dell'integer buffer in una sola volta oppure si mantiene l'integer buffer per l'utilizzo futuro.

Non è ansible perché il browser è in attesa di una versione completa del documento, perché quale motore del browser analizza metà della pagina XHTML e successivamente (come eseguire il rendering di metà dell'XML?) Leggendo l'altra parte.

È necessario pensare prima di submit l'intestazione per informare il browser quando i dati binari sono stati carteggiati, quindi il browser ottiene i dati dopo la recv ed è ansible estrarre immediatamente questi dati sullo schermo.

Mi manca capire questa domanda perché non ho mai pensato di iniettare a buffer buffer 10s sonno.