La fonction header( ) doit être appelée avant la première balise HTML , et avant n 'importe quel envoi de commande PHP . C' est une erreur très courante que de lire du code avec la fonction include( ) ou avec auto_prepend et d'avoir des espaces ou des lignes vides dans ce code qui produisent un début de sortie avant que header( ) n 'ait été appelé .
|
HTTP / 1.1 demande une URI absolue comme argument de Location : , y compris le protocole , hôte et chemin absolu . Mais certains navigateurs acceptent les URI relatives . Vous pouvez généralement utiliser les variables globales $HTTP_SERVER_VARS[ 'HTTP_HOST'] , $HTTP_SERVER_VARS['PHP_SELF' ] et dirname( ) pour construire vous-même une URI absolue :
header( "Location : http : / /".$HTTP_SERVER_VARS['HTTP_HOST' ] ." / ".dirname($HTTP_SERVER_VARS['PHP_SELF'] ) ." / ".$relative_url) ;
En PHP 3 , cela ne fonctionne que si PHP est compilé comme module Apache . Vous pouvez arriver au même au résultat en utilisant l ' entête Status .
|
Vous pouvez vous rendre compte que vos pages ne sont jamais mises en cache même si vous utilisez toutes les entêtes ci-dessus . Il existe toute une collection de paramètres que les utilisateurs peuvent modifier sur leur navigateur pour modifier le comportement par défaut du cache . En envoyant les entêtes ci-dessus , vous pouvez imposer vos propres valeurs .
De plus , les paramètres session_cache_limiter( ) et session.cache_limiter peuvent être utilisé pour générer les entêtes de caches corrects , lorsque les sessions sont utilisées .
|
En PHP 4 , vous pouvez utiliser le système de cache ( output buffering ) pour contourner ce problème . Tous vos textes générés seront mis en buffer sur le serveur jusqu ' à ce que vous les envoyiez . Vous pouvez utiliser les fonctions ob_start( ) et ob_end_flush( ) dans vos scripts , ou en modifiant la directive de configuration output_buffering dans votre fichier php.ini ou vos fichiers de configuration du serveur .
|
Il y a un bug sous Microsoft Internet Explorer 4.01 qui empêche cet entête de fonctionner . Il n' y a pas d 'autre solution . Il y a aussi un bug dans Microsoft Internet Explorer 5.5 qui interfère avec ceci , mais qui peut être résolu en utilisant le Service Pack 2 ou plus récent .