Output buffering
Meg tudna valaki magyarazni, hogy kezeli az ob_start(); az 'output_buffering = 4096' erteket, amely a php.ini fajlban talalhato ?
Nekem van egy fajlom amely tobb mint 8192 karaktert tartalmaz, az ob_get_contents(); kinyomja a tartalmat hiba nelkul. Nem ertem, miert nem jelent a PHP hibat amikor tobb mint 4096 karaktert tartalmazo adatot listazok.
A PHP 4096 karaktert kuld at egy csomagban ? A hatralevo adatokat is kinyomja kulon csomagokban, peldaul: 2x4096 ?
Koszonom!
■ Nekem van egy fajlom amely tobb mint 8192 karaktert tartalmaz, az ob_get_contents(); kinyomja a tartalmat hiba nelkul. Nem ertem, miert nem jelent a PHP hibat amikor tobb mint 4096 karaktert tartalmazo adatot listazok.
A PHP 4096 karaktert kuld at egy csomagban ? A hatralevo adatokat is kinyomja kulon csomagokban, peldaul: 2x4096 ?
Koszonom!
PHP.ini comment
; after you send body content, at the price of slowing PHP's output layer a
; bit.
Azaz ennyi byte tárolódik memóriában mielőtt elkezdene kimenetre írni, ezzel lehetővé téve hogy header és cookie parancsokat lehessen végrehajtani akkor is ha már írtunk valamit a kimenetre. Ez mindenképpen működik, további kódolást nem igényel
Az ob_start()-nak ehhez semmi köze, az minden kimenetet memóriában tárol, ameddig meg nem szünteted valamelyik ob_* függvénnyel a kimenet elkapását. Ameddig van a PHP-nak elegendő memória, addig lehet bele pakolni. (esetenként akár több 10 Mb-ot is, de nem ajánlott).
kis kiegészítés
Ha ob_start-ot használunk, akkor ez annyival rosszabb, hogy a PHP nem fogja tudni, hogy mennyi területet foglaljon le, ezért egy kisebb bufferrel indul, amit folyamatosan növelni fog 4k-nként, ezáltal kevésbé hatékony, mint a php.ini beli beállítás. Azt most kapásból nem tudom, hogy ha be van állítva az output_buffer, és így hívuk ob_start-ot, akkor milyen buffer mérettel indul.
Az érmének azonban van még két oldala. Maga a webszerver is buffereli a kimenetet. Az Apache esetén a SendBufferSize beállítással tudjuk szabályozni ezen buffer méretét. Érdemes egy kicsit nagyobb értéket megadni, mint az output_buffer, mert a puszta kimenet mellett ott vannak a headerek is.
Ezen kívül még OS szinten is van bufferelés, érdemes lehet utánanézni, hogy az általáunk használt OS-ben hogyan tudjuk ezt a megfelelő méretre beállítani.
Üdv,
Felhő