Laboratorio di reti II: PHP
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Laboratorio di reti II: PHP Stefano Brocchi brocchi@dsi.unifi.it 2 marzo, 2009 Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 1 / 55
Il PHP Il PHP Il PHP è un linguaggio di scripting che si può inserire in una pagina HTML permettendo di creare la pagina web dinamicamente come definito nel codice PHP Esistono plugin PHP per numerosi server HTTP che permettono al codice nelle pagine PHP di essere interpretato ed eseguito Quando un client farà quindi richiesta di una pagina PHP, il server eseguirà il codice in essa contenuto ed il suo output, insieme al codice HTML della pagina, verrà restituito all’utente PHP è un acronimo ricorsivo per PHP, hypertext preprocessor Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 2 / 55
Il PHP Il PHP Il linguaggio PHP è gratuito, può essere utilizzato anche per fini commerciali senza alcuna spesa ed i plugin e molte librerie sviluppate dagli autori possono essere ottenute liberamente Il PHP è il linguaggio per la creazione di pagine dinamiche più usato nel mondo. La configurazione più classica di un server web è la cosidetta LAMP: Linux, Apache, MySql, PHP Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 3 / 55
Il PHP Il PHP Il codice PHP in una pagina web deve essere delimitato dai simboli Similarmente ad altri linguaggi, ogni istruzione PHP termina con un punto e virgola Per creare output da inserire nella pagina web utilizzare il metodo print() Analogamente si può utilizzare l’istruzione echo. Questa non è propriamente un metodo; l’istruzione echo stampa sulla pagina la stringa specificata. Messaggi di errore generati da PHP vengono generalmente scritti su file di log gestiti dal server Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 4 / 55
Il PHP Hello world in PHP Vediamo il codice di una semplice pagina PHP: Hello World in PHP Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 5 / 55
Il PHP Variabili PHP e weak typing Variabili in PHP Le variabili in PHP sono identificate da stringhe che iniziano con il simbolo $ Il linguaggio PHP si dice weak typed: questo vuol dire che non ci sono controlli statici sulle variabili. Si possono utilizzare variabili non dichiarate o cambiare tipo ad una variabile senza generare errori Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 6 / 55
Il PHP Variabili PHP e weak typing Problemi del weak typing Il weak typing può essere comodo in quanto ci permette di risparmiare diverso codice, ma può anche essere causa di numerosi errori piuttosto insidiosi. Il seguente codice per esempio ciclerebbe all’infinito: L’errore è dato dall’errore di battitura $mioIdnice al posto di $mioIndice; l’interprete PHP in questo caso crea una nuova variabile $mioIdnice e non aggiorna il contatore del ciclo Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 7 / 55
Il PHP Variabili PHP e weak typing Problemi del weak typing Essendo anche le varie operazioni e funzioni definite per tipi generici, i risultati per tipi diversi da quelli attesi possono essere piuttosto insoliti Per fare un esempio, l’operatore ’+’ se applicato a stringhe, per poter fare la somma converte queste ad interi scartando i caratteri a partire dal primo che non rappresenta una cifra Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 8 / 55
Il PHP Variabili PHP e weak typing Funzioni PHP per la gestione di variabili Per la manipolazione di variabili esistono diverse funzioni tra cui isset() che restituisce true se la variabile è stata definita unset() che impone che una determinata variabile risulti indefinita var dump() che stampa informazioni dettagliate (per variabili ’semplici’ tipo e valore) sulla variabile passata Tutte le precedenti possono essere applicate ad un qualsiasi numero di argomenti Per determinare il tipo di una variabile esistono funzioni come is int() o is string(). Inoltre il metodo gettype() restituisce il tipo della variabile come una stringa Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 9 / 55
Il PHP Costrutti e strutture di base Operatori Gli operatori aritmetici PHP hanno sostanzialmente la stessa sintassi che in Java, e sono +, -, +, /, % (modulo), ++ (incremento) e - - (decremento) Come in altri linguaggi, è possibile usare la notazione per gli assegnamenti $var op= ...; Es. $var -= $var2; Come in Java anche gli operatori logici: && (and), k (or) e ! (not) Commenti inseribili tramite // se su un’unica riga o con la sintassi /* commento */ Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 10 / 55
Il PHP Costrutti e strutture di base If, while e for Le sintassi degli operatori if, while e for seguono nuovamente la solita sintassi Java Un esempio che stampa un conto alla rovescia: Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 11 / 55
Il PHP Array in PHP Vettori Un vettore in PHP può essere definito con la sintassi $var = array( elemento0, elemento1, ... ) Grazie al weak typing è possibile mescolare in un unico vettore elementi di tipo diverso I vettori in PHP sono inoltre dinamici, ed è possibile aggiungere elementi anche oltre gli indici di definizione del vettore Grazie alla sintassi $vettore[] = elemento è possibile aggiungere un elemento nella prima posizione libera Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 12 / 55
Il PHP Array in PHP Vettori Un esempio di utilizzo di vettori: L’output sarà ’zero 1 due tre 4’ Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 13 / 55
Il PHP Array in PHP Vettori Un’altra caratteristica utile dei vettori in PHP è la possibilità di definire degli indici non numerici ma in forma di stringa Per specificare un vettore con determinati valori associati a determinate chiavi, utilizzare la sintassi $array = array(chiave1 => elemento1, chiave2 => elemento2, ...) Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 14 / 55
Il PHP Array in PHP Vettori Un esempio: L’output sarà ’zero 1 due’ Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 15 / 55
Il PHP Array in PHP Vettori Per scorrere comodamente gli elementi di un vettore esiste l’istruzione foreach Con foreach si specifica di ciclare una volta per ogni valore nel vettore La sintassi è la seguente: foreach ($array as [$key =>] $value) ... Array rappresenta l’array da scorrere, value il valore dei suoi elementi e key, se specificato, il valore delle sue chiavi Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 16 / 55
Il PHP Array in PHP Vettori Un esempio dell’uso di foreach: L’output sarà ’key = value; 2 = value2;’ Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 17 / 55
Il PHP Stringhe ed apici Stringhe ed apici In PHP le stringhe possono essere limitate dai due tipi di apici: ” oppure ’ La differenza tra i due è che con i doppi apici le variabili all’interno della stringa vengono interpretate con il loro valore $var = ’Valore’; echo ’$var’; // Output: $var echo "$var"; // Output: Valore All’interno di una stringa delimitata da un tipo di apice si può inserire l’altro tipo di apice senza caratteri di escape Questo è comodo quando dobbiamo inserire apici nell’HTML: echo ’’; Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 18 / 55
Il PHP Stringhe ed apici Stringhe ed apici L’operatore di concatenazione in PHP è il punto (.) Es. echo "La variabile a ha valore ".$a.""; Sono a disposizione per le stringhe i soliti caratteri di escape come \n per newline E’ utile inserire degli ’a capo’ nella pagina in modo da produrre codice HTML leggibile dal programmatore, consentendo una più facile risoluzione dei problemi se ci sono errori nella pagina creata Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 19 / 55
Il PHP Importazione di file esterni Importazione di file esterni In PHP si possono importare file esterni tramite la funzione include ’nomefile’ Es. include ’head.php’; Quando viene incontrata un’istruzione include, PHP si comporta come se il codice presente nel file indicato si trovasse al posto dell’istruzione include Il file indicato viene trattato come se fosse all’esterno di tag . Se in questo file si vuole specificare codice php sarà necessario riaprire il tag di delimitazione Utilizzare file esterni per definire funzioni che vengono utilizzate in più pagine, in modo da mantenere la modularità Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 20 / 55
Il PHP Importazione di file esterni Altre funzioni di importazione Per l’importazione di file si può utilizzare la funzione require L’effetto è identico a quello di include con l’unica differenza che, in caso di errore nel caricare il file, require causa la terminazione dell’esecuzione Esistono inoltre le funzioni include once e require once che includono il file specificato solo se questo non è stato incluso precedentemente Queste sono utili per file che definiscono delle funzioni o delle variabili, in quanto si evita cosı̀ di dare più definizioni per la stessa entità causando potenzialmente dei problemi Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 21 / 55
Il PHP Definizione di funzioni Definire funzioni In PHP possono essere definite delle funzioni tramite la sintassi function nomefunzione (parametri) { corpo } Es. function resto($dividendo, $divisore) {...} Essendo PHP weak-typed, non occorre specificare il tipo di parametri in ingresso, anche se può essere utile indicare che tipo è atteso nella documentazione del codice Ogni funzione può ritornare una variabile, anche se questo non è specificato nella sua dichiarazione. L’istruzione per la restituzione di valore è, come in Java, return Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 22 / 55
Il PHP Definizione di funzioni Visibilità delle variabili Normalmente, all’interno di una funzione le variabili definite esternamente non sono visibili. Un esempio di codice: $a = 1; function f() { echo 3 + $a; // $a non definito if f() } f(); // Output: ’3’ Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 23 / 55
Il PHP Definizione di funzioni Visibilità delle variabili Per specificare che una variabile fa riferimento all’ambiente esterno alla funzione, utilizzare l’istruzione global: $a = 1; function f() { global $a; echo 3 + $a; // $a = 1 } f(); // Output: ’4’ Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 24 / 55
Il PHP Oggetti in PHP Oggetti in PHP A partire dal PHP 5 è stato introdotto nel linguaggio il supporto degli oggetti Per garantire comunque la retro compatibilità con le versioni precedenti, gli oggetti risultano essere una funzionalità aggiuntiva e non l’entità di base come in altri linguaggi I controlli sulla correttezza dell’uso dei vari oggetti sono molto limitati, coerentemente alla politica del weak-typing Ad esempio la chiamata ad un metodo inesistente di un oggetto non genera alcun tipo di errore a tempo di compilazione Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 25 / 55
Il PHP Oggetti in PHP Oggetti in PHP La definizione di una classe avviene tramite la sintassi class nomeclasse { corpo } La creazione di un oggetto viene fatta tramite la parola chiave new: Es. $a = new obj(); Il costruttore di una classe deve essere definito in un metodo chiamato construct() Per richiamare metodi di un oggetto utilizzare il simbolo -> Es. $a->metodo(); Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 26 / 55
Il PHP Oggetti in PHP Oggetti in PHP Il simbolo ::, anche detto Paamayim Nekudotayim, serve per definire l’accesso a metodi di un oggetto al posto di -> nei seguenti casi: Quando si vuole accedere ad un metodo staticamente, cioè senza un riferimento ad un oggetto della classe dove è definito il metodo In php si può accedere in modo statico anche a metodi non statici; in questo caso qualsiasi campo dell’oggetto al quale il metodo fa riferimento risulta indefinito Per accedere a campi costanti (e quindi statici) di una classe definiti tramite la parola chiave const Per accedere a metodi dell’oggetto padre sovrascritti, tramite la sintassi parent::nomemetodo() Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 27 / 55
Il PHP Oggetti in PHP Oggetti in PHP Altre funzionalità offerte dal php: Definizione di campi e metodi public, private e protected funzionanti esattamente come in Java Variabile $this, rappresentante l’oggetto corrente. Se il metodo che fa riferimento a $this è stato richiamato in modo statico, la variabile farà riferimento all’oggetto dal quale è stato chiamato il metodo Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 28 / 55
Il PHP Oggetti in PHP Oggetti in PHP Ancora altre funzionalità offerte dal php per gli oggetti: Metodo get class() che restituisce il nome della classe di un oggetto passato come una stringa Parola chiave static, che specifica che un metodo può essere richiamato solo in modo statico Altre keywords per funzionalità del tutto uguali a quelle in Java: extends per l’estendibilità, abstract per classi astratte e final per classi e metodi che non possono venir estesi o riscritti Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 29 / 55
Il PHP Esercizio (1) Esercizio (1) Realizzare il sito rappresentante il forum tramite template Creare delle funzioni PHP che generino automaticamente parti dei documenti HTML comuni a più pagine Per esempio, creare funzioni per l’intestazione della pagina, per la struttura iniziale e per i vari box Per quanto riguarda le liste di thread o di post in un thread, creare delle funzioni che generino i vari elementi in funzione di un codice identificativo. Per ora ignorare il codice nel corpo della funzione, in seguito questo servirà per ottenere il contenuto richiesto salvato nel database Riportare in dei file esterni, da importare dal codice PHP, i frammenti di codice HTML da utilizzare Mantenere le informazioni sulle liste di link nei vari box in vettori associativi Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 30 / 55
Il PHP Esercizio (1) Esercizio (1) Dopo aver cosı̀ modularizzato il sito, in un file PHP rappresentante una pagina web dovranno essere presenti solo alcune chiamate a funzioni PHP oltre al contenuto della specifica pagina In questo modo, per creare una nuova pagina sarà sufficiente riutilizzare le stesse funzioni e scrivere soltanto il contenuto che differisce dalle altre pagine Inoltre tramite questa tecnica si può modificare la struttura di tutte le pagine presenti nel sito modificando un’unico file HTML rappresentante il template Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 31 / 55
Il PHP Esercizio (1) Esercizio (1) Dopo questa operazione, il codice che realizza il sito viene suddiviso in aree di responsabilità: La grafica rimane nei file CSS La struttura e la logica della pagina viene impostata nel codice PHP Il contenuto statico delle varie pagine viene inserito volta per volta nel codice HTML Si può cosı̀ lavorare su uno di questi aspetti in modo modulare senza interferire con gli altri due Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 32 / 55
Il PHP Gestione parametri in ingresso Parametri in GET e POST PHP inserisce il contenuto dei parametri passati alla pagina in GET o POST nei vettori $ GET e $ POST In generale le variabili che iniziano con il carattere di underscore ( ) sono variabili riservate da PHP Nei due vettori troveremo come chiavi i nomi dei parametri passati e come valori i loro contenuti Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 33 / 55
Il PHP Gestione parametri in ingresso Parametri in GET e POST Il seguente codice per esempio stampa sulla pagina le chiavi ed i valori dei parametri in GET: Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 34 / 55
Il PHP Gestione parametri in ingresso Vettore SERVER Un’altra variabile predefinita è l’array $ SERVER Questa contiene numerose informazione a proposito del server sul quale il codice è in esecuzione e sulla richiesta HTTP inviata. Vediamo di seguito alcuni dei suoi campi: ’SERVER ADDR’ e ’SERVER NAME’ contengono l’indirizzo ed il nome del server ’HTTP USER AGENT’, ’HTTP ACCEPT ENCODING’, ’HTTP ACCEPT LANGUAGE’ rappresentano i relativi campi della richiesta HTTP ’REMOTE ADDR’, ’REMOTE HOST’ e ’REMOTE PORT’ contengono indirizzo, nome e porta del client che ha effettuato la richiesta ’PHP SELF’ rappresenta il nome della pagina php richiesta, relativamente al nome dell’host Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 35 / 55
Il PHP Gestire header HTTP La funzione header La funzione header permette di impostare i parametri della risposta HTTP Visto che l’intestazione HTTP deve precedere il contenuto della pagina, la funzione dovrà essere richiamata prima dell’invio di qualsiasi output HTML La sintassi della funzione è la seguente: void header ( string $string [, bool $replace [, int $http response code ]]) Il primo parametro rapresenta il valore da impostare nella risposta HTTP nella forma parametro:valore Es. header(’Content-language: it’); Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 36 / 55
Il PHP Gestire header HTTP La funzione header Esistono due possibili tipi di valori speciali per il parametro di header Se il parametro inizia con ’http:/’, allora verrà impostato il codice di risposta della pagina Es. header("HTTP/1.0 403 Forbidden"); Se il parametro è nella forma "Location:URL" allora il codice di risposta sarà impostato in modo da richiedere la redirezione all’url indicata Es. header("Location: http://www.sito destinazione.com/"); In questo caso, è utile accertarsi che altro codice della pagina corrente non venga eseguito. Usare per esempio l’istruzione exit che causa la terminazione Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 37 / 55
Il PHP Gestire header HTTP La funzione header Il secondo parametro di header() è un boolean che indica cosa fare nel caso il parametro HTTP specificato abbia già un valore Nel caso sia true, il valore viene sostituito, mentre nel caso sia false il valore viene concatenato a quello già esistente. Questo ha senso in quanto molti parametri HTTP ammettono più valori L’ultimo parametro di header() specifica che il codice di risposta HTTP deve essere l’intero specificato Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 38 / 55
Il PHP Sessioni Necessità delle sessioni Il protocollo HTTP è stateless: chiudendo una connessione dopo l’esecuzione di ogni richiesta non può associare automaticamente due richieste allo stesso client Per poter identificare un utente, viene utilizzato un meccanismo che fa uso di sessioni Una sessione è un’astrazione per cui un’utente viene riconosciuto come se rimanesse sempre connesso rendendo trasparente la sua disconnessione Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 39 / 55
Il PHP Sessioni Realizzazione delle sessioni Una sessione viene realizzata mandando ad un client un codice identificativo quando questo si connette, e richiedendo che questo sia riinviato al server alla successiva connessione In questo modo il server memorizzerà un numero di identificativi di sessione e ad ogni diverso utente potrà associare variabili persistenti tra una connessione e l’altra Per realizzare una sessione e comunicare il codice identificativo si possono usare due strumenti: i parametri per la pagina (GET o POST) oppure i cookie Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 40 / 55
Il PHP Sessioni Realizzazione delle sessioni Un cookie è un piccolo file di testo di cui il server richiede la creazione, specificando un determinato contenuto Quando il client si riconnetterà allo stesso host il browser riinvierà il suo contenuto al server Alternativamente, per gestire le sessioni il server può inviare nella pagina HTML l’identificativo come un parametro GET o POST, in modo che questo venga riinviato al server alla successiva connessione Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 41 / 55
Il PHP Sessioni Realizzazione delle sessioni Se il browser accetta cookie, PHP ne fa utilizzo in modo del tutto trasparente per la gestione della sessione Per inizializzare una sessione, sia per la sua creazione che per il recupero di dati inseriti precedentemente, chiamare la funzione session start() Al primo utilizzo di session start() per un determinato utente, verrà richiesta la creazione di un cookie tramite l’intestazione HTTP E’ necessario richiamare session start() prima di aver inviato qualsiasi contenuto della pagina al client, altrimenti l’intestazione potrebbe essere già stata inviata Dopo l’inizializzazione, si possono salvare e recuperare dati di una sessione tramite l’array $ SESSION Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 42 / 55
Il PHP Sessioni Realizzazione delle sessioni Vediamo per esempio una pagina php che conteggia il numero di visite effettuate da ogni utente, nel file count.php Per continuare, cliccare qui Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 43 / 55
Il PHP Sessioni Realizzazione delle sessioni Nel caso il browser rifiuti il cookie, PHP inizializza in una stringa nella variabile SID una richiesta GET che identifica la sessione Un esempio di SID potrebbe essere PHPSESSID=pc09bg7qssti0i1keslnt8l9s5 dove PHPSESSID è di default il nome della variabile per l’id di sessione. Se il parametro rappresentante l’identificativo di sessione viene correttamente passato tramite GET, PHP riconosce automaticamente la sessione che può venir gestita come al solito tramite session start() e $ SESSION Se il browser ha invece accettato il cookie, il SID risulta essere una stringa vuota Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 44 / 55
Il PHP Sessioni Realizzazione delle sessioni Per esempio, il precedente esempio di conteggio delle visite funziona anche senza cookie sostituendo all’ultima riga il seguente codice: Per continuare, cliccare qui Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 45 / 55
Il PHP Sessioni Realizzazione delle sessioni Vediamo ora altre funzioni a disposizione per la gestione delle sessioni: session name() Ritorna una stringa rappresentante il nome del parametro contenente l’identificativo di sessione (per default PHPSESSID) session id() Restituisce l’identificativo della sessione che deve essere inviato dal client per la sua identificazione. Questo valore viene generato casualmente al momento della creazione di una sessione session destroy() Distrugge la sessione corrente, eliminando tutti i dati in essa contenuti. Da usare per esempio dopo un’operazione di logout Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 46 / 55
Il PHP Upload di file Upload di file In HTML è possibile specificare form per l’upload di file Impostare per quasto caso l’attributo type del tag a file Il browser visualizzerà questo tag come un’area di testo con un pulsante per la scelta del file tramite navigazione del filesystem (opzione ’sfoglia’) Per l’invio di file sarà necessario specificare il valore multipart/form-data per l’attributo enctype di Un esempio di HTML per l’upload: Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 47 / 55
Il PHP Upload di file Upload di file Si può limitare la dimensione del file inviato in due modi: Specificando un parametro da inviare al server di nome MAX FILE SIZE nel form, con la dimensione massima in byte. Essendo questo parametro riinviato dal client, non è da considerarsi del tutto affidabile Specificando una dimensione massima per i file in upload nel file di configurazione di php php.ini Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 48 / 55
Il PHP Upload di file Upload di file Una volta che viene eseguito con successo un upload, il server avrà una copia del file caricato in una cartella temporanea Le informazioni riguardanti il file si trovano nella variabile globale $ FILES Nel campo $ FILES[nomefile] si trova un vettore contenete nelle seguenti chiavi informazioni sul file caricato: ’name’ Il nome del file sul client ’type’ Il tipo di file inviato ’size’ La dimensione del file in byte ’tmp name’ Il nome del file temporaneo corrispondente sul server ’error’ Un codice che descrive un’eventuale errore nel caricamento Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 49 / 55
Il PHP Upload di file Upload di file A questo punto per trasferire il file nella cartella opportuna si può utilizzare la funzione move uploaded file(string $filename, string $destination) Questa funzione restituisce false se l’operazione è fallita o se il file indicato non è un file di upload valido Può essere utile la funzione basename che dato il percorso di un file ne restituisce la parte relativa al nome del file Php mette a disposizione numerose altre funzioni per la manipolazione dei file tra cui copy, delete, readdir e file exists Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 50 / 55
Il PHP Upload di file Upload di file: esempio Vediamo un esempio di gestione dell’upload di un file, chiamato ’myfile’ nel form HTML e da spostare nella cartella uploadedFiles echo "Nome: ".$_FILES[’myfile’][’name’]."\n"; echo "Tipo: ".$_FILES[’myfile’][’type’]."\n"; echo "Dimensione: ".$_FILES[’myfile’][’size’]. " byte\n"; $uploadDest = "./uploadedFiles/". basename($_FILES[’myfile’][’name’]); if (move_uploaded_file($_FILES[’myfile’][’tmp_name’], $uploadDest)) { echo "File caricato correttamente.\n"; } else { echo "Errore: ".$_FILES[’myfile’][’error’]."\n"; } Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 51 / 55
Il PHP Download di file Download di file Per leggere un file da server ed inviare il suo contenuto in output al client si può utilizzare la funzione readfile($filename) E’ cosı̀ possibile inviare ad uno specifico client un file che per gli altri non risulta pubblicato in rete Per indicare al client come trattare il file si può specificare il campo Content-type della risposta http Un esempio: header("Content-Type: application/pdf"); readfile ("../downloads/file.pdf"); exit; Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 52 / 55
Il PHP Download di file Download di file Per imporre che il file specificato venga scaricato e non, per esempio, interpretato dal browser, si può specificare che il campo Content-type abbia valore application/force-download Possibile specificare il nome del file da salvare su disco tramite l’header Content-Disposition: filename= nomefile Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 53 / 55
Il PHP Esercizio (2) Esercizio (2) Realizzare il login sul sito del forum Prima di accedere al sito, un utente dovrà fornire un nome utente ed una password validi Per adesso, specificare i dati validi nel codice PHP. La funzione che ne controlla l’esattezza verrà modificata per eseguire questo controllo via database Se il login viene effettuato correttamente, verrà creata una sessione che permetterà l’accesso al forum Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 54 / 55
Il PHP Esercizio (2) Esercizio (2) All’inizio di ogni pagina quindi una funzione dovrà controllare se l’utente è autorizzato all’accesso, ed in caso contrario non visualizzare la pagina Tramite l’opzione di logout, la sessione corrente deve essere distrutta in modo che un altro login sia necessario per ulteriori accessi Stefano Brocchi Laboratorio di reti II: PHP 2 marzo, 2009 55 / 55
Puoi anche leggere