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 +-->