Občas nastane situace, kdy potřebujeme v PHP udělat například několik složitějších výpočtů, které budou trvat více serverového času, ale budeme chtít postupně uživateli vypisovat hotové informace a ne čekat až na dokončení skriptu. Můžeme si pomoci bufferem v PHP.
Pomocí správného použití bufferu v PHP můžete docílit toho, že budete uživateli vracet z webového serveru do prohlížeče zpracované informace a nebudete muset čekat až se vykoná celý skript, jak je tomu standardně.
Vezměme si například situaci, kdy je ve zdrojovém kódu opravdu složitý výpočet, jehož řešení trvá i několik sekund a tento výpočet se několikrát opakuje.
Pokud by uživatel takovou stránku načítal v prohlížeči, webový server by čekal na dokončení posledního výpočtu, a až potom by poslal výsledek na standardní výstup, tedy do prohlížeče.
Použitím bufferu můžeme vracet výsledek ihned po dokončení, jako je tomu na tomto příkladu, na kterém je použití jasné (pro pochopení situace doporučuji vyzkoušet):
//zapnuti bufferu
ob_start();
$i = 1;
do{
//slozity vypocet
//pro demonstraci by bylo mozne pouzit funkci sleep
$m = 0;
for( $j = 1; $j
< 1000000; $j++ ){
$m = $i/23/$j;
}
//vypis
echo 'Result: ' . number_format( $m, 30, ',', ' ' ) . '
';
//odeslani bufferu na output
ob_flush();
//odeslani do prohlizece
flush();
}while( $i++
< 10 );
//odeslani dat a vypnuti bufferu
ob_end_flush();
Výsledek v podobě výpisu:
Result: 0,000000043478304347869558554862 Result: 0,000000086956608695739117109724 Result: 0,000000130434913043608702309939 Result: 0,000000173913217391478251983017 Result: 0,000000217391521739347792774311 Result: 0,000000260869826087217404619878 Result: 0,000000304348130435086972056524 Result: 0,000000347826434782956495084250 Result: 0,000000391304739130826106929817 Result: 0,000000434783043478695585548621
bude vypisován vždy ihned po jeho vypočítání a nebude čekat až na dokončení posledního cyklu.