alan_dangelo Fri Nov 2 20:25:45 2001 EDT
Modified files:
/phpdoc/it/functions http.xml
Log:
EN-Revision: 1.29 Traduzione completa del file http.xml - Alan D'Angelo
Index: phpdoc/it/functions/http.xml
diff -u /dev/null phpdoc/it/functions/http.xml:1.10
--- /dev/null Fri Nov 2 20:25:45 2001
+++ phpdoc/it/functions/http.xml Fri Nov 2 20:25:45 2001
@@ -0,0 +1,328 @@
+<?xml encoding="iso-8859-1"?>
+<!-- EN-Revision: 1.29 Maintainer: alan_dangelo Status: ready -->
+ <reference id="ref.http">
+ <title>Funzioni HTTP</title>
+ <titleabbrev>HTTP</titleabbrev>
+
+ <partintro>
+ <simpara>
+ Queste funzioni permettono di manipolare le risposte di un server remoto
+ verso un client attraverso interazioni (headers) del protocollo HTTP.
+ </simpara>
+ </partintro>
+
+ <refentry id="function.header">
+ <refnamediv>
+ <refname>header</refname>
+ <refpurpose>Spedisce un header HTTP</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Descrizione</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>int <function>header</function></funcdef>
+ <paramdef>string <parameter>string</parameter></paramdef>
+ <paramdef>bool <parameter><optional>replace</optional></parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <para>
+ La funzione <function>header</function> si utilizzata in cima ad un
+ documento <acronym>HTML</acronym> per inviare headers <acronym>HTTP</acronym>
+ ad un server remoto. Per informazioni dettagliate sul protocollo
+<acronym>HTTP</acronym>
+ si vedano la risorsa <ulink url="&spec.http1.1;">HTTP 1.1 specification</ulink>.
+ </para>
+ <para>
+ L'argomento opzionale <parameter>replace</parameter> indica se l'intestazione
+ inviata deve sostituirne una spedita precedentemente dello stesso tipo, o
+ accodarsi alla prima intestazione. Per default la funzione invia un'intestazione
+ che rimpiazza la precedente, ma se <parameter>replace</parameter> assume il
+valore
+ &false; vengono forzate intestazioni multiple dello stesso tipo. Per esempio:
+
+ <informalexample>
+ <programlisting role="php">
+header('www-authenticate: Negociate');
+header('www-authenticate: NTLM',false);
+ </programlisting>
+ </informalexample>
+ </para>
+ <para>
+ Ci sono due casi speciali di chiamate di headers. Il primo riguarda
+ "Location". Location non trasmette solo un'intestazione al
+ client browser, ma anche un codice REDIRECT ad un server Apache. Dal
+ punto di vista della programmazione questa informazione non � importante,
+ ma per chi conosce il funzionamento di Apache � un aspetto interessante
+ da sapere.
+ <informalexample>
+ <programlisting role="php">
+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 URI assoluto come argomento di
+ <ulink url="&spec.http1.1;-sec14.html#sec14.30">Location:</ulink>
+ composto da protocollo, hostname, e path assoluto. Alcuni clients
+ possono accettare anche URIs relativi, ma � bene non fare affidamento
+ su questa eccezione. 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>
+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, "HTTP/" (questo non � un esempio).
+ Per esempio, se si riceve la direttiva Apache ErrorDocument 404 puntando
+ ad un nostro script PHP, � una buona idea assicurarsi che sia veramente
+ stato lo script a generare l'errore 404. La prima cosa da fare �
+ inserire nello script la seguente intestazione:
+ <informalexample>
+ <programlisting role="php">
+header ("HTTP/1.0 404 Not Found");
+ </programlisting>
+ </informalexample>
+ </para>
+ <para>
+ Spesso gli scrit PHP generano HTML dinamico, se volete evitare che i
+ contenuti dinamici vengano mantenuti nella cache di browser o proxy,
+ potete forzare il loro comportamento con questa direttiva:
+ <informalexample>
+ <programlisting role="php">
+header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Data passata
+header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
+ // continuamente modificato
+header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
+header ("Pragma: no-cache"); // HTTP/1.0
+ </programlisting>
+ </informalexample>
+ </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">
+<?php require("user_logging.inc") ?>
+
+
+<?php header ("Content-Type: audio/x-pn-realaudio"); ?>
+// Non funziona. Notate le linee vuote sopra
+ </programlisting>
+ </informalexample>
+ </para>
+ <para>
+ Vedi anche <function>headers_sent</function>
+ </para>
+ </refsect1>
+ </refentry>
+
+ <refentry id="function.headers-sent">
+ <refnamediv>
+ <refname>headers_sent</refname>
+ <refpurpose>Restituisce &true; se gli headers (intestazioni HTTP) sono stati
+ trasmessi.
+ </refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Descrizione</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>bool <function>headers_sent</function></funcdef>
+ <void/>
+ </funcprototype>
+ </funcsynopsis>
+ <para>
+ Questa funzione restituisce &true; se le intestazioni
+ <acronym>HTTP</acronym> sono state 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 (crea) un cookie verso un client</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Descrizione</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>int <function>setcookie</function></funcdef>
+ <paramdef>string <parameter>name</parameter></paramdef>
+ <paramdef>string
+ <parameter><optional>value</optional></parameter>
+ </paramdef>
+ <paramdef>int
+ <parameter><optional>expire</optional></parameter>
+ </paramdef>
+ <paramdef>string
+ <parameter><optional>path</optional></parameter>
+ </paramdef>
+ <paramdef>string
+ <parameter><optional>domain</optional></parameter>
+ </paramdef>
+ <paramdef>int
+ <parameter><optional>secure</optional></parameter>
+ </paramdef>
+ </funcprototype>
+ </funcsynopsis>
+ <para>
+ <function>setcookie</function> definisce un cookie da inviare insieme
+ alle altre informazioni <acronym>HTTP</acronym>. 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><html></literal> o
+<literal><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>""</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>
+ Sbagli 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">
+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">
+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">
+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">
+setcookie ("cookie[three]", "cookiethree");
+setcookie ("cookie[two]", "cookietwo");
+setcookie ("cookie[one]", "cookieone");
+if (isset ($cookie)) {
+ while (list ($name, $value) = each ($cookie)) {
+ echo "$name == $value<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
+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
+-->