mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-28 19:02:10 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@259945 c90b9560-bf6c-de11-be94-00142212c4b1
365 lines
11 KiB
XML
365 lines
11 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!-- $Revision: 1.7 $ -->
|
|
<!-- EN-Revision: 1.6 Maintainer: yannick Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
|
|
<refentry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://docbook.org/ns/docbook" xml:id="function.header">
|
|
<refnamediv>
|
|
<refname>header</refname>
|
|
<refpurpose>Envoie un en-tête HTTP</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsect1 role="description">
|
|
&reftitle.description;
|
|
<methodsynopsis>
|
|
<type>void</type><methodname>header</methodname>
|
|
<methodparam><type>string</type><parameter>string</parameter></methodparam>
|
|
<methodparam choice="opt"><type>bool</type><parameter>replace</parameter></methodparam>
|
|
<methodparam choice="opt"><type>int</type><parameter>http_response_code</parameter></methodparam>
|
|
</methodsynopsis>
|
|
<para>
|
|
<function>header</function> permet de spécifier l'en-tête <acronym>HTTP</acronym>
|
|
<parameter>string</parameter> lors de l'envoi des fichiers HTML.
|
|
Reportez-vous à <link xlink:href="&url.rfc;2616"><literal>HTTP/1.1
|
|
Specification</literal></link> pour plus d'informations sur les en-têtes
|
|
<acronym>HTTP</acronym>.
|
|
</para>
|
|
<para>
|
|
N'oubliez jamais que <function>header</function> doit être appelée
|
|
avant que le moindre contenu ne soit envoyé, soit par des
|
|
lignes HTML habituelles dans le fichier, soit par des affichages
|
|
PHP. Une erreur très classique est de lire un fichier avec
|
|
<function>include</function> ou <function>require</function>,
|
|
et de laisser des espaces ou des lignes vides, qui produiront
|
|
un affichage avant que la fonction <function>header</function>
|
|
ne soit appelée. Le même problème existe avec les fichiers
|
|
PHP/HTML standards.
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<html>
|
|
<?php
|
|
/* Ceci produira une erreur. Notez la sortie si dessus,
|
|
* qui se trouve avant l'appel à la fonction header() */
|
|
header('Location: http://www.example.com/');
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="parameters">
|
|
&reftitle.parameters;
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><parameter>string</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
L'en-tête.
|
|
</para>
|
|
<para>
|
|
Il y a deux en-têtes spéciaux. Le premier commence par la chaîne
|
|
"<literal>HTTP/</literal>" (insensible à la casse), qui est utilisée
|
|
pour signifier le statut HTTP à envoyer. Par exemple, si vous avez configuré
|
|
Apache pour utiliser les scripts PHP pour gérer les requêtes vers des fichiers
|
|
inexistants (en utilisant la directive <literal>ErrorDocument</literal>),
|
|
vous voulez-vous assurer que le script génère un code statut correct.
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
header("HTTP/1.0 404 Not Found");
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
<para>
|
|
Le deuxième type d'appel spécial est <literal>"Location:"</literal>.
|
|
Non seulement il renvoie un en-tête au client, mais, en plus, il
|
|
envoie un statut <literal>REDIRECT</literal> (302) à
|
|
Apache. Du point de vue de l'auteur de script, cela importe peu,
|
|
mais pour ceux qui connaissent les rouages internes d'Apache, c'est
|
|
primordial.
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
header("Location: http://www.example.com/"); /* Redirection du navigateur */
|
|
|
|
/* Assurez-vous que la suite du code ne soit pas exécutée une fois la redirection effectuée. */
|
|
exit;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>replace</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Le paramètre optionnel <parameter>replace</parameter> indique
|
|
si la fonction <function>header</function> doit remplacer
|
|
un en-tête précédemment émis, ou bien ajouter un autre en-tête
|
|
du même type. Par défaut, un nouvel en-tête va écraser le
|
|
précédent, mais si vous passez &false; dans cet argument, vous pouvez
|
|
forcer les en-têtes multiples pour un même type d'en-tête.
|
|
Par exemple :
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
header('WWW-Authenticate: Negotiate');
|
|
header('WWW-Authenticate: NTLM', false);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>http_response_code</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Force le code réponse HTTP à la valeur spécifiée.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="returnvalues">
|
|
&reftitle.returnvalues;
|
|
<para>
|
|
&return.void;
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="changelog">
|
|
&reftitle.changelog;
|
|
<para>
|
|
<informaltable>
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>&Version;</entry>
|
|
<entry>&Description;</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>4.4.2 et 5.1.2</entry>
|
|
<entry>
|
|
Cette fonction prévient l'envoi de plus d'un en-tête en même
|
|
temps pour lutter contre les attaques par injection d'en-tête.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>4.3.0</entry>
|
|
<entry>
|
|
Ajout du paramètre <parameter>http_response_code</parameter>.
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>4.0.4</entry>
|
|
<entry>
|
|
Ajout du paramètre <parameter>replace</parameter>.
|
|
</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="examples">
|
|
&reftitle.examples;
|
|
<para>
|
|
<example>
|
|
<title>Boîte de téléchargement</title>
|
|
<para>
|
|
Si vous voulez que vos utilisateur recoivent une alerte pour sauver
|
|
les fichiers générés, comme si vous génériez un
|
|
fichier PDF, vous pouvez utiliser l'en-tête
|
|
<link xlink:href="&url.rfc;2183">Content-Disposition</link> pour
|
|
fournir un nom de fichier par défaut, à afficher dans le
|
|
dialogue de sauvegarde.
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// Vous voulez afficher un pdf
|
|
header('Content-type: application/pdf');
|
|
|
|
// Il sera nommé downloaded.pdf
|
|
header('Content-Disposition: attachment; filename="downloaded.pdf"');
|
|
|
|
// Le source du PDF original.pdf
|
|
readfile('original.pdf');
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Directives concernant la mise en cache</title>
|
|
<para>
|
|
Les scripts PHP génèrent souvent du HTML dynamiquement,
|
|
qui ne doit pas être mis en cache, ni par le client, ni par les
|
|
proxy intermédiaires. On peut forcer la désactivation du
|
|
cache de nombreux clients et proxy avec :
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
|
|
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
<para>
|
|
<note>
|
|
<para>
|
|
Vous pouvez vous rendre compte que vos pages ne sont jamais mises
|
|
en cache même si vous utilisez tous les en-tê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 en-têtes
|
|
ci-dessus, vous pouvez imposer vos propres valeurs.
|
|
</para>
|
|
<para>
|
|
De plus, les paramètres <function>session_cache_limiter</function> et
|
|
<literal>session.cache_limiter</literal> peuvent être utilisés pour
|
|
générer les en-têtes de caches corrects, lorsque les sessions sont
|
|
utilisées.
|
|
</para>
|
|
</note>
|
|
</para>
|
|
</example>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="notes">
|
|
&reftitle.notes;
|
|
<note>
|
|
<para>
|
|
Depuis 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 <function>ob_start</function> et
|
|
<function>ob_end_flush</function> dans vos scripts, ou en
|
|
modifiant la directive de configuration <literal>output_buffering</literal>
|
|
dans votre fichier &php.ini; ou vos fichiers
|
|
de configuration du serveur.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
Le code statut HTTP doit toujours être le premier à être envoyé au client,
|
|
au regard de l'actuel <function>header</function> qui peut être le premier
|
|
ou non. Le statut peut être écrasé en appelant <function>header</function>
|
|
avec un nouveau statut à n'importe quel moment même si l'en-tête HTTP a
|
|
déjà été envoyé.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
Il y a un bogue sous Microsoft Internet Explorer 4.01 qui empêche
|
|
cet en-tête de fonctionner. Il n'y a pas d'autre solution.
|
|
Il y a aussi un bogue 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.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<simpara>
|
|
Si <link linkend="ini.safe-mode">safe mode</link> est activé,
|
|
l'UID du script est ajouté à la partie <literal>realm</literal>
|
|
des en-têtes <literal>WWW-Authenticate</literal> que vous envoyez
|
|
avec cet en-tête.
|
|
</simpara>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
HTTP/1.1 demande une <acronym>URI</acronym> absolue comme argument
|
|
de <link xlink:href="&spec.http1.1;-sec14.html#sec14.30"><literal>Location:</literal></link>,
|
|
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 <varname>$_SERVER['HTTP_HOST']</varname>,
|
|
<varname>$_SERVER['PHP_SELF']</varname> et <function>dirname</function> pour
|
|
construire vous-même une URI absolue :
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/* Redirection vers une page différente du même dossier */
|
|
$host = $_SERVER['HTTP_HOST'];
|
|
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
|
|
$extra = 'mypage.php';
|
|
header("Location: http://$host$uri/$extra");
|
|
exit;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
L'ID de session n'est pas passé avec l'en-tête Location même si
|
|
<link linkend="ini.session.use-trans-sid">session.use_trans_sid</link>
|
|
est activé. Il doit être passé manuellement en utilisant la constante
|
|
<constant>SID</constant>.
|
|
</para>
|
|
</note>
|
|
</refsect1>
|
|
|
|
<refsect1 role="seealso">
|
|
&reftitle.seealso;
|
|
<para>
|
|
<simplelist>
|
|
<member><function>headers_sent</function></member>
|
|
<member><function>setcookie</function></member>
|
|
<member>
|
|
La section sur l'<link linkend="features.http-auth">identification
|
|
HTTP</link>
|
|
</member>
|
|
</simplelist>
|
|
</para>
|
|
</refsect1>
|
|
|
|
</refentry>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"../../../../manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
--> |