headers already sent
Ik heb een index.php die als volgt begint:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>-</title>
<link href="style_layout.css" rel="stylesheet" type="text/css" />
</head>
<?php
include ('config.php');[/code]
Nu wil ik hier een session_start(); in hebben, ik dacht, deze zet ik helemaal bovenaan, nog voor het doctype, maar zelfs dat levert een foutmelding op, waar moet ik deze zetten?
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>-</title>
<link href="style_layout.css" rel="stylesheet" type="text/css" />
</head>
<?php
include ('config.php');[/code]
Nu wil ik hier een session_start(); in hebben, ik dacht, deze zet ik helemaal bovenaan, nog voor het doctype, maar zelfs dat levert een foutmelding op, waar moet ik deze zetten?
Gewijzigd op 01/01/1970 01:00:00 door Stefan van Iwaarden
Dan weet ik niet of session_start() de fout veroorzaakt. Heb je niet iets van een header() functe in config.php?
Headers already sent by geeft ook aan op welke lijn de output als is begonnen.
Je moet niet vergeten dat session_start(); helemaal bovenaan moet, er mag dus niks voor staan
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
session_start();
//goed
?>
<?php
echo 'lol';
session_start();
//fout (let op de spatie voor <?php, en op de echo)
?>
session_start();
//goed
?>
<?php
echo 'lol';
session_start();
//fout (let op de spatie voor <?php, en op de echo)
?>
geef je relevante code + foutmelding eens, want dit is voor ons gewoon gokwerk.
zelfs een spatie of enter is al output.
zelfs een spatie of enter is al output.
De code is als volgt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Adsupply - Affiliate Programma</title>
<link href="style_layout.css" rel="stylesheet" type="text/css" />
</head>
<?php
include ('config.php');[/code]
Dit levert deze foutmelding op:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/admin/domains/adsupply.nl/public_html/index.php:1) in /home/admin/domains/adsupply.nl/public_html/index.php on line 2
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Adsupply - Affiliate Programma</title>
<link href="style_layout.css" rel="stylesheet" type="text/css" />
</head>
<?php
include ('config.php');[/code]
Dit levert deze foutmelding op:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/admin/domains/adsupply.nl/public_html/index.php:1) in /home/admin/domains/adsupply.nl/public_html/index.php on line 2
'erwin:
Ob douw je in je vriedin, niet in php.
@topicstarter, blijkbaar heb je nog een teken voor session_start staan. Gebruik je dreamweaver ofzo? Plak het anders eens in kladblok, kijk of er nog een teken voor staat, haal het weg, en sla het op.
'erwin:
Nee! Dit is enkel een smerig lapmiddel, daar los je het eigenlijke probleem niet mee op! Bovendien is deze functie helemaal niet voor dit doeleinde bedoelt...Waarschijnlijk staan er voor de php openingstag nog enkele onzichtbare tekens in je document (google maar eens op 'utf-8 bom'). Probeer dus de code vanaf de PHP openingstag eens te kopieren naar een nieuw php bestand en dat uit te voeren. Wellicht dat het dan wel werkt.
@ Erwin: Jij bent er zeker zo eentje die ook de lampjes op je dashbord afplakt als je je eraan irriteerd?
NEE! GEEN OBSTART
nooit
nu niet
morgen niet
niet na de koffie
NOOIT
nooit
nu niet
morgen niet
niet na de koffie
NOOIT
ob_start(); werkt anders wel die fout weg, ook als de fout niet kan worden gevonden. Deze functie zit niet voor niets nog steeds in PHP5 ;-)
Niet om die reden Cccchris. Meer om te laten zien hoe het niet moet.
Ook de reden dat Paris Hilton en Britney nog leven
Ook de reden dat Paris Hilton en Britney nog leven
@Chris: OMG, ob_start is hier niet voor bedoelt! Deze functie schakelt output buffering is, maar dat ga wil je nooit gebruiken als lapmiddel om je headers already sent foutmeldingen weg te werken. Simpelweg omdat je de eigenlijke fout hier niet mee oplost!
Zorg dat je script goed in elkaar zit en dat er voor functies als header() en session_start() nog geen output verzonden is naar de browser, dan heb je dat hele probleem niet...
ps. Dat ob_start() nog steeds in PHP5 aanwezig is, is omdat het soms gewenst is om van output buffering gebruik te maken. Maar het oplossen van je headers already sent foutmeldingen is dus niet zo'n geval.
Zorg dat je script goed in elkaar zit en dat er voor functies als header() en session_start() nog geen output verzonden is naar de browser, dan heb je dat hele probleem niet...
ps. Dat ob_start() nog steeds in PHP5 aanwezig is, is omdat het soms gewenst is om van output buffering gebruik te maken. Maar het oplossen van je headers already sent foutmeldingen is dus niet zo'n geval.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
enige dat ik er over kwijt wil :
niet zien != weg
niet zien != weg
de code gekopieerd in kladblok, dit opgeslagen onder dezelfde naam, geupload en weg fout!
Lekker dan, die output die je niet kunt zien, ik werk inderdaad met dreamweaver, dat wel.
Lekker dan, die output die je niet kunt zien, ik werk inderdaad met dreamweaver, dat wel.
Misschien plaatst dreamweaver iets van een spatie na de <?php tag. Daardoor kan er toch nog output voor de session_start(); ontstaan. Maar zoals ik het leest blijkt dat ook niet het geval te zijn...
Anyway, het is opgelost.
Anyway, het is opgelost.
Gewijzigd op 01/01/1970 01:00:00 door GaMer B
@Gamer: een spatie tussen php tags is geen output. Het gaat juist om spaties buiten de php tags. Bovendien hoeft de session_start() niet eens op de eerste regel na het openen van een php blok te staan, het volgende mag ook gewoon:
Niets in dit hele blok heeft namelijk output naar de browser tot gevolg. Zet je echter een spatie voor de php openingstag, tja dan loopt het hele zooitje in de soep ;-)
ps. Even voor de goede orde: ik loop nu natuurlijk niet te promoten om session_start() ergens op de helft van je script te zetten. Het is veel slimmer en overzichtelijker om dat gewoon aan het begin te houden!
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sVar = 'Een variabele';
$sAndereVar = 'Een andere variabele';
// <-- Nutteloze spaties
session_start();
?>
$sVar = 'Een variabele';
$sAndereVar = 'Een andere variabele';
// <-- Nutteloze spaties
session_start();
?>
Niets in dit hele blok heeft namelijk output naar de browser tot gevolg. Zet je echter een spatie voor de php openingstag, tja dan loopt het hele zooitje in de soep ;-)
ps. Even voor de goede orde: ik loop nu natuurlijk niet te promoten om session_start() ergens op de helft van je script te zetten. Het is veel slimmer en overzichtelijker om dat gewoon aan het begin te houden!
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Ohja, klopt. :X Bedoelde inderdaad VOOR de <?php tag.. Maar toch is het wel raadselachtig zo'n soort situatie als die van Stefan van Iwaarden.
Het probleem wordt mogelijk veroorzaakt door de UTF-8 BOM die in het document aanwezig geweest zou kunnen zijn.
Je moet het probleem eerder tegengekomen zijn om het te herkennen, maar in dit soort situaties is het vaak vrij snel duidelijk: een foutloze PHP code geeft toch een headers already sent foutmelding ;-)
Je moet het probleem eerder tegengekomen zijn om het te herkennen, maar in dit soort situaties is het vaak vrij snel duidelijk: een foutloze PHP code geeft toch een headers already sent foutmelding ;-)
'Stefan:
Lekker dan, die output die je niet kunt zien, ik werk inderdaad met dreamweaver, dat wel.
Dat heb ik wel eens vaker gezien....
Macromedia verteld zelf ook wat over BOM.




