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 &egrave;:
<?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