dispense
Transcript
dispense
PHP PHP: Hypertext Preprocessor Prof. Filippo Lanubile Indice z z z z z z z Introduzione Sintassi Fondamentale Tipi Variabili Costanti Operatori Strutture di controllo z z z z z Funzioni Form Cookie Sessione File Prof. Filippo Lanubile 1 Introduzione z z z PHP è un linguaggio di scripting general-purpose Sintassi basata su quella di C, Java e Perl Obiettivo principale: permettere agli sviluppatori web di scrivere velocemente pagine web dinamiche z z z E’ Open Source z z Integrato nell'HTML Semplice da imparare Parte di LAMP: Linux-Apache-MySQL-PHP/Perl/Python PHP 4 la versione più diffusa z PHP 5 disponibile dal 2004 con un nuovo modello a oggetti Prof. Filippo Lanubile Sintassi z z Un file PHP contiene tag HTML e del codice PHP di scripting. Esempio di un semplice script PHP che invia il testo "Hello World" al browser: <html> <body> <?php echo "Hello World"; ?> </body> </html> Prof. Filippo Lanubile 2 Sintassi z z z Un blocco PHP è racchiuso tra <?php e ?> e può essere inserito ovunque nel documento. Ciascuna linea di codice PHP termina con un punto e virgola Le due istruzioni fondamentali per l’output di testo in PHP sono echo e print. Prof. Filippo Lanubile Commenti z z In PHP, si usa // per fare un commento su singola linea /* e */ per commentare un blocco di linee. <?php // Questo e’ una linea di commento /* Questo e’ un blocco di commento */ ?> Prof. Filippo Lanubile 3 Variabili z z Tutte le variabili in PHP iniziano con un simbolo di dollaro ($). Possono contenere stringhe, numeri o array. <?php $txt = "Hello World"; echo $txt; unset($txt); // dealloca // distrugge più di una variabile unset($foo1, $foo2, $foo3); ?> Prof. Filippo Lanubile Tipi z z PHP 4 supporta 8 tipi primitivi + NULL 4 tipi scalari: z z z z z boolean integer float string 2 tipi composti: z z array object Prof. Filippo Lanubile 4 Conversione z Type juggling z z PHP non richiede la definizione esplicita del tipo in una dichiarazione di variabile, il cui tipo è determinato dal contesto Conversione esplicita tramite cast <?php $foo = TRUE; // $foo è boolean $foo = "0"; // $foo è string $foo += 2; // $foo è integer (2) $foo = $foo + 1.3; // $foo è float (3.3) $bar = (integer) $foo; // $bar è integer (3) Prof. Filippo Lanubile ?> Esercizio 1 z z z Scrivete uno script PHP che dichiari variabili di tipo scalare Lo script deve generare una pagina HTML a piacere con le informazioni sul nome e valore delle variabili Testate anche il cast esplicito Prof. Filippo Lanubile 5 String z Una stringa può essere specificata in 3 diversi modi. z single quoted z z double quoted z z si specifica tra apici singolo '...' si specifica tra doppi apici "..." heredoc syntax z si specifica tra un identificatore da definire Prof. Filippo Lanubile Esempi // stampa: Ciccio dice: "I'll be back" echo 'Ciccio dice: "I\'ll be back"'; // stampa: Le variabili si espandono $var = "espandono"; echo "Le variabili si $var"; Prof. Filippo Lanubile 6 Esempi <?php $str = <<<EOD Esempio di stringa che occupa piu’ linee usando la sintassi heredoc. EOD; ?> Prof. Filippo Lanubile Concatenazione z Per concatenare due o più variabili, si usa l’operatore punto (.): <?php $txt1 = "Hello World"; $txt2 = "1234"; echo $txt1 . " " . $txt2 ; ?> Prof. Filippo Lanubile 7 Array z z Un array può essere creato dalla funzione array() Sintassi: array( [key =>] value ) key è di tipo integer o string value è di qualsiasi tipo <?php $arr = array("foo" => "bar", 12 => true); echo $arr["foo"]; // stampa bar echo $arr[12]; // stampa 1 ?> Prof. Filippo Lanubile Costanti z z z z z È convenzione comune che i nomi di costante siano sempre maiuscoli. Le costanti possono contenere solo dati di tipo boolean, integer, float e string. Non è necessario anteporre il simbolo $ al nome Le costanti possono essere definite e utilizzate ovunque senza seguire le regole di visibilità. Una volta impostate, le costanti non posso essere ridefinite, né annullate. Prof. Filippo Lanubile 8 Costanti z Le costanti possono essere definite solo con la funzione define() e non tramite assegnazione <?php define("COSTANTE", "Ciao mondo."); echo COSTANTE; // stampa "Ciao mondo." echo Costante; // stampa "Costante“ ?> Prof. Filippo Lanubile Esercizio 2 z z z z z Scrivete uno script PHP che generi una pagina HTML Dovete usare i 3 diversi tipi di stringhe nel codice Dovete concatenare tra loro 2 o più stringhe Usate gli array Definite e usate 2 o più costanti Prof. Filippo Lanubile 9 Visibilità <?php $a = 1; /* global scope */ $b = 2; function pippo() { global $a; // accede ad a globale $c = 3 + $a; /* local scope */ $c += $GLOBALS["b"]; // accede ad b } ?> Prof. Filippo Lanubile Operatori Aritmetici Operator Descrizione + Addizione - Sottrazione * Moltiplicazione / Divisione % Modulo (resto divisione) ++ Incremento -- Decremento Prof. Filippo Lanubile 10 Operatori di confronto Operatore == != > < >= <= Descrizione Uguale Diverso Maggiore Minore Maggiore o uguale Minore o uguale Prof. Filippo Lanubile Operatori logici Operatore Descrizione && and || or ! not Prof. Filippo Lanubile 11 Condizioni z if-elseif-else if ($a > print } elseif print } else { print } $b) { "a è maggiore di b"; ($a == $b) { "a è uguale a b"; "a è minore di b"; Prof. Filippo Lanubile Condizioni z switch switch (expr) { case label1: code to execute; // expr == label1 break; case label2: code to execute; // expr == label2 break; default: code to execute; // expr != label1&label2; } Prof. Filippo Lanubile 12 Esempio <?php switch ($x) { case 1: echo "Number 1"; break; case 2: echo "Number 2"; break; default: echo "No number between 1 and 2"; } ?> Prof. Filippo Lanubile Cicli z Le istruzioni di ciclo in PHP 4: z z z z while – cicla attraverso un blocco di codice finché la condizione specificata è vera do...while – cicla attraverso un blocco di codice almeno una volta e continua finché la condizione specificata è vera for – cicla attraverso un blocco di codice per uno specificato numero di volte foreach – cicla attraverso un array Prof. Filippo Lanubile 13 while z Si comporta come la sua controparte nel linguaggio C. $i = 1; while ($i <= 10) { print $i++; /* Il valore visualizzato è il valore della variabile $i prima del post-incremento */ } Prof. Filippo Lanubile do…while z Il ciclo do…while è simile al ciclo while, con l'unica differenza che il blocco di istruzioni è eseguito almeno una volta. $i = 0; do { print $i; } while ($i>0); Prof. Filippo Lanubile 14 for z Si comporta come la sua controparte nel linguaggio C. /* esempio 1 */ for ($i = 1; $i <= 10; $i++) { print $i; } /* esempio 2 */ for ($i = 1;;$i++) { if ($i > 10) { break; } print $i; } Prof. Filippo Lanubile foreach z z Fornisce una facile metodo per attraversare un array. Esistono due possibili notazioni sintattiche; la seconda è un'utile estensione della prima: 1) foreach(array_expression as $value) istruzione; 2) foreach(array_expression as $key => $val) istruzione; Prof. Filippo Lanubile 15 foreach 1) z Attraversa l'array dato da array_expression. z Ad ogni ciclo, si assegna il valore dell'elemento corrente a $value e il puntatore interno avanza di una posizione foreach ($arr as $value) { echo "Valore: $value<br />"; } Prof. Filippo Lanubile foreach 2) z z Esegue lo stesso ciclo con la differenza che il valore dell'indice corrente viene assegnato ad ogni ciclo, alla variabile $key. Nota: $arr[$key] == $value foreach ($arr as $key => $value) { echo "Chiave:$key; Valore:$value<br />"; } Prof. Filippo Lanubile 16 Esercizio 3 z Create uno script PHP che usi tutte le istruzioni di controllo e i cicli. Prof. Filippo Lanubile Funzioni z z PHP non supporta l'overloading di funzioni, non è possibile ridefinire funzioni precedentemente dichiarate. Una funzione può essere definita usando la seguente sintassi: function foo (param1, param2,… , paramN) { echo "Funzione di esempio.\n"; } Prof. Filippo Lanubile 17 Funzioni: passaggio parametri z E’ possibile passare una lista degli argomenti (variabili e/o costanti delimitati dalla virgola). z Il passaggio può avvenire per: z z z Valore (default) Riferimento Si possono specificare i valori di default degli argomenti Prof. Filippo Lanubile Passaggio per Valore $arr = array(45, 79); … stampa_array($arr); … function stampa_array($vett){ // $vett è una copia di $arr echo "$vett[0] + $vett[1]"; } Prof. Filippo Lanubile 18 Passaggio per Riferimento z z z Il passaggio per riferimento consente a una funzione di modificare i valori dei parametri. Il parametro passato per riferimento non è più una copia dell’originale (come nel passaggio per valore). Perché un argomento sia passato sempre per riferimento a una funzione, occorre anteporre & al nome dell'argomento nella definizione della funzione. Prof. Filippo Lanubile Passaggio per Riferimento function aggiungi_qualcosa(&$string) { $string .= 'ed altro'; } $str = 'Questa è una stringa'; aggiungi_qualcosa($str); echo $str; // stampa 'Questa è una stringa e altro' Prof. Filippo Lanubile 19 Valori predefiniti degli argomenti z z z Una funzione può definire valori predefiniti per argomenti scalari I valori predefiniti DEVONO essere delle costanti I valori predefiniti DEVONO essere dichiarati dopo tutti i (a destra dei) parametri senza valori predefiniti function fare_il_caffe ($tipo = "cappuccino") { return "Sto facendo una tazza di $tipo.\n"; } echo fare_il_caffe (); // stampa " cappuccino" echo fare_il_caffe ("espresso"); Prof. Filippo Lanubile Valori restituiti z Sono restituiti usando l'istruzione opzionale return. z Può essere restituito qualsiasi tipo function numeri_piccoli() { return array (0, 1, 2); } list ($zero, $uno, $due) = numeri_piccoli(); function &restituisce_riferimento(){ return $un_riferimento; } Prof. Filippo Lanubile $nuovo_riferimento =& restituisce_riferimento(); 20 Inclusione di File z z E’ possibile includere le funzioni comuni in file esterni (librerie) I file si “caricano” con include() o require() <?php include("Calculator.inc"); require(“lib.php"); ?> Prof. Filippo Lanubile Esercizio 4 z z Scrivete alcune funzione in file e richiamatele da uno script esterno Almeno una funzione deve specificare il valore di default dei parametri e un’altra deve usare il passaggio per riferimento Prof. Filippo Lanubile 21 Variabili Predefinite z z z z z $GLOBALS: array variabili globali $_COOKIE: array di var caricate con Cookie $_GET: “ “ “ con HTTP GET $_POST: “ “ “ con HTTP POST $_REQUEST: “ “ “ con GET e POST Prof. Filippo Lanubile Form z z z Qualsiasi elemento di un form HTML è automaticamente disponibile per script PHP Ci sono più modi di accedere a questa informazione I due modi più semplici per accedere sono i seguenti Prof. Filippo Lanubile 22 Form <body> <form method="POST" action="esercizio8.php"> User ID: <input type="text" name="uid" /> <br /> Password: <input type="password" name="passwd" /> <br /> <input type="submit" value="Logon" /> </form> </body> Prof. Filippo Lanubile Form <body> <p> Ciao <?php echo $_POST["uid"]; ?> La tua password è: <?php echo $_REQUEST["passwd"]; ?> </p> </body> Prof. Filippo Lanubile 23 Cookie z z z z Sono un meccanismo per memorizzare dati in remoto Possono essere impostati tramite la funzione setcookie() La funzione setcookie() deve apparire PRIMA del tag <html> Sintassi: setcookie(nome, valore, scadenza); Prof. Filippo Lanubile Cookie <?php // setta cookie valido per 1 ora setcookie("uname", “Ciccio", time() + 3600); ?> <html> <body> <p> Cookie settato sul server.<br /> Clicca <a href="esercizio7.php">qui</a> </p> </body> </html> Prof. Filippo Lanubile 24 Cookie <html> <body> <p> <?php if (isset($_COOKIE["uname"])) echo “Benvenuto " . $_COOKIE["uname"] . "!<br />"; else echo “Sconosciuto!<br />"; ?> </p> </body> </html> Prof. Filippo Lanubile Cookie z Nota: per rimuovere un Cookie, è sufficiente usare setcookie() specificando come scadenza una data già scaduta z Es: setcookie("uname", "Ciccio", time() - 3600); Prof. Filippo Lanubile 25 Esercizio 5 z z z Esercizio con form HTML che chiama uno script PHP passandogli delle variabili. Salvate almeno una di queste variabili in un cookie Chiamate un terzo script che cancella il suddetto cookie Prof. Filippo Lanubile Sessione z z z HTTP è un protocollo senza stato Per mantenere la sessione è possibile usare le funzioni di mantenimento della Sessione di PHP La sessione permette di mantenere il valore delle variabili anche quando i Cookie sono disabilitati. Prof. Filippo Lanubile 26 Sessione z Quando si inizia una sessione all’utente è assegnato un ID di sessione univoco. z Se il client utente accetta i cookie, l’ID di sessione è salvato in un cookie, il cui nome è prestabilito z Altrimenti, l’ID di sessione è propagato tra gli script attraverso la query string o input form. z Note: In una sessione, tutte le variabili di sessione di un utente sono salvate in un file server side, Questo file è associato all’utente mediante l’ID di sessione Le variabili di sessione non sono salvate in cookie, né sono propagate attraverso la query string o input form z z z Prof. Filippo Lanubile Sessione // script 1: avvia sessione ... <?php session_start(); // start session $_SESSION['nome'] = 'Jesper'; ?> ... Prof. Filippo Lanubile 27 Sessione // script 2: continua sessione ... <?php session_start(); // <-echo 'Hello '.$_SESSION['nome']; ?> ... Prof. Filippo Lanubile Sessione // script 3: distrugge sessione ... <?php session_start(); // <-unset($_SESSION['nome']); // oppure session_unset(); session_destroy(); ?> ... Prof. Filippo Lanubile 28 Sessione z Ricordate z z z z Le variabili di sessione non sono cookie La sessione consente di associare a un utente un file sul server side che contenga le sue variabili persistenti. E’ possibile distruggere le sessioni utente e tutte le variabili associate Dovete sempre usare session_start() negli script per abilitare l’array $_SESSION. Essa non solo avvia, ma continua la sessione corrente. Prof. Filippo Lanubile Esercizio 6 z Create degli script che simulino il logon e logoff in un’applicazione web mediante creazione e cancellazione di una sessione. Prof. Filippo Lanubile 29 File z z z z z z fopen – apre / crea nuovo file fread – legge da un file fwrite – scrive in un file fclose – chiude l’accesso a un file file – legge il contenuto di un file in un array Per le altre funzioni di accesso al filesystem, consultare: http://it2.php.net/manual/it/ref.filesystem.php Prof. Filippo Lanubile fopen() z Sintassi: int fopen(“path/file", "w"); Restituisce un puntatore al file, come in C z Modo: z z z z z z 'r' - Apre in sola lettura; posiziona il puntatore all'inizio del file. 'r+' - Apre in lettura e scrittura; posiziona il puntatore all'inizio del file. 'w' - Apre il file in sola scrittura; posiziona il puntatore all'inizio del file e tronca il file alla lunghezza zero. Se il file non esiste, tenta di crearlo. 'w+' - Apre in lettura e scrittura; posiziona il puntatore all'inizio del file e tronca il file alla lunghezza zero. Se il file non esiste, tenta di crearlo. 'a' - Apre in sola scrittura; posiziona il puntatore alla fine del file. Se il file non esiste, tenta di crearlo. 'a+' - Apre in lettura e scrittura; posiziona il puntatore alla fine del file. Se il file non esiste, tenta di crearlo. Prof. Filippo Lanubile 30 fread() z Sintassi: string fread(int fp, int lung) Restituisce stringa letta dal file, di lunghezza specificata Prof. Filippo Lanubile fwrite() z Sintassi: int fwrite(int puntatore, string testo) Restituisce il numero di caratteri scritti Prof. Filippo Lanubile 31 fclose() z Sintassi: bool fclose(int fp) Restituisce TRUE in caso di successo, FALSE in caso di fallimento Prof. Filippo Lanubile file() z Sintassi: array file (string filename) Restituisce le linee del file in un array Prof. Filippo Lanubile 32 Esempio $fp = fopen("./ciccio.txt", "w"); if(!$fp) die ("Cannot open the file"); fwrite($fp, 'Hello world!'); fclose($fp); Prof. Filippo Lanubile Esempio $lines = file ("ciccio.txt"); if(!is_array($lines)) die('non è un array'); foreach($lines as $single_line) echo $single_line; Prof. Filippo Lanubile 33 Esercizio 7 z Realizzate uno script PHP che: z z z z crea e scrive in un file riapre e appende testo al file suddetto legge il contenuto di un file e lo mostra nel browser Provate a realizzare uno script che visualizzi nel browser il contenuto (file e sottocartelle) di una directory Prof. Filippo Lanubile Riferimenti z z http://www.w3schools.com http://www.php.net/ z z http://www.php.net/docs.php http://it2.php.net/manual/it/index.php Prof. Filippo Lanubile 34