php - di.uniba.itreti/dispense/php.pdf · 2 Prof. Filippo Lanubile Introduzione zPHP è un...
Transcript of php - di.uniba.itreti/dispense/php.pdf · 2 Prof. Filippo Lanubile Introduzione zPHP è un...
1
Prof. Filippo Lanubile
PHP
PHP: Hypertext Preprocessor
Prof. Filippo Lanubile
IndiceIntroduzioneSintassi Fondamentale TipiVariabiliCostanti Operatori Strutture di controllo
Funzioni FormCookieSessioneFile
2
Prof. Filippo Lanubile
IntroduzionePHP è un linguaggio di scripting general-purposeSintassi basata su quella di C, Java e PerlObiettivo principale: permettere agli sviluppatori web di scrivere velocemente pagine web dinamiche
Integrato nell'HTMLSemplice da imparare
E’ Open SourceParte di LAMP: Linux-Apache-MySQL-PHP/Perl/Python
PHP 4 la versione più diffusaPHP 5 disponibile dal 2004 con un nuovo modello a oggetti
Prof. Filippo Lanubile
SintassiUn 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>
3
Prof. Filippo Lanubile
SintassiUn blocco PHP è racchiuso tra <?php e ?> e può essere inserito ovunque nel documento.Ciascuna linea di codice PHP termina con un punto e virgolaLe due istruzioni fondamentali per l’output di testo in PHP sono echo e print.
Prof. Filippo Lanubile
CommentiIn 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 */
?>
4
Prof. Filippo Lanubile
Variabili
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
TipiPHP 4 supporta 8 tipi primitivi + NULL4 tipi scalari:
booleanintegerfloatstring
2 tipi composti: arrayobject
5
Prof. Filippo Lanubile
ConversioneType juggling
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
Scrivete uno script PHP che dichiari variabili di tipo scalareLo script deve generare una pagina HTML a piacere con le informazioni sul nome e valore delle variabiliTestate anche il cast esplicito
6
Prof. Filippo Lanubile
String
Una stringa può essere specificata in 3 diversi modi.
single quotedsi specifica tra apici singolo '...'
double quotedsi specifica tra doppi apici "..."
heredoc syntaxsi 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";
7
Prof. Filippo Lanubile
Esempi<?php$str = <<<EODEsempio di stringache occupa piu’ lineeusando la sintassi heredoc.EOD;?>
Prof. Filippo Lanubile
Concatenazione
Per concatenare due o più variabili, si usa l’operatore punto (.):
<?php
$txt1 = "Hello World";
$txt2 = "1234";
echo $txt1 . " " . $txt2 ;
?>
8
Prof. Filippo Lanubile
ArrayUn array può essere creato dalla funzione array()Sintassi: array( [key =>] value )key è di tipo integer o stringvalue è di qualsiasi tipo
<?php$arr = array("foo" => "bar", 12 => true);
echo $arr["foo"]; // stampa barecho $arr[12]; // stampa 1
?>
Prof. Filippo Lanubile
CostantiÈ 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 nomeLe costanti possono essere definite e utilizzate ovunque senza seguire le regole di visibilità.Una volta impostate, le costanti non posso essere ridefinite, né annullate.
9
Prof. Filippo Lanubile
Costanti
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
Scrivete uno script PHP che generi una pagina HTMLDovete usare i 3 diversi tipi di stringhe nel codiceDovete concatenare tra loro 2 o più stringheUsate gli arrayDefinite e usate 2 o più costanti
10
Prof. Filippo Lanubile
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
Decremento--
Incremento++
Modulo (resto divisione)%
Divisione/
Moltiplicazione*
Sottrazione-
Addizione+
DescrizioneOperator
11
Prof. Filippo Lanubile
Operatori di confronto
Minore o uguale<=Maggiore o uguale>=Minore<Maggiore>Diverso!=Uguale==DescrizioneOperatore
Prof. Filippo Lanubile
Operatori logici
not!
or||
and&&
DescrizioneOperatore
12
Prof. Filippo Lanubile
Condizioni
if-elseif-else
if ($a > $b) {print "a è maggiore di b";
} elseif ($a == $b) {print "a è uguale a b";
} else {print "a è minore di b";
}
Prof. Filippo Lanubile
Condizioni
switch
switch (expr) {case label1:code to execute; // expr == label1break;
case label2:code to execute; // expr == label2break;
default:code to execute; // expr != label1&label2;
}
13
Prof. Filippo Lanubile
Esempio<?phpswitch ($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
Le istruzioni di ciclo in PHP 4: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
14
Prof. Filippo Lanubile
while
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
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);
15
Prof. Filippo Lanubile
for
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
foreachFornisce 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;
16
Prof. Filippo Lanubile
foreach 1)Attraversa l'array dato da array_expression.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)
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 />";
}
17
Prof. Filippo Lanubile
Esercizio 3
Create uno script PHP che usi tutte le istruzioni di controllo e i cicli.
Prof. Filippo Lanubile
Funzioni
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";
}
18
Prof. Filippo Lanubile
Funzioni: passaggio parametriE’ possibile passare una lista degli argomenti (variabili e/o costanti delimitati dalla virgola).
Il passaggio può avvenire per: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 $arrecho "$vett[0] + $vett[1]";
}
19
Prof. Filippo Lanubile
Passaggio per Riferimento
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 Riferimentofunction aggiungi_qualcosa(&$string){
$string .= 'ed altro';}
$str = 'Questa è una stringa';aggiungi_qualcosa($str);
echo $str; // stampa 'Questa è una stringa e altro'
20
Prof. Filippo Lanubile
Valori predefiniti degli argomenti
Una funzione può definire valori predefiniti per argomenti scalariI valori predefiniti DEVONO essere delle costantiI 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
Sono restituiti usando l'istruzione opzionale return. 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;
}
$nuovo_riferimento =& restituisce_riferimento();
21
Prof. Filippo Lanubile
Inclusione di File
E’ possibile includere le funzioni comuni in file esterni (librerie)I file si “caricano” con include() o require()
<?phpinclude("Calculator.inc");require(“lib.php");
?>
Prof. Filippo Lanubile
Esercizio 4
Scrivete alcune funzione in file e richiamatele da uno script esternoAlmeno una funzione deve specificare il valore di default dei parametri e un’altra deve usare il passaggio per riferimento
22
Prof. Filippo Lanubile
Variabili Predefinite
$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
Qualsiasi elemento di un form HTML è automaticamente disponibile per script PHPCi sono più modi di accedere a questa informazioneI due modi più semplici per accedere sono i seguenti
23
Prof. Filippo Lanubile
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>
24
Prof. Filippo Lanubile
Cookie
Sono un meccanismo per memorizzare dati in remotoPossono essere impostati tramite la funzione setcookie()La funzione setcookie() deve apparirePRIMA del tag <html>Sintassi:setcookie(nome, valore, scadenza);
Prof. Filippo Lanubile
Cookie<?php
// setta cookie valido per 1 orasetcookie("uname", “Ciccio", time() + 3600);
?><html><body><p>
Cookie settato sul server.<br />Clicca <a href="esercizio7.php">qui</a>
</p></body></html>
25
Prof. Filippo Lanubile
Cookie<html><body><p><?phpif (isset($_COOKIE["uname"]))
echo “Benvenuto " . $_COOKIE["uname"] . "!<br />";else
echo “Sconosciuto!<br />";?></p></body></html>
Prof. Filippo Lanubile
Cookie
Nota: per rimuovere un Cookie, è sufficiente usare setcookie() specificando come scadenza una data già scaduta
Es: setcookie("uname", "Ciccio", time() - 3600);
26
Prof. Filippo Lanubile
Esercizio 5
Esercizio con form HTML che chiama uno script PHP passandogli delle variabili.Salvate almeno una di queste variabili in un cookieChiamate un terzo script che cancella il suddetto cookie
Prof. Filippo Lanubile
Sessione
HTTP è un protocollo senza statoPer mantenere la sessione è possibile usare le funzioni di mantenimento della Sessione di PHPLa sessione permette di mantenere il valore delle variabili anche quando i Cookie sono disabilitati.
27
Prof. Filippo Lanubile
SessioneQuando si inizia una sessione all’utente è assegnato un ID di sessione univoco.
Se il client utente accetta i cookie, l’ID di sessione è salvato in un cookie, il cui nome è prestabilitoAltrimenti, l’ID di sessione è propagato tra gli script attraverso la query string o input form.
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
Prof. Filippo Lanubile
Sessione// script 1: avvia sessione...<?phpsession_start(); // start session$_SESSION['nome'] = 'Jesper';
?>...
28
Prof. Filippo Lanubile
Sessione// script 2: continua sessione...<?phpsession_start(); // <--echo 'Hello '.$_SESSION['nome'];
?>...
Prof. Filippo Lanubile
Sessione// script 3: distrugge sessione...<?phpsession_start(); // <--unset($_SESSION['nome']);// oppure session_unset();session_destroy();
?>...
29
Prof. Filippo Lanubile
SessioneRicordate
Le variabili di sessione non sono cookieLa 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 associateDovete 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
Create degli script che simulino il logon e logoff in un’applicazione web mediante creazione e cancellazione di una sessione.
30
Prof. Filippo Lanubile
Filefopen – apre / crea nuovo filefread – legge da un filefwrite – scrive in un filefclose – chiude l’accesso a un filefile – 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()Sintassi:int fopen(“path/file", "w");
Restituisce un puntatore al file, come in C
Modo:'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.
31
Prof. Filippo Lanubile
fread()
Sintassi:string fread(int fp, int lung)
Restituisce stringa letta dal file, di lunghezza specificata
Prof. Filippo Lanubile
fwrite()
Sintassi:int fwrite(int puntatore, string testo)
Restituisce il numero di caratteri scritti
32
Prof. Filippo Lanubile
fclose()
Sintassi:bool fclose(int fp)
Restituisce TRUE in caso di successo, FALSE in caso di fallimento
Prof. Filippo Lanubile
file()
Sintassi:array file (string filename)
Restituisce le linee del file in un array
33
Prof. Filippo Lanubile
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;
34
Prof. Filippo Lanubile
Esercizio 7
Realizzate uno script PHP che:crea e scrive in un fileriapre e appende testo al file suddettolegge 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
http://www.w3schools.comhttp://www.php.net/
http://www.php.net/docs.phphttp://it2.php.net/manual/it/index.php