Barra di avanzamento basata su buffer di output

Ho cercato di far funzionare il seguente codice.

È un trucco della barra di avanzamento che usa la function ob_get_clean ().

Non so perché, ma questo script non funziona!

Solo la percentuale iniziale – 1% si presenta e nulla dopo.

<?php error_reporting(8191); function flush_buffers(){ @ob_end_flush(); @ob_flush(); @flush(); @ob_start(); } $ini = 2; echo '<script>document.getElementById(\'lpt\').style.width=\'1%\';</script><br>'; for($i=1;$i<=100;$i++) { $k=$ini-1; $str=str_replace("width=\'$k%\'","width=\'$i%\'",ob_get_clean()); $ini++; echo $str; flush_buffers(); } ?> 

Non è ansible "ritirare" il text di output dopo averlo inviato al client. Viene semplicemente aggiunto.

Non functionrebbe come si sta cercando di mescolare il server e il codice lato client. Il codice PHP sul lato client non functionrebbe. Avrai bisogno di build l'intera barra di avanzamento usando javascript stesso.

Cosa dice @Delan: non è ansible "riprendere" e modificare l'output che è già stato inviato al client. Dovresti generare uno snippet <script> completamente nuovo per each movimento della barra percentuale.

Non puoi fare la barra di avanzamento in PHP, devi scrivere ad es. JavaScript e solo eco con PHP. Non è ansible farlo perché PHP è un linguaggio lato server e qualsiasi caricamento viene eseguito sul lato client perché il server non carica nulla, quindi carica lo script che è necessario avere nel linguaggio lato client .

Non credo che nessuna di queste risposte sia completa o corretta che sia stata ribadita.

è vero che non puoi ritirare l'output, ma puoi fare ciò che KPL vuole fare usando un approccio semplicistico non-ajax che non richiede nemless javascript … lo faccio sempre. testato su cioè 9, firefox, chrome e safari. forse potrebbe essere vero che nel 2010, quando è stata chiesta questa tecnica, non ha funzionato, ma non vedo perché ora. non è html5 o niente di speciale …

lo fai usando ob_flush come le supposizioni di KPL e riproduci l'attuale html della barra (comunque ti piace guardarlo, fantasia / animato / etc) con position: absolute e un incrementale z-index: $ counter. in questo modo su each ciclo l'output viene svuotato mentre il php è in esecuzione sul server e il nuovo output è posizionato in modo ordinato sopra l'output precedente. sembra un po 'disordinato, ma questa tecnica sembra perfetta e funziona davvero bene su tutti i browser che ho provato.