File: http.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (378 lines) | stat: -rw-r--r-- 14,913 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.12 $ -->
<reference id="ref.http">
 <title>HTTP</title>
 <titleabbrev>HTTP</titleabbrev>
 <partintro>
  <simpara>
   Ces fonctions permettent de travailler sur les informations transmises
   au navigateur, via le protocole HTTP.
  </simpara>
 </partintro>
 <refentry id="function.header">
  <refnamediv>
   <refname>header</refname>
   <refpurpose>Envoie une en-t&ecirc;te HTTP.</refpurpose>
  </refnamediv>
  <refsect1>
   <title>Description</title>
    <methodsynopsis>
     <type>int</type><methodname>header</methodname>
     <methodparam><type>string</type><parameter>string</parameter></methodparam>
    </methodsynopsis>
   <para>
    <function>header</function> permet de sp&eacute;cifier une
    en-t&ecirc;te HTTP lors de l'envoi des fichiers HTML. Reportez-vous
    &agrave; <ulink url="&spec.http1.1;">HTTP 1.1 Specification</ulink>
    pour plus d'informations sur les en-t&ecirc;tes HTTP.
   </para>
   <note>
    <para>
     La fonction <function>header</function> doit &ecirc;tre appel&eacute;e avant la
     premi&egrave;re balise HTML, et avant n'importe quel envoi de commande
     PHP. C'est une erreur tr&egrave;s courante que de lire du code avec la
     fonction <function>include</function> ou avec auto_prepend et d'avoir
     des espaces ou des lignes vides dans ce code qui produisent un
     d&eacute;but de sortie avant que <function>header</function>
     n'ait &eacute;t&eacute; appel&eacute;.
    </para>
   </note>
   <para>
    Il y a cependant deux en-t&ecirc;tes sp&eacute;ciales. Le premier est
    &quot;Location&quot;. Non seulement il renvoie une en-t&ecirc;te au
    client, mais en plus, il envoie un statut de redirection &agrave;
    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.
    <informalexample>
     <programlisting role="php">
&lt;?php
  header("Location: http://www.php.net/");
/* Redirige le client vers le site PHP */
  exit();
/* Garantit que le code ci-dessous n'est jamais ex&eacute;cut&eacute;. */
?&gt;
     </programlisting>
    </informalexample>
   </para>
   <note>
    <para>
     HTTP/1.1 demande une <acronym>URI</acronym> absolue comme argument
     de <ulink url="&spec.http1.1;-sec14.html#sec14.30">Location:</ulink>,
     y compris le protocole, h&ocirc;te et chemin absolu. Mais certains
     navigateurs acceptent les URI relatives. Vous pouvez g&eacute;n&eacute;ralement
     utiliser les variables globales $HTTP_SERVER_VARS['HTTP_HOST'], 
     $HTTP_SERVER_VARS['PHP_SELF'] et <function>dirname</function> pour
     construire vous-m&ecirc;me une URI absolue : 
     <informalexample>
      <programlisting>
header("Location: http://".$HTTP_SERVER_VARS['HTTP_HOST']
                     ."/".dirname($HTTP_SERVER_VARS['PHP_SELF'])
                     ."/".$relative_url);
      </programlisting>
     </informalexample>
    </para>
   </note>
   <para>
    Le deuxi&egrave;me type d'appel sp&eacute;cial regroupe toutes les
    en-t&ecirc;tes qui commencent par &quot;HTTP/&quot; (la casse n'est
    pas importante). Par exemple, si vous avez votre page d'erreur 404
    Apache qui pointe sur un script PHP, c'est une bonne id&eacute;e
    que de vous assurer que le script PHP g&eacute;n&egrave;re une erreur
    404. La premi&egrave;re chose &agrave; faire dans votre script est  :
    <informalexample>
     <programlisting role="php">
&lt;?php
  header("HTTP/1.0 404 Not Found");
?&gt;
     </programlisting>
    </informalexample>
   </para>
    <note>
     <para>
      En PHP 3, cela ne fonctionne que si PHP est compil&eacute; comme
      module Apache. Vous pouvez arriver au m&ecirc;me au r&eacute;sultat
      en utilisant l'ent&ecirc;te <literal>Status</literal>.
      <informalexample>
       <programlisting role="php">
header("Status: 404 Not Found");
       </programlisting>
      </informalexample>
     </para>
    </note>
   <para>
    Les scripts PHP g&eacute;n&egrave;rent souvent du HTML dynamiquement,
    qui ne doit pas &ecirc;tre mis en cache, ni par le client, ni par les
    proxy interm&eacute;diaires. On peut forcer la d&eacute;sactivation du
    cache de nombreux clients et proxy avec
    <informalexample>
     <programlisting role="php">
&lt;?php
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");             // Date du pass&eacute;
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // toujours modifi&eacute;
  header("Cache-Control: no-cache, must-revalidate");           // HTTP/1.1
  header("Pragma: no-cache");                                   // HTTP/1.0
