programmazione web approfondimenti di php. gestione dello stato
TRANSCRIPT
![Page 1: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/1.jpg)
Programmazione WebApprofondimenti di PHP
![Page 2: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/2.jpg)
Gestione dello stato
![Page 3: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/3.jpg)
3
Cookie
I cookie possono essere utilizzati per memorizzare informazioni sul client su richiesta di uno script (max 4KB)
Una volta creato, il cookie è accessibile solo dal server che lo ha richiesto Possibile configurare il browser per:
• notificare l’utente della ricezione dei cookie• rifiutare la ricezione di cookie
Possibile analizzare/rimuovere i cookie memorizzati dal browser
Programmazione Web - PHP: approfondimenti
![Page 4: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/4.jpg)
4
Struttura di un cookie
Cookie = (Nome, Valore, Scadenza, …)
Nome = identificatore di accesso al dato memorizzato (il solo obbligatorio)
Valore = informazione memorizzata nel cookie (se è null il cookie è
cancellato dal client)
Scadenza = data in cui il cookie viene “dimenticato” (rimosso) dal browser
secondo il formato timestamp Unix (ottenuto tramite la
funzione time())
Cookie variabile persistente (tra diverse sessioni) con scadenza stabilita
Programmazione Web - PHP: approfondimenti
![Page 5: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/5.jpg)
5
Uso di un cookie
• Uso della funzione PHP setcookie() chiamata prima di qualsiasi altra istruzione
• Negli script si accede ai cookie mediante l’array superglobale $_COOKIE, dove sono
registrati solo i cookie già ricevuti dal client
Programmazione Web - PHP: approfondimenti
![Page 6: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/6.jpg)
6
Sessioni
I cookie presentano problemi evidenti• di sicurezza (sono memorizzati sul client)• hanno una dimensione limitata (max 4KB)• possono essere cancellati o disabilitati sul client
Le sessioni permettono la memorizzazione di variabili “persistenti” sul server in un file di testo
Programmazione Web - PHP: approfondimenti
![Page 7: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/7.jpg)
7
Creazione di una sessione
Una sessione viene invocata tramite la funzione session_start()
Dopo che è stata invocata la funzione session_start(), l'interprete PHP crea un nuovo file di testo sul server contenente i dati della sessione
• associa alla sessione un identificatore univoco, accessibile tramite la funzione session_id()
• costruisce un array associativo superglobale $_SESSION dove le informazioni sono caricate e accessibili direttamente
Nell’array associativo è possibile salvare tutte le informazioni desiderate come coppie <chiave, valore>
Programmazione Web - PHP: approfondimenti
![Page 8: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/8.jpg)
8
Memorizzazione di session_idQualora i cookie siano abilitati sul browser, l’identificatore della sessione viene passato al client attraverso un cookie
In caso contrario, è comunque possibile utilizzare le sessioni utilizzando il meccanismo dell’url rewriting, cioè affiancando una variabile agli URL che compaiono nella pagina restituita all’utente
Il nome del cookie e della variabile passata via URL viene di default impostato a PHPSESSID all’interno del file php.ini e si può gestire sia agendo direttamente sul file oppure utilizzando la funzione session_name()
Programmazione Web - PHP: approfondimenti
![Page 9: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/9.jpg)
9
Caricamento della sessionePer riesumare una sessione, si usa sempre la funzione session_start()
Dopo che è stata invocata la funzione session_start(), l'interprete PHP riconosce l’utente dall’ID della sessione, recuperandolo dal cookie o dall’URL
L'interprete PHP carica quindi i dati dal file di testo presente sul server, associato all’ID della sessione, e li mappa nell’array associativo $_SESSION
Tutte le modifiche apportate a $_SESSION vengono poi riportate nel file di testo al termine dell’esecuzione dello script
Programmazione Web - PHP: approfondimenti
![Page 10: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/10.jpg)
10
Esempio
Programmazione Web - PHP: approfondimenti
![Page 11: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/11.jpg)
11
…e le successive!
Programmazione Web - PHP: approfondimenti
![Page 12: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/12.jpg)
12
Distruzione di una sessione (I)Di norma, una sessione ha validità finché il browser è attivo. Per distruggere esplicitamente la sessione si usa la funzione session_destroy()
Le variabili di sessione sono tuttavia ancora accessibili nello script che ha distrutto la sessione
Per rimuovere tutte le variabili di sessione si usa la funzione unset
<?php
session_start(); $_SESSION['nome'] = ‘Devis'; session_destroy(); echo $_SESSION['nome']; ?>
<?php
session_start(); $_SESSION['nome'] = ‘Devis'; session_destroy(); unset($_SESSION['nome']); echo $_SESSION['nome']; ?>
Devis
Programmazione Web - PHP: approfondimenti
![Page 13: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/13.jpg)
13
Distruzione di una sessione (II)La distruzione di una sessione supportata da cookie implica la rimozione (anche) del cookie
• nome del cookie relativo all’identificatore della sessione: session_name()
Procedura (completa) di distruzione della sessione: • rimozione di tutte le variabili di sessione• se esiste un cookie di sessione, viene rimosso• distruzione della sessione
Programmazione Web - PHP: approfondimenti
![Page 14: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/14.jpg)
14
Esempio: gestione del login utentelogin.php
Programmazione Web - PHP: approfondimenti
![Page 15: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/15.jpg)
15
Esempio: gestione del login utentelogin.php
Programmazione Web - PHP: approfondimenti
![Page 16: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/16.jpg)
16
Esempio: gestione del login utentehomePage.php
Programmazione Web - PHP: approfondimenti
![Page 17: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/17.jpg)
17
homePage.php
Programmazione Web - PHP: approfondimenti
![Page 18: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/18.jpg)
18
Esempio: gestione del login utenteofferte.php
Programmazione Web - PHP: approfondimenti
![Page 19: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/19.jpg)
19
Esempio: gestione del login utenteofferte.php
Programmazione Web - PHP: approfondimenti
![Page 20: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/20.jpg)
20
Esempio: gestione del login utentelogout.php
Programmazione Web - PHP: approfondimenti
![Page 21: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/21.jpg)
21
logout.php
Programmazione Web - PHP: approfondimenti
![Page 22: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/22.jpg)
22
Gestione della scadenza delle sessioniDue gli elementi che tengono in vita una sessione
• l’id della sessione fornito dal client (per esempio tramite i cookie)• il file con i dati della sessione sul server
Il client smette di trasmettere l’id quando scade il cookie di sessione• la scadenza è regolata dalla funzione session_set_cookie_param() e
dalla direttiva session.cookie_lifetime del file php.ini• di default è impostata a 0, vale a dire i cookie scadono alla chiusura del
browser
Il file dei dati di sessione scade dopo un numero di secondi impostato nella direttiva session.gc_maxlifetime nel file php.ini (default 24 minuti)
• dopo tale scadenza, il file verrà eliminato con una probabilità impostata dalle direttive session.gc_probability e session.gc_divisor (default 1%)
Programmazione Web - PHP: approfondimenti
![Page 23: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/23.jpg)
23
Uso dell'URL rewriting
Le informazioni sulle sessioni sono salvate direttamente nei link presenti nella pagina restituita all’utente:
• Esplicitamente• Ogni URL nella pagina restituita all’utente sarà impostato come
• Automaticamente (previsto da PHP4 in poi)• Va riconfigurato php.ini
• L'URL rewriting (automatico o esplicito) è sconsigliato per motivi di sicurezza (l’id della sessione appare in chiaro negli URL della pagina)
script.php?<session-name>=<session-id>
ini_set('session.use_trans_sid', false);
Programmazione Web - PHP: approfondimenti
![Page 24: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/24.jpg)
Upload di file
![Page 25: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/25.jpg)
25
Gestione dell’upload di file Input di file mediante: <input type="file" name="fileupload"/> Attributo enctype nel form: enctype="multipart/form-data" Informazioni relative al file caricato disponibili nell’array associativo $_FILES, indicizzato dal valore dell’attributo name specificato nel form di upload Ogni elemento di $_FILES è un array associativo di 4 elementi:
Programmazione Web - PHP: approfondimenti
![Page 26: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/26.jpg)
26
Form di upload del file (I)
Programmazione Web - PHP: approfondimenti
![Page 27: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/27.jpg)
27
Form di upload del file (II)
Programmazione Web - PHP: approfondimenti
![Page 28: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/28.jpg)
28
Gestione del form di upload del file
Programmazione Web - PHP: approfondimenti
![Page 29: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/29.jpg)
29
Gestione del form di upload del file
Programmazione Web - PHP: approfondimenti
![Page 30: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/30.jpg)
30
Funzioni di manipolazione dei file (I)
Test di esistenza di un file: file_exists() Test della natura di un file: is_file(), is_dir()
if(file_exists("grano.jpg")) echo "Il file esiste!"else echo "Il file non esiste!"
if(is_file($nome)) echo "$nome è un file!";else if(is_dir($nome)) echo "$nome è una directory!";else echo "$nome non è un file/directory!";
Programmazione Web - PHP: approfondimenti
![Page 31: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/31.jpg)
31
Funzioni di manipolazione dei file (II)Test di manipolabilità: is_readable(), is_writable(), is_executable()
Dimensione di un file: filesize() (restituisce false se ci sono problemi) Cancellazione di un file: unlink()
if(is_readable($nome)) echo "Il file $nome è leggibile!";if(is_writable($nome)) echo "Il file $nome è scrivibile!";if(is_executable($nome)) echo "Il file $nome è eseguibile!";
echo "La dimensione del file $nome è di " . filesize($nome) . " byte";
unlink($nome);echo "Il file $nome è stato rimosso";
Programmazione Web - PHP: approfondimenti
![Page 32: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/32.jpg)
32
Funzioni di manipolazione delle directoryCreazione di una directory: mkdir()
Rimozione di una directory: rmdir()
mkdir("upload", 0755);
rmdir("upload");
Programmazione Web - PHP: approfondimenti
![Page 33: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/33.jpg)
33
Funzioni di manipolazione delle directory
Apertura di una directory (per poter leggerla): opendir()
Lettura di una directory: readdir()
$dir = opendir("upload");
<?php
$dir = opendir($nomedir); if($dir == false) echo "Errore: impossibile aprire la directory $nomedir"; else { while(!(($file = readdir($dir)) === false)) { if(is_dir("$nomedir/$file")) echo "(D)"; echo $file . br(); } closedir($dir); }?>
Programmazione Web - PHP: approfondimenti
![Page 34: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/34.jpg)
Intestazione HTTP
![Page 35: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/35.jpg)
35
Gli header HTTP
• Normalmente, PHP è usato per costruire il corpo della risposta HTTP del server, che per default presenta un’intestazione HTTP standard contenente, tra gli altri, il tipo MIME del file HTML (text/html)
• Talvolta è necessario gestire le intestazioni del protocollo HTTP (headers) •Due tipologie di headers
• request headers: inviati dal browser verso il server quando viene generata una richiesta HTTP (per esempio, tramite il click su un link)
• response headers: inviati dal server al browser in risposta ad una determinata richiesta (per esempio, sotto forma di comune pagina HTML)
Programmazione Web - PHP: approfondimenti
![Page 36: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/36.jpg)
36
Headers inviati nella richiesta
• Per visualizzare gli headers inviati nella richiesta si può usare la funzione getallheaders() che produce un array contenente tutte le informazioni relative agli headers inviati in input (alias di apache_request_headers())
Programmazione Web - PHP: approfondimenti
![Page 37: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/37.jpg)
37
Headers inviati nella risposta
• Esiste un’analoga funzione apache_response_headers() per visualizzare gli headers nella risposta HTTP
• Talvolta è necessario modificare/aggiungere altre intestazioni• per re-dirigere il browser su un’altra pagina (eventualmente dopo un
certo tempo)• per evitare il caching della pagina• per modificare il content type della pagina• ...
• A tale scopo esiste la funzione header()• La funzione header()deve essere invocata prima di qualsiasi altro output, di qualunque elemento HTML o di qualunque spazio
Programmazione Web - PHP: approfondimenti
![Page 38: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/38.jpg)
38
![Page 39: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/39.jpg)
39
![Page 40: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/40.jpg)
40
Buffering
• Le intestazioni devono precedere qualunque contenuto, perché una volta che la pagina inizia ad essere inviata non è più possibile modificare l’intestazione della risposta HTTP
• Questo vincolo può essere aggirato con il meccanismo del buffering• la funzione ob_start() viene posta immediatamente prima del
contenuto della pagina, compresi eventuali spazi bianchi• in tal modo, lo script non inizia ad inviare la pagina fino a quando
non ha terminato la sua esecuzione• si può ripristinare il consueto meccanismo di emissione immediata
dell’output invocando la funzione ob_end_flush()
Programmazione Web - PHP: approfondimenti
![Page 41: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/41.jpg)
Approfodimento sull'uso di array e stringhe
![Page 42: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/42.jpg)
42
Array
Array = variabile che contiene un insieme (indicizzato) di elementi
• Elemento: scalare (semplice) o un altro array• Individuazione degli elementi mediante indicizzazione
associativa
numerica
Programmazione Web - PHP: approfondimenti
![Page 43: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/43.jpg)
43
Array indicizzati numericamente
Creazione di array mediante enumerazione dei suoi elementi:
Creazione di array mediante assegnamento con un altro array:
Creazione di array mediante caricamento da database
$strumenti = array('flauto', 'violino', 'oboe', 'liuto');
$a = $strumenti;
$numeri = range(1, 10); $numeri = array(1,2,3,4,5,6,7,8,9,10);
$lettere = range('a', 'z'); $lettere = array('a','b', ..., 'z');
Programmazione Web - PHP: approfondimenti
![Page 44: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/44.jpg)
44
Array indicizzati associativamente
Indice rappresentato da un nome (chiave):
$prezzi = array('flauto'=>2500, 'violino'=>8000, 'oboe'=>5400, 'liuto'=>11000);
Programmazione Web - PHP: approfondimenti
![Page 45: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/45.jpg)
45
Operatori per array
$a = array(1,2,3);$b = array(4,5,6,7,8);$c = array('1','2','3');
$a + $b: (1,2,3,7,8)$a == $b: false$a == $c: true$a === $c: false
Programmazione Web - PHP: approfondimenti
![Page 46: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/46.jpg)
46
Array multidimensionali (I)
Indicizzazione numerica:
$articoli = array(array('FLT','flauto', 2500), array('VLN', 'violino', 8000), array('OBO', 'oboe', 5400), array('LUT', 'liuto',11000));
Programmazione Web - PHP: approfondimenti
![Page 47: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/47.jpg)
47
Array multidimensionali (II)
Accesso mediante ciclo for:
for($riga=0; $riga<4; $riga++){ for($colonna=0; $colonna<3; $colonna++) echo $articoli[$riga][$colonna] . ' '; echo '<br/>';}
FLT flauto 2500 VLN violino 8000 OBO oboe 5400 LUT liuto 11000
Programmazione Web - PHP: approfondimenti
![Page 48: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/48.jpg)
48
Array multidimensionali (III)
Indicizzazione mista:
$articoli = array(array('codice'=>'FLT', 'strumento'=>'flauto', 'prezzo'=>2500), array('codice'=>'VLN', 'strumento'=> 'violino', 'prezzo'=>8000), array('codice'=>'OBO', 'strumento'=>'oboe', 'prezzo'=>5400), array('codice'=>'LUT', 'strumento'=>'liuto', 'prezzo'=> 11000));
Programmazione Web - PHP: approfondimenti
![Page 49: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/49.jpg)
49
Array multidimensionali (IV)
Accesso mediante ciclo foreach:
foreach($articoli as $articolo){ foreach($articolo as $indice => $contenuto) echo "$indice: $contenuto "; echo '<br/>';}
codice: FLT strumento: flauto prezzo: 2500 codice: VLN strumento: violino prezzo: 8000 codice: OBO strumento: oboe prezzo: 5400 codice: LUT strumento: liuto prezzo: 11000
$articoli
Programmazione Web - PHP: approfondimenti
![Page 50: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/50.jpg)
50
Ordinamento di array (I)
Ordinamento di array indicizzati numericamente: sort() $strumenti = array('flauto', 'violino', 'oboe', 'liuto');sort($strumenti);
Programmazione Web - PHP: approfondimenti
![Page 51: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/51.jpg)
51
Ordinamento di array (II)
Ordinamento di array indicizzati associativamente: ksort() e asort() $prezzi = array('flauto'=>2500, 'violino'=>8000, 'oboe'=>5400, 'liuto'=>11000);
ksort($prezzi);
asort($prezzi);
Programmazione Web - PHP: approfondimenti
![Page 52: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/52.jpg)
52
Ordinamento di array (III)
Ordinamento di array in ordine inverso: rsort(), krsort() e arsort()
rsort($strumenti);
krsort($prezzi);
arsort($prezzi);
Programmazione Web - PHP: approfondimenti
![Page 53: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/53.jpg)
53
Riordinamento casuale di array
Programmazione Web - PHP: approfondimenti
![Page 54: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/54.jpg)
54
Inversione di arrayarray_reverse($a): genera un array inverso di $a
$inv_str = array_reverse($strumenti);
$inv_art = array_reverse($articoli);
Programmazione Web - PHP: approfondimenti
![Page 55: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/55.jpg)
55
Conteggio di elementi negli arraycount($a): restituisce il numero di elementi dell’array $a
array_count_values($a): restituisce un array associativo che indica la frequenza di ogni elemento nell’array $a (gli elementi di $a devono esserescalari)
Programmazione Web - PHP: approfondimenti
![Page 56: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/56.jpg)
56
Conversione di array associativi in variabili scalari
extract(array a [, int tipologia [, string prefisso]]): genera un insieme di variabili omonime delle chiavi di a
Parametri opzionali:• tipologia: tipologia di gestione delle collisioni (default: sovrascrittura)• prefisso: rilevante per certe tipologie di collisione
extract($prezzi);echo "$flauto $violino $oboe $liuto"
Programmazione Web - PHP: approfondimenti
![Page 57: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/57.jpg)
57
Caricamento di array da file
Programmazione Web - PHP: approfondimenti
![Page 58: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/58.jpg)
58
Navigazione di array
Array: ha un puntatore interno che punta all’elemento corrente dell’array(creazione array punta al primo elemento)• current($a) restituisce elemento corrente• each($a) restituisce elemento corrente; incrementa puntatore• next($a) incrementa puntatore; restituisce elemento corrente• reset($a) posiziona puntatore al primo elemento (e lo restituisce)• end($a) posiziona puntatore all’ultimo elemento (e lo restituisce)• prev($a) decrementa puntatore; restituisce elemento corrente
$a = array("alfa", "beta", "gamma");$stringa = end($a);while($stringa){ echo "$stringa <br/>"; $stringa = prev($a);}
gamma beta alfa
Programmazione Web - PHP: approfondimenti
![Page 59: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/59.jpg)
59
Pulitura di stringhestring trim(string stringa): rimozione di spaziatura intorno a stringa
Spazio bianco ‘ ‘Newline "\n" Carriage return "\r"Tab orizzontale "\t"Tab verticale "\x0B"Fine stringa "\0"
string ltrim(string stringa): pulitura solo a sinistra string rtrim(string stringa): pulitura solo a destra
$nome = trim($_POST['nome']);$email = trim($_POST['email']);
Programmazione Web - PHP: approfondimenti
![Page 60: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/60.jpg)
60
Rendering dei Newlinestring nl2br(string stringa): sostituzione di "\n" con "<br/>”
Programmazione Web - PHP: approfondimenti
![Page 61: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/61.jpg)
61
Formattazione di stringhe per la stampavoid printf(string formato [, mixed args ...])string sprintf(string formato [, mixed args ...])
formato: specifica del formato della stringa di output mediante codiciargs: variabili che istanziano i codici nel formato
Specifiche di conversione multiple:
echo "Il costo totale è $costo_totale";
printf("Il costo totale è %s", $costo_totale)";
printf("Il costo totale è %.2f", $costo_totale)";
Il costo totale è 83,8
Il costo totale è 83,80
printf("Il costo totale è %.2f (con spedizione %.2f)",
$costo_totale, $costo_con_spedizione);
Il costo totale è 83.80 (con spedizione 88.80)
Programmazione Web - PHP: approfondimenti
![Page 62: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/62.jpg)
62
Formattazione di stringhe per la stampa
Sintassi specifica di conversione: %['carattere-riempimento] [-] [larghezza] [.precisione] codice
Programmazione Web - PHP: approfondimenti
![Page 63: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/63.jpg)
63
Formattazione di stringhe per la stampaCambiamento del case (maiuscola-minuscola) di stringhe:
Utile nel confronto tra stringhe:
$subject = 'Feedback dal sito web';
if(strtolower($email) == '[email protected]') $to = '[email protected]';else $to = '[email protected]';
Programmazione Web - PHP: approfondimenti
![Page 64: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/64.jpg)
64
Formattazione di stringhe per la memorizzazione
Problemi nella memorizzazione di stringhe nel database: apici, \, NULLInibizione dei metacaratteri mediante backslash: \', \", \\
string addslashes(string stringa)string stripslashes(string stringa)
$feedback = addslashes(trim($_POST['feedback'])); $feedback = stripslashes($feedback);
Programmazione Web - PHP: approfondimenti
![Page 65: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/65.jpg)
65
Esplosione ed implosione di stringhearray explode(string separatore, string input [, int limite])
string implode(array input, string separatore)
string strtok(string input, string separatore): preleva da input un token alla volta
$email_array = explode('@', $email); if(strtolower($email_array[0] == 'luigi.rossi') $to = '[email protected]';else $to = [email protected]';
$email = implode($email_array, '@');
$token = strtok($feedback, ' ');do{ echo "$token <br />"; $token = strtok(' ');} while($token != '');
Prima call due parametri
Successive call un solo parametro (separatore)
Programmazione Web - PHP: approfondimenti
![Page 66: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/66.jpg)
66
Prelievo di sottostringhestring substr(string stringa, int inizio [, int lung])
inizio: indice da cui prelevare la sottostringa (se negativo dalla fine)
lung: numero di caratteri da prelevare (se non specificato fino alla fine)
$feedback = 'Il vostro servizio clienti è eccellente';
Programmazione Web - PHP: approfondimenti
![Page 67: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/67.jpg)
67
Confronto di stringheint strcmp(string stringa1, string stringa2)
stringa1 == stringa2 risultato = 0stringa1 > stringa2 risultato > 0stringa1 < stringa2 risultato < 0
int strnatcmp(string stringa1, string stringa2):confronto sulla base di un criterio 'naturale' (http://www.naturalordersort.org)
Versioni non sensibili alle maiuscole/minuscole (case insensitive): strcasecmp()strnatcasecomp()
echo strcmp('15', '2');
echo strnatcmp('15', '2');
-1
1
Programmazione Web - PHP: approfondimenti
![Page 68: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/68.jpg)
68
Ricerca di sottostringhestring strstr(string pagliaio, string ago)
se ago trovato nel pagliaio sottostringa dall’inizio di agose ago non trovato nel pagliaio falsese più occorrenze di ago nel pagliaio prima occorrenza di ago
Assegnamento del destinatario in base a parole chiave nel feedback:
Varianti:stristr(): case insensitivestrrchr() sottostringa partendo dall’ultima occorrenza di ago
$to = '[email protected]'; // defaultif(strstr($feedback, 'negozio')) $to = '[email protected]';elseif(strstr($feedback, 'consegna')) $to = '[email protected]';elseif(strstr($feedback, 'fattura')) $to = '[email protected]';
Programmazione Web - PHP: approfondimenti
![Page 69: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/69.jpg)
69
Ricerca posizione di sottostringheint strpos(string pagliaio, string ago [ , int offset ])
restituisce la posizione della prima occorrenza di ago in pagliaiooffset: punto in pagliaio da cui iniziare a cercarese ago non si trova nel pagliaio falsepiù veloce di strstr()
Se ago non si trova nel pagliaio false: strpos() rimane non definito
$saluto = 'Hello world';echo strpos($saluto, 'world');
echo strpos($saluto, 'l', 5);
$pos = strpos($saluto, 'Hello');if($pos === false) echo 'Non trovato';else echo "Trovato alla posizione $pos";
Trovato alla
posizione 0
6
9
Programmazione Web - PHP: approfondimenti
![Page 70: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/70.jpg)
70
Sostituzione di sottostringhe (I)mixed str_replace(mixed ago, mixed nuovo, mixed pagliaio [ , int &tot ])
sostituisce tutte le occorrenze di ago in pagliaiorestituisce il nuovo pagliaiose specificato, assegna a tot il numero di sostituzioni effettuate
Possibile passare array invece di stringhe:
$saluto = 'Hello world, wonderful world!';$tot = 0;echo str_replace('world', 'people', $saluto, $tot)."($tot)";
$feedback = 'Questo negozio fa schifo! Veramente schifo!';
$censurate = array('schifo', ...);
echo str_replace($censurate, '***', $feedback);
Programmazione Web - PHP: approfondimenti
![Page 71: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/71.jpg)
71
Sostituzione di sottostringhe (I)mixed str_replace(mixed ago, mixed nuovo, mixed pagliaio [ , int &tot ])
sostituisce tutte le occorrenze di ago in pagliaiorestituisce il nuovo pagliaiose specificato, assegna a tot il numero di sostituzioni effettuate
Possibile passare array invece di stringhe:
$saluto = 'Hello world, wonderful world!';$tot = 0;echo str_replace('world', 'people', $saluto, $tot)."($tot)";
$feedback = 'Questo negozio fa schifo! Veramente schifo!';
$censurate = array('schifo', ...);
echo str_replace($censurate, '***', $feedback);
Hello people, wonderful people! (2)
Questo negozio fa ***! Veramente ***!
Programmazione Web - PHP: approfondimenti
![Page 72: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/72.jpg)
72
Sostituzione di sottostringhe (III)string substr_replace(string stringa, string sostituto, int inizio [ , int lung ])
sostituisce una parte di stringa con sostitutoinizio: posizione di stringa in cui inizia la sostituzione (se negativo,
posizione dalla fine)lung positiva o nulla numero di caratteri sostituiti lung negativa posizione (dalla fine) su cui terminare la sostituzione
$saluto = 'Hello world';echo substr_replace($saluto, 'people', 6, 5);
echo substr_replace($saluto, 'people ', 6, 0);
echo substr_replace($saluto, 'people ', 6, -2);
Hello people
Hello people world
Hello people ld
Programmazione Web - PHP: approfondimenti
![Page 73: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/73.jpg)
73
Espressioni regolari
Pattern matching complessi (non semplicemente uguaglianze di stringhe)
Due possibili stili: POSIX, Perl (PCRE)
• Espressione regolare = notazione per specificare un pattern in un testo
• Uso di metacaratteri per specificare particolari pattern
Programmazione Web - PHP: approfondimenti
![Page 74: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/74.jpg)
74
Insiemi di caratteri (I)Un qualsiasi carattere diverso da \n: .
Classe di caratteri: [ lista-di-caratteri ]
.emo
[aeiou]
[a-z]
[a-zA-Z]
[^a-z]
[^aeiou]
compatibile con remo, temo, memo, …
vocali
range delle lettere alfabetiche minuscole
range delle lettere alfabetiche
qualsiasi carattere che non sia una lettera alfabetica minuscola
qualsiasi carattere che non sia una lettera vocale
Programmazione Web - PHP: approfondimenti
![Page 75: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/75.jpg)
75
Insiemi di caratteri (II)Classi di caratteri predefinite:
Programmazione Web - PHP: approfondimenti
![Page 76: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/76.jpg)
76
Ripetizione e alternativaRipetizione zero o più volte del pattern: *
Ripetizione una o più volte del pattern: +
Opzionalità: ?
Alternativa: |
[aeiou]*
[[:alpha:]][[:alnum:]]*
[[:digit:]]+
[[:digit:]]+,[[:digit:]]+
[[:digit:]]+[aeiou]?
org|net|com
Zero o più vocali
Lettera seguita da zero o più caratteri alfanumerici (identificatore)
Una o più cifre decimali (numero intero)
Numero reale con parte decimale
Numero eventualmente seguito da una vocale
Programmazione Web - PHP: approfondimenti
![Page 77: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/77.jpg)
77
SottoespressioniPossibile raggruppare sottoespressioni mediante parentesi:
Ripetizione di un pattern un numero vincolato di volte: { limiti }
(molto )*grandegrande
molto grande
molto molto grande …
[[:digit:]]{16}
(molto ){1,3}grande
(molto ){2,}grande
Numero intero di 16 cifre decimali
molto grande
molto molto grande
molto molto molto grande
molto molto grande
molto molto molto grande
molto molto molto molto grandeProgrammazione Web - PHP: approfondimenti
![Page 78: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/78.jpg)
78
AncoraggioPossibile specificare la posizione di una sottostringa:
^Hello
world$
^[[:alpha:]][[:alnum:]]*$
[[:<:]][[:digit:]]+[[:>:]]
Hello world
Hello people
Hello everybody
Hello world
Beutfiful worldBest world
Stringa costituita unicamente da un identificatore
123 alfa25 460
Programmazione Web - PHP: approfondimenti
![Page 79: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/79.jpg)
79
Caratteri speciali
Per inibire i caratteri speciali al di fuori di [ ], è necessario precederli con \
Meglio inserire il pattern tra apici singoli (non doppi):
Se pattern tra apici doppi parsing della stringa necessari ulteriori \
'[[:digit:]]+\.[[:digit:]]+'12.0
0.14
13.156
"[[:digit:]]+\\.[[:digit:]]+"
Programmazione Web - PHP: approfondimenti
![Page 80: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/80.jpg)
80
Applicazione del modulo di feedback
Rilevazione di particolari termini nel feedback del cliente:
Controllo nome del cliente:
Controllo formato indirizzo di email:
negozio|consegna|fattura
Luigi Rossi
G. Luigi Rossi
G.C. Luigi Rossi
^(([[:upper:]]\.)+ )?[[:upper:]][[:lower:]]+ [[:upper:]][[:lower:]]+$
^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9_.-]+$
Programmazione Web - PHP: approfondimenti
![Page 81: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/81.jpg)
81
Ricerca di sottostringhe con espressioni regolari
bool ereg(string pattern, string stringa)• stabilisce se stringa contiene una sottostringa compatibile con
pattern• case-sensitive
Variante case-insensitive: eregi()
Programmazione Web - PHP: approfondimenti
![Page 82: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/82.jpg)
82
Ricerca di sottostringhe con espressioni regolari
string ereg_replace(string pattern, string sostituto, string stringa)
sostituisce con sostituto tutte le sottostringhe di stringa compatibili con pattern
restituisce il risultato della sostituzione (funzionale: stringa non cambia!)Variante case-insensitive: eregi_replace()
$transazione = 'Carta di credito: 4367-2234-1245-3200';
$pattern = '[[:digit:]]{4}(-[[:digit:]]{4}){3}';
echo ereg_replace($pattern, 'xxxx-xxxx-xxxx-xxxx', $transazione);
$stringa = 'alfa 23beta gamma48 125';
$pattern = '[[:<:]][[:digit:]]+[[:>:]]';
echo ereg_replace($pattern, 'NUM', $stringa);
Carta di credito: xxxx-xxxx-xxxx-xxxx
alfa 23beta gamma48 NUM
Programmazione Web - PHP: approfondimenti
![Page 83: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/83.jpg)
83
Dividere stringhe con espressioni regolari
array split(string pattern, string stringa [, int max])• restituisce l’array di stringhe ottenuto dividendo stringa limitata dai confini
compatibili con pattern• max: numero massimo di elementi nell’array risultante
$email = '[email protected]';
$a = split('\.|@', $email);
$espressione = '3*52+24/5-12';
$operandi = split('[-+*/]', $espressione);
Programmazione Web - PHP: approfondimenti
![Page 84: Programmazione Web Approfondimenti di PHP. Gestione dello stato](https://reader033.vdocuments.site/reader033/viewer/2022052310/5542eb75497959361e8dddb1/html5/thumbnails/84.jpg)
84
Funzioni deprecatedereg(‘pattern’,’stringa’) sostituito da
preg_match(‘/pattern/’,’stringa’)
eregi(‘pattern’,’stringa’) sostituito da preg_match(‘/pattern/i’,’stringa’)
ereg_replace(‘pattern’,’sostituto’,’stringa’) sostituito da preg_replace(‘/pattern/’,’sostituto’,’stringa’)
uso di ‘/pattern/i’ in caso di eregi_replace
split(‘pattern’,’stringa’) sostituito da preg_split(‘/pattern/’,’stringa’)
Programmazione Web - PHP: approfondimenti