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 (403 lines) | stat: -rw-r--r-- 15,604 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
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- EN-Revision: 1.34 Maintainer: alan_dangelo  Status: ready -->
 <reference id="ref.http">
  <title>Funzioni HTTP</title>
  <titleabbrev>HTTP</titleabbrev>

  <partintro>
   <simpara>
    Queste funzioni permettono di modificare l'output inviato verso un browser
    attraverso manipolazioni a livello di protocollo HTTP.
   </simpara>
  </partintro>

  <refentry id="function.header">
   <refnamediv>
    <refname>header</refname>
    <refpurpose>Spedisce un header HTTP</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descrizione</title>
     <methodsynopsis>
      <type>int</type><methodname>header</methodname>
      <methodparam><type>string</type><parameter>string</parameter></methodparam>
      <methodparam choice="opt"><type>bool</type><parameter>replace</parameter></methodparam>
     </methodsynopsis>
    <para>
     <function>header</function> si utilizza per inviare header <acronym>HTTP</acronym>.
     Per maggiorni informazioni riguardanti gli header <acronym>HTTP</acronym>
     si veda la risorsa <ulink url="&spec.http1.1;">HTTP 1.1 specification</ulink>.

    </para>
    <para>
     L'argomento opzionale <parameter>replace</parameter> indica se l'header 
     inviato deve sostituirne uno simile spedito precedentemente, o accodarsi 
     al primo dello stesso tipo. Per default la funzione sostituisce
     l'header precedente, ma se viene passato &false; come secondo argomento
     vengono forzate intestazioni multiple. Per esempio:
     <informalexample>
      <programlisting role="php">
<![CDATA[
header('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM',false);
]]>
      </programlisting>
     </informalexample>
    </para>
    <para>
     Ci sono due casi speciali di chiamate di header. Il primo  
     &quot;Location&quot;. Location non trasmette solo un header al 
     browser, ma anche un <literal>REDIRECT</literal> con 
     codice di stato (302).
     <informalexample>
      <programlisting role="php">
<![CDATA[
header("Location: http://www.php.net/"); /* Ridireziona il browser 
                                            al sito di PHP */
exit;                 /* Assicura che il codice sottostante 
                         non sia eseguito dopo il redirezionamento. */
]]>
      </programlisting>
     </informalexample>
    </para>
    <note>
     <para>
      HTTP/1.1 richiede un <acronym>URI</acronym> assoluto come argomento di 
      <ulink url="&spec.http1.1;-sec14.html#sec14.30">Location:</ulink>
      composto da schema, hostname, e path assoluto, ma alcuni clients 
      possono accettare anche URIs relativi. E' possibile usare 
      $HTTP_SERVER_VARS['HTTP_HOST'], $HTTP_SERVER_VARS['PHP_SELF'] 
      e <function>dirname</function> per creare URI assoluti da URI relativi 
      in modo automatico:
      <informalexample>
       <programlisting>
<![CDATA[
header ("Location: http://".$HTTP_SERVER_VARS['HTTP_HOST']
                       ."/".dirname($HTTP_SERVER_VARS['PHP_SELF'])
                       ."/".$relative_url);
]]>
       </programlisting>
      </informalexample>
     </para>
    </note>
    <para>
     Il secondo caso speciale  esemplificato dalle intestazioni che 
     iniziano con la stringa, &quot;<literal>HTTP/</literal>&quot; (le maiuscole non sono 
     discriminanti), che  usato per inviare codici di stato HTTP.
     Per esempio, se si  configurato Apache per usare script PHP per la 
     manipolazione di richieste fallite (usando la direttiva 
     <literal>ErrorDocument</literal>), potete desiderare di assicurarvi
     che il vostro script generi il codice adeguato. 
     <informalexample>
      <programlisting role="php">
<![CDATA[
header ("HTTP/1.0 404 Not Found");
]]>
      </programlisting>
     </informalexample>
     <note>
      <para>
       In PHP 3, questo funziona solo se PHP  compilato come modulo
       Apache. Potete ottenere lo stesso effetto usando l'header
       <literal>Status</literal>.
       <informalexample>
        <programlisting role="php">
<![CDATA[
header("Status: 404 Not Found");
]]>
        </programlisting>
       </informalexample>
      </para>
     </note>
    </para>
    <para>
     Spesso gli scrit PHP generano contenuti dinamici, se volete evitare che i 
     contenuti vengano mantenuti nella cache di browser o proxy, 
     potete forzare il loro comportamento con questa direttiva:

     <informalexample>
      <programlisting role="php">
