Cannot modify header information
Ik ben bezig met een site die in meerdere talen kan worden weergegeven.
Op mijn localhost werkt alles maar zodra ik hem upload krijg ik de error:
Warning: Cannot modify header information - headers already sent by (output started at /customers/mbdesigner.nl/mbdesigner.nl/httpd.www/Fair/functions/main.functions.php:119) in /customers/mbdesigner.nl/mbdesigner.nl/httpd.www/Fair/pages/dynamic/language.php on line 32
(regel 119 in main.functions.php is het sluit teken van PHP ( ? > ) en op regel 32 in language.php staat: setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));)
Hoe het werkt:
Er staat ergens een URL die er zo uit ziet:
Code (php)
1
<a href="?page=language&language=nl&page2=<?php echo $_GET['page']; ?>">VLAGGETJE NEDERLANDS</a>
Hij wordt dan doorverwezen naar de language.php pagina:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
if (!isset($frame_check)){ header('location: ../../index.php'); }
if (!isset($_GET['language']) || empty ($_GET['language']))
{
echo '<b>'.LANGUAGE.'</b>';
echo "<br/><br/>";
echo NOLANGUAGE;
}
else
{
$language = $_GET['language'];
switch ($language)
{
// Standaard
default:
if (!isset($_COOKIE['language']))
{
setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));
}
else
{
setcookie("language", "", time()-3600);
setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));
}
echo '<meta http-equiv="refresh" content="0;URL=?page='.$_GET['page2'].'" />';
break;
// Nederlands
case 'nl':
if (!isset($_COOKIE['language']))
{
setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));
}
else
{
setcookie("language", "", time()-3600);
setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));
}
echo '<meta http-equiv="refresh" content="0;URL=?page='.$_GET['page2'].'" />';
break;
// Engels
case 'en':
if (!isset($_COOKIE['language']))
{
setcookie("language", 'en', mktime(18, 30, 0, 5, 12, 2020));
}
else
{
setcookie("language", "", time()-3600);
setcookie("language", 'en', mktime(18, 30, 0, 5, 12, 2020));
}
echo '<meta http-equiv="refresh" content="0;URL=?page='.$_GET['page2'].'" />';
break;
// Duits
case 'de':
if (!isset($_COOKIE['language']))
{
setcookie("language", 'de', mktime(18, 30, 0, 5, 12, 2020));
}
else
{
setcookie("language", "", time()-3600);
setcookie("language", 'de', mktime(18, 30, 0, 5, 12, 2020));
}
echo '<meta http-equiv="refresh" content="0;URL=?page='.$_GET['page2'].'" />';
break;
}
}
?>
if (!isset($frame_check)){ header('location: ../../index.php'); }
if (!isset($_GET['language']) || empty ($_GET['language']))
{
echo '<b>'.LANGUAGE.'</b>';
echo "<br/><br/>";
echo NOLANGUAGE;
}
else
{
$language = $_GET['language'];
switch ($language)
{
// Standaard
default:
if (!isset($_COOKIE['language']))
{
setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));
}
else
{
setcookie("language", "", time()-3600);
setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));
}
echo '<meta http-equiv="refresh" content="0;URL=?page='.$_GET['page2'].'" />';
break;
// Nederlands
case 'nl':
if (!isset($_COOKIE['language']))
{
setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));
}
else
{
setcookie("language", "", time()-3600);
setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));
}
echo '<meta http-equiv="refresh" content="0;URL=?page='.$_GET['page2'].'" />';
break;
// Engels
case 'en':
if (!isset($_COOKIE['language']))
{
setcookie("language", 'en', mktime(18, 30, 0, 5, 12, 2020));
}
else
{
setcookie("language", "", time()-3600);
setcookie("language", 'en', mktime(18, 30, 0, 5, 12, 2020));
}
echo '<meta http-equiv="refresh" content="0;URL=?page='.$_GET['page2'].'" />';
break;
// Duits
case 'de':
if (!isset($_COOKIE['language']))
{
setcookie("language", 'de', mktime(18, 30, 0, 5, 12, 2020));
}
else
{
setcookie("language", "", time()-3600);
setcookie("language", 'de', mktime(18, 30, 0, 5, 12, 2020));
}
echo '<meta http-equiv="refresh" content="0;URL=?page='.$_GET['page2'].'" />';
break;
}
}
?>
En als de cookie is geplaatst/gezet gaat hij weer naar de pagina waar je op stond (is $_GET['page2']) En op die pagina staat bovenaan:
Die hoort bij de functie:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function check_language()
{
// Bestaat de cookie met de language waarde (nl,en of de)
if (!isset($_COOKIE['language']))
{
require_once('languages/nl.php');
}
else
{
require_once('languages/'.$_COOKIE['language'].'.php');
}
}
?>
function check_language()
{
// Bestaat de cookie met de language waarde (nl,en of de)
if (!isset($_COOKIE['language']))
{
require_once('languages/nl.php');
}
else
{
require_once('languages/'.$_COOKIE['language'].'.php');
}
}
?>
Hopelijk snapt iemand er nog iets van en kan hij/zij mij helpen.
Alvast bedankt!
Edit: Sporen van 'weinig kennis' verwijderd. --> MD5 troep
Gewijzigd op 30/12/2010 14:05:24 door P-ter AA
case ''.md5('en').'':
Karl Karl op 30/12/2010 13:53:27:
wtf is dit voor onzin:
case ''.md5('en').'':
case ''.md5('en').'':
Haha, ja dat was/is een test om er voor te zorgen dat de pagina niet zichtbaar is. Maar dat maakt voor de fout niks uit. Ik verzin daar nog een andere oplossing voor.
Gewijzigd op 30/12/2010 13:55:51 door P-ter AA
Vanwaar die quotes?
Karl Karl op 30/12/2010 13:56:09:
Die onzin duid er bij mij al op dat je scripting kennis niet erg groot is.
Vanwaar die quotes?
Vanwaar die quotes?
Oke.
Bij case bedoel je? Omdat in mijn vorige script (van een tijd geleden) een string stond tussen ''. Dus ik heb het er gewoon tussen gezet. Maar het kan dus schijnbaar ook zonder?
Gewijzigd op 30/12/2010 13:58:58 door P-ter AA
operator, die plakt variabelen e.d. aan elkaar.
Dus wat zeg jij ?
plak NIKS aan een md5-string met NIKS erachter.
Know your basics!
Wat doet de . Dus wat zeg jij ?
plak NIKS aan een md5-string met NIKS erachter.
Know your basics!
Karl Karl op 30/12/2010 14:02:03:
Wat doet de . operator, die plakt variabelen e.d. aan elkaar.
Dus wat zeg jij ?
plak NIKS aan een md5-string met NIKS erachter.
Know your basics!
Dus wat zeg jij ?
plak NIKS aan een md5-string met NIKS erachter.
Know your basics!
Ik weet wat ze betekenen. Ik heb er alleen niet bij stil gestaan. Ik heb de code van eerder gewoon overgenomen..
(ik heb de MD5 onzin zoals jij dat noemt verwijderd.)
Ik zeg niet dat je die md5 zooi niet moet gebruiken, ik zeg dat hoe je het deed onzinnig was.
Karl Karl op 30/12/2010 14:10:36:
Ik zeg niet dat je die md5 zooi niet moet gebruiken, ik zeg dat hoe je het deed onzinnig was.
Ooh oke. Maar hoe moet ik het dan doen?
Ik moet even terug komen op wat ik eerder in het topic over de PHP Hulp slogan zei; Ik had misschien genuanceerder moeten reageren. Je bent gewoon duidelijk, en of je daar nou op zit te wachten of niet, het helpt wel. Nou zeg ik dit niet omdat ik wil dat je me nu helemaal gaat helpen maar omdat ik het nu anders ervaar
Maar nu weer ontopic.
Het betekent dat er al text (of witruimte) geëchod is voordat je die redirect doet. Om dit tegen te gaan moet je die dus allemaal weghalen en zorgen dat de < ?php tag altijd op het eerste karakter in de pagina staat.
Gewijzigd op 30/12/2010 14:15:45 door Pim -
Die md5's moet je gewoon doen zonder die quotes er omheen.
0+2+1+0 = 3, dus kan je ook 2+1=3 doen.
Pim - op 30/12/2010 14:15:29:
Maar dit alles heeft niet zo veel met de gestelde vraag te maken...
Het betekent dat er al text (of witruimte) geëchod is voordat je die redirect doet. Om dit tegen te gaan moet je die dus allemaal weghalen en zorgen dat de < ?php tag altijd op het eerste karakter in de pagina staat.
Het betekent dat er al text (of witruimte) geëchod is voordat je die redirect doet. Om dit tegen te gaan moet je die dus allemaal weghalen en zorgen dat de < ?php tag altijd op het eerste karakter in de pagina staat.
Dat is raar want die 'language check' staat bovenaan op de index pagina (waar door middel van require_once andere pagina's in geladen worden). Dit staat bovenaan op de index:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
session_start();
ini_set('display_errors', 'On');
error_reporting(E_ALL);
require_once('functions/main.functions.php');
check_language(); // Taal kijken
connect(); // Connectie met de database;
if (!isset($_COOKIE['language'])){ $language = 'nl';}else{ $language = $_COOKIE['language'];}
if (!isset($_GET['page'])) { $page = md5("home"); }else { $page = $_GET['page']; }
?>
<!DOCTYPE html PUBLIC "......
session_start();
ini_set('display_errors', 'On');
error_reporting(E_ALL);
require_once('functions/main.functions.php');
check_language(); // Taal kijken
connect(); // Connectie met de database;
if (!isset($_COOKIE['language'])){ $language = 'nl';}else{ $language = $_COOKIE['language'];}
if (!isset($_GET['page'])) { $page = md5("home"); }else { $page = $_GET['page']; }
?>
<!DOCTYPE html PUBLIC "......
En die error verschijnt in language.php (ook hier is nog niks geëchod, zie hierboven de code van language.php)
Dus dat is vreemd. :S
(Ik krijg de code trouwens ook als ik de meta-tag refresh weg haal)
Karl Karl op 30/12/2010 14:17:17:
Wat ook een manier is om nergens meer php sluit tags te doen.
Die md5's moet je gewoon doen zonder die quotes er omheen.
0+2+1+0 = 3, dus kan je ook 2+1=3 doen.
Die md5's moet je gewoon doen zonder die quotes er omheen.
0+2+1+0 = 3, dus kan je ook 2+1=3 doen.
oke bedankt! Ik zal het veranderen. :)
Gewijzigd op 30/12/2010 14:27:38 door P-ter AA
if (!isset($_GET['language']) || empty ($_GET['language']))
De functie empty() doet al een isset() controle.
Dit
if (empty ($_GET['language']))
volstaat
Maurice vB op 30/12/2010 14:26:11:
En die error verschijnt in language.php (ook hier is nog niks geëchod, zie hierboven de code van language.php)
Daar staan heel wat echo's in.
- SanThe - op 30/12/2010 15:10:20:
Daar staan heel wat echo's in.
Maurice vB op 30/12/2010 14:26:11:
En die error verschijnt in language.php (ook hier is nog niks geëchod, zie hierboven de code van language.php)
Daar staan heel wat echo's in.
Maar die worden toch niet 'uitgevoerd' voor de redirect?
Je mag helemaal geen output hebben voor een header in php.
Ik denk dat je in main.functions.php moet zoeken.
- SanThe - op 30/12/2010 15:16:42:
Ik denk dat je in main.functions.php moet zoeken.
Ja.
En hij geeft aan dat het op de laatste regel is, dus php zal wel moeilijk doen rond de ? >
Maar er wordt gesproken over header(), maar die gebruik ik toch alleen in language.php bovenaan? verder nergens, en daarboven word niks geëchod..
In Drupal laten ze die laatste ?> gewoon altijd weg in php files waar functies staan.
Laat anders je main.functions.php eens zien? Mogelijk heb je daarin output boven een header.