ob_flush() flush() nem működik
Sziasztok!
Olyan gondom van, hogy nagy mennyiségű adatot kell feldolgozni php-vel, amit nyomon szeretnék követni. A flush(), ob_flush() tűnt megoldásnak, de valamiért nem csinál semmit... Próbálgattam a php.net/manual-ban lévő példákat, de csak utána iródnak ki a kimeneti adatok, ha a teljes script lefutott.
Ezt a példaprogramot használtam:Egyébként ahogy én akarom majd használni (a kód részletet ajaxal töltöm, be divbe, hogy ne az egész oldalt kelljen frissíteni):A rendszer: windows 10 64bit; Apache 2.4.18 64bit; PHP 7.0.3 64bit
■ Olyan gondom van, hogy nagy mennyiségű adatot kell feldolgozni php-vel, amit nyomon szeretnék követni. A flush(), ob_flush() tűnt megoldásnak, de valamiért nem csinál semmit... Próbálgattam a php.net/manual-ban lévő példákat, de csak utána iródnak ki a kimeneti adatok, ha a teljes script lefutott.
Ezt a példaprogramot használtam:
- <?php
- ob_start();
- echo 'Begin ...<br />';
- for( $i = 0 ; $i < 10 ; $i++ )
- {
- echo .$i . '<br />';
- ob_flush();
- flush();
- sleep(1);
- }
- echo 'End ...<br />';
- ?>
- <div id='progress' class='graph'>
- <div id='barr' style='width:0%'><p id='progressText'>0% kész</p></div>
- </div>
- <?php
- ob_start();
- while(...) {
- ...
- echo "
- <script language='javascript'>
- $('#bar').css('width','{$percent}%');
- $('#progressText').html('".$percent."%');
- </script>";
- flush();
- ob_flush();
- ...
- }
- ?>
Lehúzás
$str = ob_get_contents();
ob_clean();
print dechex(strlen($str)) . "\r\n" . $str . "\r\n";
ob_flush();
flush();
}
function flush_vege() {
print "0\r\n\r\n";
ob_flush();
}
//az oldal tetejére
header('Transfer-Encoding: chunked');
A kódban minden blokk után meghívom a
flush_blokk()
függvényt, az utolsóflush_blokk()
után pedig aflush_vege()
-t.köszi szépen! :) Közben még
Közben még egy alternatív megoldásként lehet iframe-be tenni, és akkor is rendesen végrehajtja, bár az manapság már nem számít annyira elegáns megoldásnak.