Door
j opla
op 06-02-2016 20:56
gewijzigd op 06-02-2016 21:11
4.859 views
Beste mensen,
Ik heb een vraagje op de functies ob_start() en session_start(). Ik heb begrepen dat deze aan het begin van een script moeten staan. Maar moeten ze echt als allereerste staan, of moeten ze voor er enige "html" output wordt gebruikt staan.
Dat wil zeggen: in heb een bestand index.php, daarin wil ik alleen "<?php require algemeen.php"; ?> in zetten en dan algemeen.php starten met:
<?php ob_start(); session_start(); ... etc ... ?>
Dank je voor je reactie. Ik had die ob_start ergens voor nodig omdat anders iets ergens niet werkte ... vaag hè ... maar het precieze hoe en waarom kan ik me niet meer herinneren. ... Waarschijnlijk om de output buffering aan te zetten:
"This function will turn output buffering on. While output buffering is active no output is sent from the script (other than headers), instead the output is stored in an internal buffer. "
Dus moet je dat probleem in je script gaan oplossen, en niet ob_start gebruiken om je fout te verdoezelen. Vermoedelijk gewoon een "headers already sent" melding, welke toch vrij duidelijk lijkt.
Die melding kreeg ik waarschijnlijk ... maar ja, om nu een stuk van andermans script te gaan uitpluizen terwijl die dit als oplossing gebruikt ... Sorrie, ik ben maar een hobbyist ... Maar als je zin hebt ben je natuurlijk altijd welkom ;-)
Output buffering heeft zeker zijn nut, zo kun je bijvoorbeeld de uiteindelijke pagina gecomprimeerd (gzip) versturen. Dat scheelt weer (een héle hoop) bandbreedte. Ook kun je snippets HTML of JavaScript op deze manier knippen en op de goede plek plakken of apart bewerken.
Het gebruik van output buffering zou wel een bewuste keuze moeten zijn bijvoorbeeld voor een zekere flexibiliteit in je programma-code. Maar wanneer je dit dan gebruikt zul je een des te grotere discipline moeten hebben bij het programmeren zelf zodat je deze speelruimte niet misbruikt.
Je moet te allen tijde kunnen onderbouwen waarom je iets doet. Als je ob_start() overal maar voorramt als een soort van aanroep van een magische formule ben je verkeerd bezig.
Ik heb begrepen dat deze aan het begin van een script moeten staan. Maar moeten ze echt als allereerste staan, of moeten ze voor er enige "html" output wordt gebruikt staan.
deze functies, maar ook bijvoorbeeld header() en set_cookie() moeten staan op een plek waar nog geen output naar de client is gestuurd.
Want als er een byte aan data naar de client /browser gestuurd wordt, dan moet dat vooraf gegaan worden door http-headers.
Zeg maar een stukje info om te vertellen wat er aan komt.
Bijvoorbeeld: he browser, hiet heb je zodadelijk 165kB aan data.Dat gaat binaire zooi zijn en je moet het zien als een plaatje (jpeg). En waarschijnlijk blijft dit plaatje de komende 48 uur onveranderd, dus als je hem dadelijk weer nodig hebt, gebruik dan deze maar weer".
Maar het kan ook om html data gaan, en info over cookies bevatten etc. etc.
Zou je nu na deze headers en de eerste data op regel 300 van je script nog ontdekken dat je ook niet iets wilde zeggen over een extra header tbv een redirect of zo, dan ben je te laat. De headers zijn al verstuurd en op basis van die info is de browser al bezig een pagina op te bouwen.
Maar zo lang je nog geen headers verstuurd hebt, kun je ook op regel 1000 nog session start ztten
Dank je voor je reactie. Even voor mijn begrip: kan het kwaad als het er voor staat?
Nee. Je gebruikt enkel meer geheugen op de webserver (voor een kort moment). Alle OUTPUT (statisch en variabel) wordt namelijk eerst gebufferd in het RAM van de server.
En in principe is dat niet nodig als je je script logisch opbouwt. De hoofdregel is dat je in je script begint met PHP waarin je variabelen gereedmaakt die je nodig hebt bij de output. In dit deel komt geen enkele output voor. Daaronder komt dan je "view" . Dit is bij een normale webpagina dus je HTML met daartussen marginale stukjes PHP die enkel als doel hebben om dynamische content te genereren.