php - di.uniba.itreti/dispense/php.pdf · 2 Prof. Filippo Lanubile Introduzione zPHP è un...

34
1 Prof. Filippo Lanubile PHP PHP: Hypertext Preprocessor Prof. Filippo Lanubile Indice Introduzione Sintassi Fondamentale Tipi Variabili Costanti Operatori Strutture di controllo Funzioni Form Cookie Sessione File

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