PHP : Rediriger vers une autre page Web avec header()

Il arrive qu'un programme Web ait besoin de rediriger automatiquement l'internaute vers une nouvelle page Web. Ce sera le cas par exemple pour une page Web qui doit enregistrer des données puis retourner à la page qui affiche un tableau de l'ensemble des données enregistrées.

En PHP, c'est la fonction header() qui se charge de cette tâche.

▼Publicité

Ex :

PHP

header("Location: index.php");

Attention : si vous travaillez avec WordPress, consultez l'article « La redirection avec WordPress » pour connaître la meilleure technique à utiliser.

Ne rien envoyer au navigateur avant l'appel à header()

Pour que la fonction header() puisse transférer le traitement vers une nouvelle page Web, l'instruction doit être placée AVANT toute balise HTML.

Ex :

PHP

<!DOCTYPE html>

<?php header("Location: index.php"); ?>

Cette instruction générera l'erreur « Warning: Cannot modify header information - headers already sent ». Ceci se produit parce que le fichier PHP a déjà commencé à envoyer du code HTML au navigateur avant de rencontrer la fonction header().

Parfois, certains codes auront été envoyés au navigateurs sans que nous nous en rendions compte. C'est le cas, notamment, s'il y a des lignes blanches entre deux sections <?php ... ?>.

Ex :

PHP

<?php

   ...

?>

       

<?php

   ...

?>

<?php header("Location: index.php"); ?>

Encore plus subtile, des espaces avant une section <?php ... ?> peuvent empêcher un header() de fonctionner.

Ex :

PHP

       <?php

            ...

        ?>

        <?php header("Location: index.php"); ?>

Mémoire tampon autorisée dans le fichier php.ini

Il est possible que vos configurations php.ini prévoient l'utilisation d'une mémoire tampon avant d'envoyer les codes HTML au navigateur.

Ex :

php.ini

output_buffering = 4096

Si c'est le cas sur votre poste de travail, la fonction header() pourra être utilisée lorsqu'une petite quantité de caractères a été envoyée au navigateur. Mais attention : si vous mettez votre site en ligne sur un serveur ayant une configuration différente, votre programme plantera.

N'oubliez pas de redémarrer votre serveur PHP après avoir apporté des modifications dans le fichier php.ini.

S'assurer que rien ne soit exécuté après une redirection

Lorsqu'on utilise le fonction header() pour rediriger l'internaute vers une nouvelle page, il faut comprendre qu'après avoir effectué la redirection, PHP exécutera le code situé sous l'appel de header().

Ex :

PHP

if (...) {

    header("Location: index.php");

}

...   // le code situé ici sera exécuté même s'il y a une redirection

Pour nous assurer que PHP n'exécute pas du code non désiré, il est possible de faire suivre l'appel de header() par un exit.

Ex :

PHP

if (...) {

    header("Location: index.php");

    exit;

}

...   // le code situé ici ne sera pas exécuté après la redirection

ou mieux, on peut structurer notre code de façon à ce qu'il n'y ait pas de code à exécuter après un header.

Ex :

PHP

if (...) {

    header("Location: index.php");

}

else {

    ...   // le code situé ici ne sera pas exécuté après la redirection

}

Pour plus d'information

« header ». PHP. http://php.net/manual/fr/function.header.php

« PHP - How to fix the error "Warning: Cannot modify header information – headers already sent by …" ». MoGosselin. http://www.mogosselin.com/warning-cannot-modify-header-information-headers-already-sent-by/

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories