[PHP] Headers already send, geen overbodige tekens...

Pagina: 1
Acties:
  • 376 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Ik zit dus met volgende error wanneer ik mijn website lokaal draai (waarschijnlijk dus een andere server instellingen dan mijn hosting hanteerd)

Ik ben er ondertussen achter dat je deze error krijgt wanneer:
-je een teken vooraf je <?php hebt staan
-je een teken na je ?> hebt staan
-je output hebt voor je <?

nu de code die ik heb:

index:
PHP:
1
2
3
4
5
6
<?php
    //includen
    require_once("../includes/config.php");
    require_once("../includes/site_resources.inc.php");
    get_modules_admin("./");
...


get_modules_admin:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
...
while($array=mysql_fetch_array($query)){
        if (file_exists($path.$array['bestand'])) {
            require_once($path.$array['bestand']);
        } else {
            // echo "De module: ".$path.$array['bestand']." bestaat niet";
        }       
    };
...


Nu tijdesn het includen include ik ook beveiliging.php en dit is het bestand wat alles overhoop haalt ben ik achter.

PHP:
1
2
3
4
5
6
7
8
<?php
session_start();

//check1 - kijken of er een sessie met de username bestaat
if(!isset($_SESSION['username'])){
    //niet ingelogd
    header("Location: ".DOMAIN_URL."/admin/modules/beveiliging/login.php");
}


Ik zie eigenlijk niet waar ik de mist in ga? :)
kwam er al snel achter dat de error erg basic was mbt debuggen, maar toch wil het maar niet lukken

Modelbouw - Alles over modelbouw, van RC tot diorama


Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 13-09 20:30

kokx

WIN

Gooi de exacte error melding hier neer, of bestudeer die zelfs eens goed. Daar staat nogal wat handige informatie in, waardoor je meestal weet hoe de error komt ;).

Acties:
  • 0 Henk 'm!

  • Bitage
  • Registratie: April 2006
  • Laatst online: 19-05-2024
Headers already sent komt bijna altijd voor als je headers (dus header();, maar ook setcookie(); en session_start();) probeert te verzenden, maar er al HTML ge-output is. Controleer dit even.

Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Bij deze de foutmelding

PHP:
1
2
3
4
Warning: session_start() [function.session-start]:
 Cannot send session cookie - headers already sent by 
(output started at C:\Program Files\Wamp\www\admin\modules\auto\index.php:64)
 in C:\Program Files\Wamp\www\admin\modules\beveiliging\beveiliging.php on line 2


Nu regel 2 van beveiliging.php is dus de session_start();
en regel 64 van index.php bestaat niet :)

Modelbouw - Alles over modelbouw, van RC tot diorama


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Probeer de beveiliging.php eens eerder te includen? Ergens is er een module die iets output.

Als de waarschuwing correct is overgenomen mag je opzoek naar ]

[ Voor 28% gewijzigd door hamsteg op 21-11-2007 18:58 ]

... gecensureerd ...


Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
hamsteg schreef op woensdag 21 november 2007 @ 18:53:
Probeer de beveiliging.php eens eerder te includen? Ergens is er een module die iets output.

Als de waarschuwing correct is overgenomen mag je opzoek naar ]
per ongeluk een ] te veel, ik ga het even proberen

Modelbouw - Alles over modelbouw, van RC tot diorama


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Ik garandeer je dat regel 64 in index.php wel bestaat. Zit je wel in de goede map te kijken?

Acties:
  • 0 Henk 'm!

Verwijderd

Vaak is het een spatie voor je php tag die problemen veroorzaakt.

En anders, ik had ooit weleens iets gelezen over encoding wat deze problemen veroorzaakte, ben ff aan het zoeken geslagen en maar gedeeltelijk success. Lees dit artikel maar en misschien dat je er wat aan hebt.

Acties:
  • 0 Henk 'm!

  • MrOizo2005
  • Registratie: September 2003
  • Laatst online: 20-09 18:42
Verwijderd schreef op woensdag 21 november 2007 @ 20:13:
Vaak is het een spatie voor je php tag die problemen veroorzaakt.

En anders, ik had ooit weleens iets gelezen over encoding wat deze problemen veroorzaakte, ben ff aan het zoeken geslagen en maar gedeeltelijk success. Lees dit artikel maar en misschien dat je er wat aan hebt.
Meestal is het inderdaad een spatie die voor of na de PHP tags staan, ook als er na "?>" een enter bevat kan het al fout gaan.

Also known as Oizopower | When Life Gives You Questions, Google has Answers


  • Jurgle
  • Registratie: Februari 2003
  • Laatst online: 24-06 00:27

Jurgle

100% Compatible

Maak daarom altijd php files die geen ?> bevatten, tenzij je inline php gebruikt