?&gt;
     </programlisting>
    </informalexample>
   </para>
   <note>
    <para>
     Vous pouvez vous rendre compte que vos pages ne sont jamais mises
     en cache m&ecirc;me si vous utilisez toutes les ent&ecirc;tes ci-dessus.
     Il existe toute une collection de param&egrave;tres que les utilisateurs
     peuvent modifier sur leur navigateur pour modifier le 
     comportement par d&eacute;faut du cache. En envoyant les ent&ecirc;tes
     ci-dessus, vous pouvez imposer vos propres valeurs.
    </para>
    <para>
     De plus, les param&egrave;tres <function>session_cache_limiter</function> et
     <literal>session.cache_limiter</literal> peuvent &ecirc;tre utilis&eacute; pour
     g&eacute;n&eacute;rer les ent&ecirc;tes de caches corrects, lorsque les sessions sont
     utilis&eacute;es.
    </para>
   </note>
   <para>
    N'oubliez jamais que <function>header</function> doit &ecirc;tre appel&eacute;e
    avant que le moindre contenu ne soit envoy&eacute;, soit par des
    lignes HTML habituelles dans le fichier, soit par des affichges
    PHP. Une erreur tr&egrave;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 g&eacute;n&egrave;reront
    un affichage avant que la fonction <function>header</function>
    ne soit appel&eacute;e. Le m&ecirc;me probl&egrave;me existe avec les fichiers
    PHP/HTML standards.
    <informalexample>
     <programlisting role="php">
&lt;?php
  require("user_logging.inc")
?&gt;
&lt;?php
  header("Content-Type: audio/x-pn-realaudio");
?&gt;
&nbsp;
// Erreur :  Notez la ligne blanche ci-dessus
      </programlisting>
     </informalexample>
    </para>
   <note>
    <para>
     En PHP 4, vous pouvez utiliser le syst&egrave;me de cache (output buffering)
     pour contourner ce probl&egrave;me. Tous vos textes g&eacute;n&eacute;r&eacute;s seront
     mis en buffer sur le serveur jusqu'&agrave; 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 <filename>php.ini</filename> ou vos fichiers
     de configuration du serveur.
    </para>
   </note>
   <para>
    Si vous voulez que vos utilisateur recoivent une alerte pour sauver
    les fichiers g&eacute;n&eacute;r&eacute;s, comme par exemple si vous g&eacute;n&eacute;rez un
    fichier PDF, vous pouvez utiliser l'ent&ecirc;te <ulink
    url="&url.rfc2183;">Content-Disposition</ulink> pour 
    fournir un nom de fichier par d&eacute;faut, &agrave; afficher dans le
    dialogue de sauvegarde.
    <informalexample>
     <programlisting role="php">
&lt;?php
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=downloaded.pdf");

