Cannot modify header information
Als iemand de oplossing weet zeg het a.u.b. Ik word hier nogal moedeloos van.. PHP als taal is heerlijk als het werkt maar dit is echt zóó iritand..
Je kan die ?> trouwens gewoon weglaten (en nu herhaal ik mijn eigen woorden).
Kris Peeters op 30/12/2010 17:38:09:
Zorg dat er geen enkele spatie / tab / enter (hard of zacht) ... staat tussen ?> en het einde van je file main.functions.php.
Je kan die ?> trouwens gewoon weglaten (en nu herhaal ik mijn eigen woorden).
Je kan die ?> trouwens gewoon weglaten (en nu herhaal ik mijn eigen woorden).
Er stond een enter na ?> en die heb ik weggehaald. Nu geen error meer over die functie. Nu krijg ik:
Warning: Cannot modify header information - headers already sent by (output started at /customers/mbdesigner.nl/mbdesigner.nl/httpd.www/Fair/2/index.php:16) in /customers/mbdesigner.nl/mbdesigner.nl/httpd.www/Fair/2/pages/dynamic/language.php on line 32
(zie http://www.mbdesigner.nl/Fair/2/ en klik op een van de vlaggetjes)
Gewijzigd op 30/12/2010 18:18:55 door P-ter AA
Zie waar die error komt. De echo is daar dus al ver boven geweest (zie alle html).
Karl Karl op 30/12/2010 18:52:26:
Zie waar die error komt. De echo is daar dus al ver boven geweest (zie alle html).
Ah ik snap het.. Ik gebruik echo voor o.a. de links te maken voor het menu. En later komt set_cookie pas in de pagina. Alleen hoe los ik dat op? Want ik kan de content niet boven het menu zetten..
set_cookie() of startsession() kan je alleen maar activeren VOORDAT je iets naar de browser stuurt. Er is geen ander mogelijkheid. Anders krijg je altijd: annot modify header information - headers already sent by ...
Eerst logica, dan pas design.
Zonder ook maar 1 uitzondering.
Een mogelijke oplossing:
In plaats van overal te echo'en zet je die gegevens in een variabele.
Ipv.
echo '<a href="...">bla bla</a>';
zet je:
$output .= '<a href="...">bla bla</a>';
Op het einde zet je die $output dan op de juiste plaats.
Maar de basis blijft het advies dat boven mijn post staat:
Herschik je logica.
Het is me gelukt! Iedereen bedankt!
Maurice vB op 31/12/2010 09:58:29:
Het is me gelukt! Iedereen bedankt!
Hoe?
Karl Karl op 31/12/2010 11:34:09:
Hoe?
Maurice vB op 31/12/2010 09:58:29:
Het is me gelukt! Iedereen bedankt!
Hoe?
Ik heb de switch in een andere pagina als languages.php gezet en die voer ik uit boven <html> wanneer de pagina 'languages' word geopend. Dus in languages.php staat alleen de tekst die in weergegeven moet worden, en in setlanguage.php staat het set_cookie gedeelte dat wordt uitgevoerd boven <html>.
te zetten
en onderaan je script:
te zetten,
hiermee vermijd je elk probleem met header is already send ;)
Thomas van den Bulk op 31/12/2010 13:53:58:
er is nog een makkelijkere manier om dit te kunnen doen, probeer eens bovenaan je script:
te zetten
en onderaan je script:
te zetten,
hiermee vermijd je elk probleem met header is already send ;)
te zetten
en onderaan je script:
te zetten,
hiermee vermijd je elk probleem met header is already send ;)
Dit had ik inderdaad ook gezien op een forum, maar daar noemde ze dat 'omzeilen van een probleem' en niet oplossen.
Maurice vB op 31/12/2010 14:09:47:
Dit had ik inderdaad ook gezien op een forum, maar daar noemde ze dat 'omzeilen van een probleem' en niet oplossen.
Dat is het ook en die oplossing is dus ook eigenlijk geen oplossing maar eerder een lapmiddel. Zorg gewoon dat je altijd het echte probleem oplost ;-)
Blanche - op 31/12/2010 14:10:56:
Dat is het ook en die oplossing is dus ook eigenlijk geen oplossing maar eerder een lapmiddel. Zorg gewoon dat je altijd het echte probleem oplost ;-)
ik heb dan ook een hekel aan cookies, zoveel gebruik ik ze ook niet,
vandaar dat ik bijna altijd sessions gebruik,
het enige waar ik cookies voor gebruik is om te zorgen dat mensen de mogelijkheid hebben om ingelogd te blijven op me website ;)
Het gaat erom dat output buffering niet de juiste oplossing is je headers already sent meldingen te voorkomen. Er ligt een andere belangrijkere fout aan ten grondslag, namelijk een fout in je PHP logica. Los liever die fout op dan een lapmiddel als output buffering te gebruiken.
natuurlijk moet je session_start() voor de header zetten,
maar daarna is het gewoon mogelijk om de session te wijzigen,
cookies moeten voor de header gewijzigd worden,
en ik geef toe dat ob_start() en ob_end_flush() niet de juiste manier is om dit op te lossen,
maar op sommige momenten moet je wel,
mijn website laadt de pagina in de index pagina,
met als volgt dat de header dus al verstuurd is door de index pagina,
als ik dan inlog, en dit via de login script doet,
moet ik dus flush gebruiken wil ik een cookie kunnen setten.
ik snap dat je dit niet de manier vindt om dit probleem op te lossen,
maar ik vindt het een mogelijke oplossing voor een probleem waar ik dus tegen aan loop.
Thomas van den Bulk op 31/12/2010 15:14:44:
mijn website laadt de pagina in de index pagina,
met als volgt dat de header dus al verstuurd is door de index pagina,
met als volgt dat de header dus al verstuurd is door de index pagina,
Dat is maar net waar je voor kiest. Je kunt het ook oplossen door eerst alle PHP logica af te handelen en eventuele output op te slaan in een variabele en pas daarna de output naar de browser te versturen. Nog een andere oplossing is het gebruik van een template parser waarbij je variabelen aan een template toekent en de output pas op een van de laatste regels van je script genereert...
Kortom, het gebruik van ob_ functies om header already sent foutmeldingen te voorkomen is in principe nooit nodig...