My opinions may have changed but not the fact that I am right ― Ashleigh Brilliant


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Jurgle schreef op donderdag 22 november 2007 @ 00:13:
Maak daarom altijd php files die geen ?> bevatten, tenzij je inline php gebruikt
Ranzige workaround, die niet op alle servers gaat werken. Werk liever gewoon netjes.

Dit soort problemen is imho altijd binnen 5 sec getroubleshoot omdat je weet wat je net hebt veranderd . Dus je weet waar je output genereerd, genereer je nergens output dan is het gewoon een enter/spatie te veel.

  • analog_
  • Registratie: Januari 2004
  • Niet online
Toch niet perongeluk opgeslagen als UTF8 w/ BOM ? Want dat voegt een teken toe vooraan in het bestand.

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Gomez12 schreef op donderdag 22 november 2007 @ 00:45:
[...]

Ranzige workaround, die niet op alle servers gaat werken. Werk liever gewoon netjes.
Párdon? Het is <? niet.

  • Walance
  • Registratie: September 2005
  • Laatst online: 15:39

Walance

Hm.. wat zal ik hier schrijven

Je kunt misschien proberen een "die;" onder de "header(...);" te zetten, dat wil ook wel eens helpen.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Dan nog blijft het een suffe workaround. Waar de output begonnen is wordt duidelijk gemeld en in een beetje editor kan je ook wel zien dat je (bijvoorbeeld) op het einde nog lege regels hebt. Dit is echt een van de meest eenvoudig te debuggen PHP fouten.

{signature}


  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Zie antwoord van conquerer ... gaat de pagina wel naar de login? Na een header functie dendert het script meestal nog een paar regels door voordat de redirect wordt uitgevoerd. Meteen een die() lost dit inderdaad op.

edit:
@ hier onder


Zoals door mij al eerder aangegeven moet je zo-wie-zo de beveiliging.php als een van de eerste includes maken. Wat heeft het voor zin om van alles te includen als je toch een redirect doet?

[ Voor 33% gewijzigd door hamsteg op 22-11-2007 09:45 ]

... gecensureerd ...


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Na een Location header het script stoppen is geen gek idee. Het is alleen niet de oplossing, omdat er juist voor dat punt dus al output is.

Output na headers mag wel en dat is natuurlijk maar goed ook. ;) :+

{signature}


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Voutloos schreef op donderdag 22 november 2007 @ 08:06:
[...]
Dan nog blijft het een suffe workaround. Waar de output begonnen is wordt duidelijk gemeld en in een beetje editor kan je ook wel zien dat je (bijvoorbeeld) op het einde nog lege regels hebt. Dit is echt een van de meest eenvoudig te debuggen PHP fouten.
Het is geen workaround, het ding is sinds jaar en dag optioneel en dus overbodig. Daarbij voorkom je er een fout mee die je dan niet eens hoeft te debuggen; kortom, in de meeste gevallen heeft dat ding gewoon geen plaats.

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 21:31

Gonadan

Admin Beeld & Geluid, Harde Waren
De immer bekende newline na de ?> in je includes al nagekeken? :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • Jurgle
  • Registratie: Februari 2003
  • Laatst online: 24-06 00:27

Jurgle

100% Compatible

Laten we de discussie van wanneer iets een hack, workaround, oplossing is hier niet voeren... php.net suggereert zelf om ?> weg te laten in niet inline php files, wat je daarvan vind is persoonlijk.

My opinions may have changed but not the fact that I am right ― Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • NBeat
  • Registratie: December 2005
  • Laatst online: 19-07 16:38
Headers allready-sent kan aan bovengenoemde dingen liggen

(karakters voor of na de php tags)

Maar ook door de manier waarop je script is gemaakt, het volgende is geen directe oplossing voor het probleem, maar het werkt wel.

zet gelijk onder de <?php tag
PHP:
1
ob_start();


en aan het einde van je document (voor ?>)
PHP:
1
ob_end_flush();



Zoiets zal dan bijvoorbeeld werken.. (output senden voordat je een cookie aanmaakt)
PHP:
1
2
3
4
5
6
7
8
9
10
<?php

ob_start();
echo "Hello\n";

setcookie("cookiename", "cookiedata");

ob_end_flush();

?>

XBOX Live Gamertag > NBeat


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
NBeat schreef op vrijdag 23 november 2007 @ 11:45:
Maar ook door de manier waarop je script is gemaakt, het volgende is geen directe oplossing voor het probleem, maar het werkt wel.

[niet-te-herhalen-code]
Dat is pas een ranzige workaround ;)

Output is gestart in die C:\Program Files\Wamp\www\admin\modules\auto\index.php, kleine moeite dat te fixen lijkt me :)

[ Voor 10% gewijzigd door FragFrog op 23-11-2007 12:39 ]

[ Site ] [ twitch ] [ jijbuis ]

Pagina: 1