bonsoir
l'utilisation des en-têtes en PHP doit se faire avant l'affichage d'un code HTML.
si vous avez déjà un code PHP, et que vous placez un header(); n'importe où dans ce code, il n'y a pas de problème (mais attention à ce que ce soit bien propre

).
en revanche, si vous affichez du code automatiquement HTML (echo 'str';), l'utilisation de header(); doit être oublié pour la suite de votre code.
sauf si vous placez la page dans un tampon (buffer).
cette utilisation est courante et nous enlève les casses-têtes de ces redirections ou autres utilisations des en-têtes.
un exemple me parait plus simple :
un header mais pas de code HTML
$a = 1;
$b = 2;
if($a == $b)
header('location: url');
un header et du code HTML après
$a = 1;
$b = 2;
if($a == $b)
header('location: url');
else
echo 'a est différent de b';
pas de probleme.
un header et du code HTML avant
$a = 1;
$b = 2;
if($a == $b)
echo 'a est égal à b';
else
header('location: url');
donc il faudrait placer un tampon pour que ce dernier code fonctionne.
ob_start();
$a = 1;
$b = 2;
if($a == $b)
echo 'a est égal à b';
else
header('location: url');
ob_end_flush();
ob_end_clean();
ob_start(); démarre la mise en tampon
ob_end_flush(); éteint le tampon et envoie les données
ob_end_clean(); détruit les données du tampon
ce dernier code est parfaitement correct, et évite le casse-tête de l'emplacement des header();
mais aussi pour l'utilisation des cookies (setcookie).
de plus il accélére légèrement la génération du document (il me semble)
pour plus d'informations
http://fr.php.net/manual/fr/ref.outcontrol.php
l'utilisation du manuel est la meilleur facon d'apprendre

pour ma part c'est comme ca que j'ai fais
concernant la redirection, je conseille vivement header.
le meta refresh et le javascript n'est pas correct vis à vis du référencement, et comme la fait remarquer Sol, header est nettement plus rapide.
je vous souhaite de bonne nuit en perspective
Modifié par HyWaN (29 Jul 2006 - 22:14)