<![CDATA[
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Data passata
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
                                                     // sempre modificato
header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");                          // HTTP/1.0
]]>
      </programlisting>
     </informalexample>
     <note>
      <para>
       E' possibile che alcune pagine rimangano in chache anche dopo 
       l'uso degli header descritti sopra. Ci sono delle opzioni che 
       l'utente pu settare dal browser, capaci di modificare i comportamenti 
       di default del caching. Per trasmettere efficacemente gli header 
       descritti, bisogna che sia inattiva ogni regolazione che pu forzare 
       comportamenti contrari.
      </para>
      <para>
       Inoltre, <function>session_cache_limiter</function> e
       e la configurazione <literal>session.cache_limiter</literal>
       possono essere usate per generare automaticamente i corretti
       header relativi al caching durante l'uso delle sessioni.
      </para>
     </note>
    </para>
    <para>
     Bisogna ricordare che la funzione<function>header</function> va 
     chiamata prima di qualsiasi output HTML o PHP (anche righe o spazi
     vuoti). E' un errore comune leggere files con funzioni 
     <function>include</function>, o <function>require</function> 
     (o altre funzioni capaci di accedere a files), che possano emettere 
     in output spazi o linee vuote prima di una chiamata della funzione 
     <function>header</function>. Lo stesso problema esiste nell'utilizzare
     file PHP/HTML.
     <informalexample>
      <programlisting role="php">
<![CDATA[
<?php require("user_logging.inc") ?>


<?php header ("Content-type: audio/x-pn-realaudio"); ?>
// Non funziona, notate le linee vuote sopra
]]>
      </programlisting>
     </informalexample>
     <note>
      <para>
       In PHP 4, potete usare il buffering dell'output per aggirare
       questo problema, evitando ogni output al browser trattenedolo
       al server fino a che non gli si impone l'invio. Si pu fare questa operazione
       chiamando <function>ob_start</function> e <function>ob_end_flush</function>
       nello script, o settando la direttiva di configurazione 
       <literal>output_buffering</literal> nel file <filename>php.ini</filename> o
       nel file di configurazione del server.
      </para>
     </note>
    </para>    
    <para>
     Se desiderate che l'utente sia spinto a salvare i dati trasmessi 
     per esempio utilizzando un file PDF, potete usare 
     l'header <ulink url="&url.rfc2183;">Content-Disposition</ulink>, che vi
     permette di dare un nome al file e forzare il browser a mostrare la finestra
     di dialogo save.
     <informalexample>
      <programlisting role="php">
<![CDATA[
<?php
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=downloaded.pdf");

/* ... manda in output un file pdf ... */
]]>
      </programlisting>
     </informalexample>
     <note>
      <para>
       Per un bug di Microsoft Internet Explorer 4.01 qusto sistema
       non funziona. Non ci sono soluzioni. C' un altro bug in Microsoft 
       Internet Explorer 5.5 che impedisce il giusto funzionamento,
       ma  possibile risolverlo con l'upgrade del Service Pack 2 o superiore.
      </para>
     </note>
    </para>
    <para>
     Vedi anche <function>headers_sent</function>,
     <function>setcookie</function>, e la sezione 
     <link linkend="features.http-auth">Autenticazione HTTP usando PHP</link>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.headers-sent">
   <refnamediv>
    <refname>headers_sent</refname>
    <refpurpose>Restituisce &true; se gli header sono stati trasmessi.</refpurpose>

   </refnamediv>
   <refsect1>
    <title>Descrizione</title>
     <methodsynopsis>
      <type>bool</type><methodname>headers_sent</methodname>
      <void/>
     </methodsynopsis>
    <para>
     Questa funzione restituisce &true; se gli header <acronym>HTTP</acronym> 
     sono stati spedite correttamente, &false; in caso contrario.
    </para>
    <para>
     Vedi anche <function>header</function>
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.setcookie">
   <refnamediv>
    <refname>setcookie</refname>
    <refpurpose>Spedisce un cookie</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descrizione</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> definisce un cookie da inviare insieme 
     alle altre informazioni di header. I cookie devono essere spediti
     <emphasis>prima</emphasis> di qualsiasi altra intestazione (questa  
     una restrizione dei cookies, non di PHP). E' necessario perci chiamare 
     la funzione <function>setcookie</function> <emphasis>prima</emphasis> di 
     qualsiasi tags, anche <literal>&lt;html></literal> o <literal>&lt;head></literal>.
    </para>
    <para>
     Tutti gli argomenti della funzione eccetto <parameter>name</parameter>
     sono opzionali. Se viene passato alla funzione solo l'argomento 
     <parameter>name</parameter>, il cookie registrato con quel nome 
     verr cancellato dal client su cui  archiviato. E' possibile 
     sostituire gli argomenti che non si intende specificare utitlizzando 
     una stringa vuota (<emphasis>&quot;&quot;</emphasis>). Gli argomenti 
     <parameter>expire</parameter> e <parameter>secure</parameter> che richiedono
     numeri interi, non possono essere omessi inserendo una stringa vuota, per 
     questo scopo si usa (<emphasis>0</emphasis>). L'argomento 
     <parameter>expire</parameter>  un normale intero Unix Timestamp ottenibile
     grazie alle funzioni <function>time</function> o <function>mktime</function>.
     <parameter>secure</parameter> sta ad indicare che il cookie dovrebbe essere
     trasmesso soltanto attraverso un collegamento sicuro di tipo HTTPS.
    </para>
    <para>
     Errori comuni:
     <itemizedlist>
      <listitem>
       <simpara>
        I cookie diventano disponibili soltanto dalla pagina successiva a quella
        che li ha generati, o dopo il ricaricamento di questa. 
       </simpara>
      </listitem>
      <listitem>
       <simpara>
        I cookie devono essere cancellati specificando gli stessi parametri con cui sono stati creati.
       </simpara>
      </listitem>
     </itemizedlist>
    </para>
    <simpara>
     In PHP 3, chiamate successive di <function>setcookie</function>
     nello stesso script sono eseguite in ordine inverso. Se state provando 
     a cancellare un cookie prima dell' inserimento di un altro cookie, 
     dovete creare il secondo prima della cancellazione del primo. In PHP 4, 
     chiamate successive di <function>setcookie</function> invece, sono eseguite secondo l'ordine di chiamata. 
    </simpara>
    <para>
     Alcuni esempi sul modo di spedire cookie:
     <example>
      <title><function>setcookie</function> esempi di spedizione/creazione</title>
      <programlisting role="php">
