(comportement bizarre)pas de Headers already sent by..... ??

Eléphant du PHP | 453 Messages

30 janv. 2010, 08:51

Hello tout le monde,

J'ai un truc bizarre avec ma config PHP (5.2.9-2). C'est à dire que lorsque j'utilise un echo ou un autre type d'affichage avant un header ou setcookie ou etc., je n'ai pas l'erreur attendue. (??)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
	<head>
		<meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />
		<title>un titre</title>
	</head>
	<body>
<?php 
error_reporting(E_ALL);
session_start();
echo "quelque chose";
setcookie("cle","valeur",3600,"/");
echo $_COOKIE["ok"];
header("location:ok.html");
Le seul message d'erreur que j'ai :
Notice: Undefined index: ok in C:\wamp\www\temporaire\header_bizare\index.php on line 14
Sinon, il me fait la redirection vers ok.html. (??) Vous avez une idée d'où cela pourrait provenir ?

Bonne journée à vous.
Modifié en dernier par niuxe le 30 janv. 2010, 21:19, modifié 1 fois.
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

Eléphant du PHP | 63 Messages

30 janv. 2010, 16:39

Tu as envoyé de l'HTML à ta sortie puis le tag <?php ne figure pas en premier dans ton fichier.

ViPHP
ViPHP | 5462 Messages

30 janv. 2010, 18:02

ton session_start(); doit etre au tout debut du fichier

Eléphant du PHP | 453 Messages

30 janv. 2010, 21:11

[..]
C'est à dire que lorsque j'utilise un echo ou un autre type d'affichage avant un header ou setcookie ou etc., je n'ai pas l'erreur attendue. (??)
[..]
Sinon, il me fait la redirection vers ok.html. (??)
hum. :roll:
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

Mammouth du PHP | 881 Messages

31 janv. 2010, 05:12

S'il ne renvoie pas le message attendu, c'est peut-être simplement parce que le module "SESSION" n'est pas activé sur ton serveur.

Jette un oeil sur phpinfo();
Soyez artisans de paix

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

31 janv. 2010, 13:33

Cela provient probablement du buffer php :)

Vérifie (si tu y as accès) la valeur de output_buffering dans ton php.ini.

S'il est activé, php va stocker les données que tu envois au navigateur dans un buffer temporaire avant de les envoyer réellement. Ainsi, tant que le volume des données que tu envois au visiteur ne dépasse pas la taille du buffer (cad du output_buffering), rien n'est envoyé au navigateur.

Dans ce cas, les fonctions header(), session_start() et compagnie peuvent encore être appellées même si ton script a déjà généré des écritures (puisque php retient les données à envoyer). Mais comme il s'agit d'un paramétrage du serveur, mieux vaut que ton code n'en dépendent pas et continue à ne rien afficher avant un header() :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 453 Messages

01 févr. 2010, 05:33

Hello,

Merci Ryle, c'est bien le output_buffering. Également merci pour tes petites précisions.

Bonne journée à toi et merci à tous de m'avoir aidé. ^^
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia