PHP expert |
|
Het gebruik van ob_* functies in deze situatie is inderdaad afgeraden. Met ob_start() buffer je de output alvorens ze naar het scherm te printen. Je ziet beginners vaak deze functie gebruiken om de foutmelding "cannot modify header information - headers already sent" te ontwijken, omdat je headers (dus ook cookies) alleen kan aanpassen wanneer er nog geen HTML output is verzonden naar de browser. Het gebruik van ob_start is in dit geval een (zeer slechte) oplossing voor dit probleem, wat wij ten zeerste afraden. Hiervoor zijn de ob_* functies niet ontworpen.
Output buffering slaat de uitvoer op in een interne buffer, waarna deze aan het einde van het script wordt verzonden naar de browser. Het opslaan van deze uitvoer moet zoveel mogelijk ontweken worden, simpelweg omdat dit onnodig veel geheugen en parsetijd in beslag neemt. De enige reden waarom je output buffering zou willen gebruiken is wanneer je (een deel van) de output wilt opslaan om er aanpassing aan te verrichten.
Structureer je scripts dus altijd op een manier dat je niet in aanraking komt met dit soort foutmeldingen. Dat wil zeggen dat je de PHP zo veel mogelijk moet uitvoeren voor enige output. (Opgelet: dit kan ook een witregel of een spatie zijn! Soms kan een editor die op een verkeerde charset staat ingesteld een onzichtbaar teken bovenaan je bestand meegeven, wat deze foutmelding ook kan veroorzaken. Als je dit niet weet kan je hier dus wel een tijdje achter gaan zoeken). |