Et oui, parce qu'on le répète très souvent, j'ai décidé d'en faire un petit tutorial.
Pour commencer, il faut savoir en premier lieu que les en-têtes se placent toujours en premier ! C'est à dire avant de pouvoir commencer à écrire du code html.
Je m'explique un peu mieux. Imaginons que vous vouliez utiliser les cookies sur votre site, mais que vous faites ca :
<?php
echo 'Je te met un cookie sur ton PC';
setcookie('moi', ' ', time() +3600);
?>
A l'éxécution du script, on se retrouve avec une belle page d'erreur (je vous laisse découvrir ce que ca contient :)) !
Pourquoi ? Parce qu'utiliser les cookies doit se faire avant TOUTE sortie html sur le navigateur de votre visiteur.
Ce que j'appèle sortie html, c'est par exemple :
-> un echo()
-> un print()
-> du html tout simple
Donc, dans mon exemple du haut, je dois faire :
<?php
setcookie('moi', ' ', time() +3600);
echo 'Je te met un cookie sur ton PC';
?>
Et la, comme par magie, ca marche ! Cet exemple marche également pour les sessions !
<?php
echo 'je teste ta session';
session_start();
?>
Ce script renverra (à quelques détails près) la mêmeerreur que pournotre exemple de cookie. Il faut donc mettresession_start() au dessusde tout !
Egalement pour la fonction header(). C'est la où beaucoup de gens ne comprennent pas. Imaginons ceci :
<?php
echo 'Je vais te rediriger sur ma page web';
header('Location: index.php');
?>
Bah la c'est pareil, il ne faut rien avant le header()(sauf d'autresen-têtes, si y'a un session_start() par exemple, ca negène en rien dutout ) ! Ce type d'erreur est flagrante sur lesformulairesspécialements.
Si vous ne pouvez pas faire autrement(avis personnel, cela signifiepour moi que le site est un peu mal codé,on ne place jamais desen-têtes en plein milieu d'une page), il existecependant une autresolution :
<?php
ob_start();
ob_end_flush();
?>
Grâce à ces 2 fonctions, vous allez enfin pouvoir réaliser votre rêve : utiliser les en-têtes comme bon vous semble !
Petit exemple, imaginons un script avec session_start() :
<?php
ob_start();
echo 'je teste ta session';
session_start();
ob_end_flush();
?>
Et la, ca marche bel et bien. Mais pourquoi ?
Ces 2 fonctions sont utilisées pour faire du cache principalement.
http://fr.php.net/ob_start
http://fr.php.net/manual/fr/function.ob-end-flush.php
Voila voila, au moins comme ca, c'est dit :)
Bisou =)