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 @@ + + + + Funzioni HTTP + HTTP + + + + Queste funzioni permettono di manipolare le risposte di un server remoto + verso un client attraverso interazioni (headers) del protocollo HTTP. + + + + + + header + Spedisce un header HTTP + + + Descrizione + + + int header + string string + bool replace + + + + La funzione header si utilizzata in cima ad un + documento HTML per inviare headers HTTP + ad un server remoto. Per informazioni dettagliate sul protocollo HTTP + si vedano la risorsa HTTP 1.1 specification. + + + L'argomento opzionale replace 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 replace assume il valore + &false; vengono forzate intestazioni multiple dello stesso tipo. Per esempio: + + + +header('www-authenticate: Negociate'); +header('www-authenticate: NTLM',false); + + + + + 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. + + +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. */ + + + + + + HTTP 1.1 richiede un URI assoluto come argomento di + Location: + 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 dirname + per creare URI assoluti da URI relativi in modo automatico: + + +header ("Location: http://".$HTTP_SERVER_VARS['HTTP_HOST'] + ."/".dirname($HTTP_SERVER_VARS['PHP_SELF']) + ."/".$relative_url); + + + + + + 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: + + +header ("HTTP/1.0 404 Not Found"); + + + + + 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: + + +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 + + + + + Bisogna ricordare che la funzioneheader va + chiamata prima di qualsiasi output HTML o PHP (anche righe o spazi vuoti). + E' un errore comune leggere files con funzioni include, + o require (o altre funzioni capaci di accedere a files), + che possano emettere in output spazi o linee vuote prima di una chiamata della + funzione header. Lo stesso problema esiste nell'utilizzare + file PHP/HTML. + + +<?php require("user_logging.inc") ?> + + +<?php header ("Content-Type: audio/x-pn-realaudio"); ?> +// Non funziona. Notate le linee vuote sopra + + + + + Vedi anche headers_sent + + + + + + + headers_sent + Restituisce &true; se gli headers (intestazioni HTTP) sono stati + trasmessi. + + + + Descrizione + + + bool headers_sent + + + + + Questa funzione restituisce &true; se le intestazioni + HTTP sono state spedite correttamente, + &false; in caso contrario. + + + Vedi anche header + + + + + + + setcookie + Spedisce (crea) un cookie verso un client + + + Descrizione + + + int setcookie + string name + string + value + + int + expire + + string + path + + string + domain + + int + secure + + + + + setcookie definisce un cookie da inviare insieme + alle altre informazioni HTTP. I cookie devono essere spediti + prima di qualsiasi altra intestazione (questa è + una restrizione dei cookies, non di PHP). E' necessario perciò chiamare + la funzione setcookie prima di + qualsiasi tags, anche <html> o <head>. + + + Tutti gli argomenti della funzione eccetto name + sono opzionali. Se viene passato alla funzione solo l'argomento name, + 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 (""). Gli argomenti expire + e secure che richiedono numeri interi, non possono essere omessi + inserendo una stringa vuota, per questo scopo si usa (0). L'argomento + expire è un normale intero Unix Timestamp ottenibile grazie alle + funzioni time o mktime. secure + sta ad indicare che il cookie dovrebbe essere trasmesso soltanto attraverso un collegamento + sicuro di tipo HTTPS. + + + Sbagli comuni: + + + + I cookie diventano disponibili soltanto dalla pagina successiva a quella + che li ha generati, o dopo il ricaricamento di questa. + + + + + I cookie devono essere cancellati specificando gli stessi parametri con + cui sono stati creati. + + + + + + In PHP 3, chiamate successive di setcookie + 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 setcookie invece, sono eseguite + secondo l'ordine di chiamata. + + + Alcuni esempi sul modo di spedire cookie: + + <function>setcookie</function> esempi di spedizione/creazione + +setcookie ("TestCookie", "Test Value"); +setcookie ("TestCookie", $value,time()+3600); /* aspira in 1 ora */ +setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1); + + + + + Gli esempi mostrano come cancellare i cookie introdotti nell'esempio precedente: + + <function>setcookie</function> esempi di cancellazione + +setcookie ("TestCookie"); +// set the expiration date to one hour ago +setcookie ("TestCookie", "", time() - 3600); +setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1); + + + 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. + + + 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: + + +echo $TestCookie; +echo $HTTP_COOKIE_VARS["TestCookie"]; + + + + + 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: + + +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"; + } +} + + + + + Per saperne di più sui cookies, Netscape's cookie + specification è la risorsa giusta &spec.cookies;. + + + Microsoft Internet Explorer 4 con Service Pack 1 non + crea correttamente cookie che hanno il parametro + path specificato. + + + Netscape Communicator 4.05 e Microsoft Internet Explorer 3.x + sembrano utilizzare in modo errato i cookie quando + path ed expire + non sono specificati. + + + + + +