<![CDATA[
setcookie ("TestCookie", "Test Value");
setcookie ("TestCookie", $value,time()+3600);  /* aspira in 1 ora */
setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1);
]]>
      </programlisting>
     </example>
    </para>
    <para>
     Gli esempi mostrano come cancellare i cookie introdotti nell'esempio precedente:
     <example>
      <title><function>setcookie</function> esempi di cancellazione</title>
      <programlisting role="php">
<![CDATA[
setcookie ("TestCookie");
// set the expiration date to one hour ago
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
]]>
      </programlisting>
     </example>
     Per cancellare un cookie dovete assicurarvi che la data di scadenza del 
     cookie sia gi trascorsa, in questo modo il cookie verr rimosso dal client.
    </para>
    <para>
     Si noti che i valori salvati nei cookies sono automaticamente codificati
     per la trasmissione via URL (urlencoded) quando il cookie viene inviato, 
     e che al momento del richiamo sono automaticamente decodificati e assegnati ad 
     una variabile che ha lo stesso nome del cookie. Per vedere il contenuto di 
     un cookie in uno script, si usa una di queste due sintassi: 
     <informalexample>
      <programlisting role="php">
<![CDATA[
echo $TestCookie;
echo $HTTP_COOKIE_VARS["TestCookie"];
]]>
      </programlisting>
     </informalexample>
    </para>
    <para>
     Potete registrare array in un cookie usando la notazione degli array 
     al posto del nome del cookie. Questo equivale alla spedizione di tanti 
     cookie quanti sono gli elementi dell'array, ma si ha un vantaggio: quando 
     il cookie  ricevuto, tutti i suoi valori sono ordinati in un singolo array 
     che ha per nome il nome del cookie:
     <informalexample>
      <programlisting role="php">
<![CDATA[
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>\n";
    }
}
]]>
      </programlisting>
     </informalexample>
    </para>
    <para>
     Per saperne di pi sui cookies, Netscape's cookie
     specification  la risorsa giusta <ulink
     url="&spec.cookies;">&spec.cookies;</ulink>.
    </para>
    <simpara>
     Microsoft Internet Explorer 4 con Service Pack 1 non 
     crea correttamente cookie che hanno il parametro 
     <parameter>path</parameter> specificato.
    </simpara>
    <simpara>
     Netscape Communicator 4.05 e Microsoft Internet Explorer 3.x 
     sembrano utilizzare in modo errato i cookie quando 
     <parameter>path</parameter> ed <parameter>expire</parameter> non sono specificati.
    </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:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->