/* ... output pdf file ... */
     </programlisting>
    </informalexample>
    <note>
     <para>
      Il y a un bug sous Microsoft Internet Explorer 4.01 qui emp&ecirc;che
      cet ent&ecirc;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&egrave;re avec ceci, mais qui peut &ecirc;tre r&eacute;solu en utilisant
      le Service Pack 2 ou plus r&eacute;cent.
     </para>
    </note>
   </para>
   <para>
    Voir aussi
    <function>headers_sent</function>,
    <function>setcookie</function>, et la section sur 
    <link linkend="features.http-auth">l'authentification HTTP </link>.
    </para>
   </refsect1>
  </refentry>
    <refentry id="function.headers-sent">
   <refnamediv>
    <refname>headers_sent</refname>
    <refpurpose>
      Indique si les ent&ecirc;tes HTTP ont d&eacute;j&agrave; &eacute;t&eacute;
      envoy&eacute;s
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
     <methodsynopsis>
      <type>boolean</type><methodname>headers_sent</methodname>
      <methodparam><parameter>void</parameter></methodparam>
     </methodsynopsis>
    <para>
     <function>headers_sent</function> retourne &true;
     si les ent&ecirc;tes <acronym>HTTP</acronym> ont d&eacute;j&agrave;
     &eacute;t&eacute; envoy&eacute;s, et &false; sinon.
    </para>
    <para>
     Voir aussi
     <function>header</function>.
    </para>
   </refsect1>
  </refentry>
  <refentry id="function.setcookie">
   <refnamediv>
    <refname>setcookie</refname>
    <refpurpose>Envoie un cookie</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
     <methodsynopsis>
      <type>int</type><methodname>setcookie</methodname>
      <methodparam><type>string</type><parameter>name</parameter></methodparam>
      <methodparam choice="opt"><type>string</type><parameter>value</parameter></methodparam>
      <methodparam choice="opt"><type>int</type><parameter>expire</parameter></methodparam>
      <methodparam choice="opt"><type>string</type><parameter>path</parameter></methodparam>
      <methodparam choice="opt"><type>string</type><parameter>domain</parameter></methodparam>
      <methodparam choice="opt"><type>int</type><parameter>secure</parameter></methodparam>
    </methodsynopsis>
   <para>
    <function>setcookie</function> d&eacute;finit un cookie qui sera envoy&eacute;
    avec le reste des en-t&ecirc;tes. Les cookies doivent passer avant toute autre
    en-t&ecirc;te (c'est une restriction des cookies, pas de PHP). Cela vous impose
    d'appeler cette fonction avant toute balise <literal>&lt;HTML></literal>
    ou <literal>&lt;HEAD></literal>.
   </para>
   <para>
    Tous les arguments sauf <parameter>name</parameter> (nom) sont optionnels.
    Si seul le nom est pr&eacute;sent, le cookie portant ce nom sera
    supprim&eacute; du navigateur de l'internaute. Vous pouvez aussi utiliser une
    cha&icirc;ne vide comme valeur, pour ignorer un argument.
    Le param&egrave;tre <parameter>expire</parameter> est un
    timestamp UNIX, du m&ecirc;me genre que celui retourn&eacute; par
    <function>time</function> ou <function>mktime</function>.
    Le param&egrave;tre <parameter>secure</parameter> indique
    que le cookie doit &ecirc;tre uniquement transmis &agrave; travers
    une connexion HTTPS s&eacute;curis&eacute;e.
   </para>
   <para>
    Erreurs communes :
    <itemizedlist>
     <listitem>
       <simpara>
        Les cookies ne seront accessibles qu'au chargement de la prochaine page,
        ou au rechargement de la page courante.
       </simpara>
      </listitem>
      <listitem>
       <simpara>
        Les cookies doivent &ecirc;tre effac&eacute;s avec les m&ecirc;mes param&egrave;tres
        que ceux utilis&eacute;s lors de leur cr&eacute;ation.
       </simpara>
      </listitem>
     </itemizedlist>
    </para>
    <simpara>
     En PHP 3, les appels multiples &agrave; <function>setcookie</function> dans le
     m&ecirc;me script seront effectu&eacute;s dans l'ordre inverse. Si vous essayez d'effacer
     un cookie avant d'ins&eacute;rer une nouvelle valeur, vous devez placer l'insertion
     avant l'effacement. En PHP 4, les appels multiples &agrave;
     <function>setcookie</function> sont effectu&eacute;s dan un ordre naturel.
    </simpara>
   <simpara>
    Les appels multiples &agrave; <function>setcookie</function> dans la m&ecirc;me
    page seront r&eacute;alis&eacute;s dans l'ordre inverse. Si vous essayez
    d'effacer un cookie avant d'ins&eacute;rer une autre valeur, il faut
    placer l'insertion avant l'effacement.
   </simpara>
   <para>
    Quelques exemples :
    <example>
     <title>Exemples avec <function>setcookie</function></title>
     <programlisting role="php">
&lt;?php
  setcookie("TestCookie","Valeur de test");
  setcookie("TestCookie",$value,time()+3600);  /* expire dans une heure */
  setcookie("TestCookie",$value,time()+3600,"/~rasmus/",".utoronto.ca",1);
?&gt;
     </programlisting>
    </example>
   </para>
   <para>
    Notez que la partie "valeur" du cookie sera automatiquement
    encod&eacute;e URL lorsque vous envoyez le cookie, et lorsque
    vous le recevez, il sera automatiquement d&eacute;cod&eacute;,
    et affect&eacute; &agrave; la variable du m&ecirc;me nom que
    le cookie. Pour voir le r&eacute;sultat, essayez les scripts suivants :
    <informalexample>
     <programlisting role="php">
&lt;?php
  echo $TestCookie;
  echo $HTTP_COOKIE_VARS["TestCookie"];
?&gt;
     </programlisting>
    </informalexample>
   </para>
   <para>
    Vous pouvez aussi utiliser les cookies avec des tableaux, en utilisant la
    notation des tableaux. Cela a pour effet de cr&eacute;er autant de
    cookies que votre tableau a d'&eacute;l&eacute;ments, mais lorsque
    les cookies seront re&ccedil;us par PHP, les valeurs seront
    plac&eacute;es dans un tableau :
    <informalexample>
     <programlisting role="php">
&lt;?php
  setcookie( "cookie[three]", "cookiethree" );
  setcookie( "cookie[two]", "cookietwo" );
  setcookie( "cookie[one]", "cookieone" );
  if ( isset( $cookie ) ) {
    while( list( $name, $value ) = each( $cookie ) ) {
      echo "$name == $value&lt;br&gt;\n";
    }
  }
?&gt;
     </programlisting>
    </informalexample>
   </para>
   <para>
    Pour d'autres informations sur les cookies, jetez un oeil sur
    <ulink url="&spec.cookies;">&spec.cookies;</ulink>.
   </para>
   <simpara>
    Microsoft Internet Explorer 4 utilis&eacute; avec le Service Pack 1
    ne g&egrave;re pas bien les cookies qui poss&egrave;dent un
    param&egrave;tre <parameter>path</parameter>.
   </simpara>
   <simpara>
    Netscape Communicator 4.05 et Microsoft Internet Explorer 3.x
    semblent ne pas g&eacute;rer correctement les cookies lorsque
    <parameter>path</parameter> et <parameter>time></parameter> ne
    sont pas fournis.
   </simpara>
  </refsect1>
 </refentry>
</reference>
<!-- 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:
-->