Warning: Cannot modify header information - headers already sent by (output started at /home/voorbeeld/domains/voorbeeld/public_html/voorbeeld.php:14) in /home/voorbeeld/domains/voorbeeld/public_html/voorbeeld.php on line 141
Je mag de Header output niet voor een echo, spatie, html-code, ect. zetten. Voor meer uitleg en voorbeelden verwijs ik je naar deze tutorial: http://www.phph...y-sent/738/
@Wijnand, dat is totaal geen goede oplossing. Dat is een verkeerde en onjuiste manier voor een oplossing. PHP code moet je gewoon altijd boven je doctype uitvoeren en daaronder alleen maar echoën, zo krijg je nooit problemen met een header location error.
Bovenin je code (liefst in je hoofd-file als je die hebt) zetten:
<?php ob_start();
Onzin, dat is een slechte oplossing aangezien je het probleem niet aanpakt. Regel 37 en 38 omwisselen zal het probleem ook oplossen (ook al heeft regel 37 momenteel geen enkel nut) en is wel een goede oplossing.
De vraag is: Wie bepaald wat een goede of en slechte oplossing is. Omdat er iemand heeft gezegd dat 'ob_start' geen goede oplossing is, is het daarom geen goede oplossing?
Laat ik zo zeggen. Ik gebruik ob_start() altijd en ik vind het geweldig werken :-).
Het is mijns inziens belachelijk om te zeggen van een oplossing die werkt dat het een slechte oplossing is.
Het heeft een beetje te maken met verschillende etiquette. Elke cultuur heeft z'n eigen etiquette, maar daarmee heb je nog niet het recht om te zeggen dat hoe iemand anders het doet, fout of 'de enige goede manier' is. Bv: Wij Nederlanders zeggen dat je niet moet boeren aan tafel. In China MOET je boeren aan tafel om aan te geven dat het lekker is. Wie zegt dat wat zij doen onbeschoft is? Wie zegt dat wat wij doen 'de enige goede manier' is? Dat zou belachelijk zijn om te zeggen.
De vraag is: Wie bepaald wat een goede of en slechte oplossing is. Omdat er iemand heeft gezegd dat 'ob_start' geen goede oplossing is, is het daarom geen goede oplossing?
Laat ik zo zeggen. Ik gebruik ob_start() altijd en ik vind het geweldig werken :-).
Het is mijns inziens belachelijk om te zeggen van een oplossing die werkt dat het een slechte oplossing is.
Het heeft een beetje te maken met verschillende etiquette. Elke cultuur heeft z'n eigen etiquette, maar daarmee heb je nog niet het recht om te zeggen dat hoe iemand anders het doet, fout of 'de enige goede manier' is. Bv: Wij Nederlanders zeggen dat je niet moet boeren aan tafel. In China MOET je boeren aan tafel om aan te geven dat het lekker is. Wie zegt dat wat zij doen onbeschoft is? Wie zegt dat wat wij doen 'de enige goede manier' is? Dat zou belachelijk zijn om te zeggen.
Mooie anekdote, maar het al dan niet goede oplossing zijn is geen kwestie van etiquette, het gaat over performantie en het niet begrijpen van het probleem in dit geval.
Citaat:
The general reason to avoid output buffering is that it buffers the
output. This seems stupidly obvious, but if your output is being saved
in a buffer until the end of the thing, then it's not being delivered
to the browser until the end of the process, all at once. Meaning that
your page doesn't appear to load gradually anymore, but the whole
thing has to run first, making it seem slower.
Now, if you're using it like you are, to capture only certain output
and prevent it from displaying, then ending the buffer, you don't have
this same problem. But output buffering in general is a poor solution.
You're basically taking something intended as output and putting it
into a string instead, so that you can presumably manipulate it. The
ideal solution in such a case is to rework something to give you the
string you want directly, not to work around it.
Om dan toch vergelijkingen te gaan maken: Het komt er op neer dat je vaststelt dat een kraan niet is dichtgedraaid, er 40 meter plakband over gaat plakken om het probleem op te lossen, omdat je niet doorhebt dat je de kraan gewoon kan dichtdraaien.
Meaning that
your page doesn't appear to load gradually anymore, but the whole
thing has to run first, making it seem slower.
Dit bv is geen performance kwestie. Ik zelf wil niet dat mijn website 'stukje voor stukje' laad. Ik wil dat hij er 'opeens' staat. Overigens de website die ik zelf heb gemaakt in php, die laden gewoon snel. Er is geen zichtbare vertraging.
Citaat:
Om dan toch vergelijkingen te gaan maken: Het komt er op neer dat je vaststelt dat een kraan niet is dichtgedraaid, er 40 meter plakband over gaat plakken om het probleem op te lossen, omdat je niet doorhebt dat je de kraan gewoon kan dichtdraaien.
Dit is een beetje een rare vergelijking. Was beter geweest als je gezegd had om er gewoon een kurk in te doen. 40 meter plakband is wel veel moeite namelijk, maar 'ob_start()' is niet zo veel werk volgens mij :-).
Verder, moet ik je wel gelijk geven dat de andere manier 'netter' is, maar zoals ik al zei: ik gebruik altijd ob_start() en het werkt en is mijns inziens een goede oplossing voor zijn probleem.
of een iets minder slimme manier waarmee de kans bestaat dat een gebruiker niet word doorgestuurd.
Waar je normaal header("Location: Page"); hebt staan.. zet je nu
[..code..]
Ook dit is geen goede oplossing. Een meta tag hoort in de head, niet ergens halverwege in de body...
Wijnand schreef:
Verder, moet ik je wel gelijk geven dat de andere manier 'netter' is, maar zoals ik al zei: ik gebruik altijd ob_start() en het werkt en is mijns inziens een goede oplossing voor zijn probleem.
Het werkt, maar dat doen wel meer verkeerde methodes. Ik vind het net zo iets als de !important keyword in CSS. Het is wel een oplossing, maar niet de juiste.
Er zijn altijd meerdere wegen die naar Rome leiden. En in dit geval is de weg die er recht naar toe gaat de moeilijkste begaanbare weg, maar het is wel een hele mooie route en een makkelijke snelweg die om gaat en daarmee dwars door de mooie natuur gaat.
De snelweg is een goede oplossing, maar natuurlijk niet de beste. Het beste is om de onbegaanbare weg begaanbaarder te maken, zodat iedereen niet hoeft om te rijden en je de natuur niet aantast.
Zo werkt het met ob_start ook. Het is een oplossing en zal vast wel werken ook, maar het is niet de juiste oplossing als je kijkt naar de manier van werken. (zie ook mijn tutorial die ik in de eerste reactie had gezet)
@vinTage, dit werkt volgens mij ook niet? Want dan heb je nog steeds het header probleem, dat komt namelijk omdat er een header wordt verstuurd terwijl er al een andere header is verstuurd. Alsof je nog een passagier in een trein wilt stoppen, maar de trein is al vertrokken. Helaas je hebt je trein dan gemist, anders gezegd de Header is already sent. Headers worden verzonden bij het laden van de pagina.
Nuja, ik heb het niet tot in den treuren getest, maar in mijn paar testjes lukte allen zonder foutmeldingen.
offtopic, ob_start() ....wat een drama wordt er daar over gemaakt zeg, het enige wat dat doet is de output bufferen, mss (voor een K*T site) 1 mb in het buffer rammen? terwijl een fototje uploaden 4 keer meer kost ?
Ik geef toe dat zonder mooier is, maar gas geven voor oranje licht scheelt je ook een hoop tijd! (ok sloeg nergens op^^ )
Wat een vergelijkingen trouwens, dit maakt het een wel erg grappig topic:
-Chinezen boeren uit cultuur
-Waterkraan dichtplakken met 40m tape
-Waterkraan dichten met kurk
-Snelweg dwars door de natuur omdat het mooier is
-Passagier in een trein stappen terwijl trein al weg is
-Gas geven voor oranje licht scheelt tijd
Maar goed, ik moet toch zeggen dat Maarten wel een punt heeft. ob_start() kan gewoon en werkt gewoon, maar Maarten's oplossing is wel beter/netter. Leuk dat hij ieder geval de tijd genomen heeft om uitgebreid te reageren :-).