Laboratorio di reti II: PHP

Pagina creata da Stefania Marino
 
CONTINUA A LEGGERE
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