php - php: hypertext preprocessor. introduzione php (acronimo ricorsivo per "php: hypertext...

53
PHP - PHP: Hypertext Preprocessor

Upload: pepe-d-agostino

Post on 02-May-2015

271 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

PHP - PHP: Hypertext Preprocessor

Page 2: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Introduzione

• PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose Open Source molto utilizzato, specialmente indicato per lo sviluppo Web.

• PHP nasce nel 1994 per opera di Rasmus Lerdorf che lo utilizzava nell’implementazione delle proprie pagine web. Nel 1995 esce la prima versione.

• Nelle pagine PHP il codice PHP viene immerso nell’HTML. Il codice PHP è delimitato da speciali start e end tag che ne indicano l'inizio e la fine e che consentono di passare dal modo HTML al modo PHP.

• PHP può essere usato su tutti i principali sistemi operativi, inclusi Linux, molte varianti di Unix (compresi HP-UX, Solaris e OpenBSD), Microsoft Windows, MacOS X ed è supportato dalla maggior parte dei web server esistenti, quindi anche da Apache e IIS.

Page 3: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Installazione

• PHP può essere utilizzato in tre ambiti differenti:

• Server-side scripting: in questo caso si può adottare un modulo per l’estensione del web server (es. file .dll) oppure se non si dispone del modulo si può utilizzare PHP come motore CGI ( e quindi si deve disporre dell’eseguibile php.exe)

• Command line scripting: si installa e utilizza l’interprete php.exe per l’eseguzione da linea di comando.

• Applicazioni GUI. Consente di gestire finestre e oggetti grafici utilizzando l’estensione PHP-GTK che non è fornita con la distribuzione ufficiale di PHP.

Page 4: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Installazione di PHP per IIS

• Per installare un modulo ISAPI per IIS:

• Nella console di configurazione di IIS, andare in 'Home Directory’.

• Premere il pulsante ‘Configuration’.

• Aggiungere una nuova voce alle Application Mapping.

• Specificare il path del modulo ‘php4isapi.dll’.

• Specificare l’estensione dei file da interpretare come .php.

• Marcare la checkbox “Script engine” per informare che si tratta di un engine per script.

• Fermare e riavviare IIS.

Page 5: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Installazione di PHP per IIS

La finestra di configurazione per le Applicazioni in IIS.

Page 6: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

File di configurazione

• La configurazione di PHP è registrata nel file php.ini.

• Il file php.ini contiene una lista di direttive.

• Nel file php.ini la sintassi da seguire è questa:

– Righe bianche o che iniziano con ; sono ignorate.

– Gli header di sezione (es :[Foo]) sono ignorati.

– Le direttive vanno specificate nella forma: direttiva=valore. I nomi delle direttive sono case sensitive. Il valore può essere un numero, una stringa o una costante

– Le estensioni a PHP devono essere specificate prima del loro successivo uso nel file di configurazione.

• Se usato come linguaggio di script il file php.ini viene letto prima di ogni esecuzione di PHP. Se invece PHP è utilizzato da un web server come interprete del codice delle pagine web, il file è letto solo una volta all’avvio del server.

Page 7: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Un esempio con PHP

• <html>• <head>• <title>Test PHP</title>• </head>• <body>• <?php echo "Hello World!"; ?>• </body>• </html>

• Il file non necessita di essere eseguibile. Questi file hanno l’estensione .php.

• Tutto ciò che fa è visualizzare ‘Hello World!’ usando la funzione echo di PHP inserita fra gli speciali tag <?php e ?>

• All'interno di un file HTML si può entrare ed uscire dalla modalità PHP quante volte si desidera.

Page 8: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Uscire dalla modalità HTML

• Esistono 4 set di tag che possono essere utilizzati per delimitare blocchi di codice PHP:

• 1. <?php echo("per inserire codice php si puo usare questo modo\n"); ?>• 2. <?= espressione ?> • Questa è un'abbreviazione per "<? echo espressione ?>" .• 3. <script language="php">• echo ("altro modo per inserire codice

php");• </script>• 4. Tag nello stile ASP:• <%= $variable; %> Una abbreviazione per "<%echo .."%>

• Soltanto due di questi (<?php. . .?> e <script language="php">. . .</script>) sono sempre disponibili. Gli altri possono essere attivati o disattivati tramite il file di configurazione php.ini.

Page 9: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Uscire dalla modalità HTML

• Il PHP permette l’uso delle strutture seguenti, dove l’output e condizionato dal valore di $expression:

• <?php

• if ($expression) {

• ?>

• <strong>Questa è vera.</strong>

• <?php

• } else {

• ?>

• <strong>Questa è falsa.</strong>

• <?php

• }

• ?>

Page 10: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Commenti

• Il PHP supporta i commenti dei linguaggi 'C', 'C++' e della shell Unix. Per esempio:

• <?php• //Commento su una linea nella stile c++

• /* Commento su più linee• ...ancora un'altra linea di commento */• ?>

• Lo stile di commento su "una linea", attualmente commenta solo fino alla fine della linea o del blocco corrente di codice PHP. Questo significa che il codice HTML posizionato dopo // ?> sarà visualizzato

Page 11: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Tipi in PHP

• PHP supporta 8 tipi primitivi.

• 4 tipi scalari :

boolean

integer

float

string

• 2 tipi composti:

array

object

• 2 tipi speciali:

resource

NULL

Page 12: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Tipi in PHP

• Il tipo di una variabile di solito non viene impostato dal programmatore ma deciso a runtime da PHP in base al contesto nel quale la variabile è utilizzata.

• Per controllare quale sia il tipo e i valori di una certa variabile si usa la funzione var_dump().

• Se si vuole una rappresentazione in stringa human-readable del tipo si usa la funzione gettype(). Per farne delle verifiche si può utilizzate la funzione is_type().

• Il PHP consente il type casting per modificare il tipo di una variabile.

Page 13: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Esempio sull’uso delle variabili

• <?php• $foo = "0"; // $foo è stringa (ASCII 48)• $foo += 2; // $foo è un intero (2)• $foo = $foo + 1.3; // $foo è un float (3.3)• $foo = 5 + "10 mele"; // $foo = 15• echo $foo."\n"; // stampa 15

• //Es. sul casting

• $foo = 10; // $foo è un intero

• $bar = (boolean) $foo; // $bar è un boolean

• echo $bar."\n"; // stampa 1• ?>

Page 14: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Esempio di tipi di PHP

• <?php• $bool = TRUE; // boolean• $str = "foo"; // string• $int = 12; // integer

• echo gettype($bool); // stampa "boolean"• echo gettype($str); // stampa "string"

• // se è un intero , lo incrementa di 4• if (is_int($int)) {• $int += 4;• }

• // Se $bool è una string, lo stampa• // (in questo caso non viene stampato niente)• if (is_string($bool)) {• echo "String: $bool";• }• ?>

Page 15: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Esempio var_dump()

• <?php $a = array (1, 2, array ("a", "b", "c"));

• var_dump ($a); ?>

• /* output:

• array(3) {

• [0]=> int(1)

• [1]=> int(2)

• [2]=> array(3) {

• [0]=> string(1) "a"

• [1]=> string(1) "b"

• [2]=> string(1) "c"

• }

• } */

Page 16: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Stringhe in PHP

• Le stringhe in PHP non pongono limiti nella lunghezza.• Si possono definire usando l’apice singolo. In questo caso la stringa non è mai

interpretata.• echo ’questa è una semplice stringa';

• Si possono definire usando le doppie virgolette. In questo caso PHP interpreta le variabili e i caratteri di escape contenuti nella stringa.

• echo “stampo la variabile \$var: $var”;• Si possono definire usando l’operatore <<<• Es:• $str = <<<EOD • Esempio di stringa definita usando la sintassi heredoc. • EOD;

• Anche in questo caso la stringa è interpretata.

Page 17: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Stringhe in PHP

• Operatori di stringa:

– l’operatore ‘.’ Concatena due stringhe

– l’operatore ‘.=‘appende ad una variabile la stringa a destra dell’uguale.

– Il confronto tra stringhe si esegue utilizzando gli operatori ==, !=, <, >, <=, >=

Page 18: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Array in PHP

• PHP fornisce array associativi per memorizzare coppie chiave-valore. Non ci sono differenze fra array con indici e array associativi: PHP fornisce un solo tipo di array.

• Un array può essere creato usando il costrutto array:• $arr = array("foo" => "bar", 12 => true);• echo $arr["foo"]; // bar• echo $arr[12]; // 1• La chiave può essere sia un intero che una stringa.• Un elemento di un array può essere di uno qualunque dei tipi PHP

• $arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));

• echo $arr["somearray"][6]; // 5

• echo $arr["somearray"][13]; // 9

• echo $arr["somearray"]["a"]; // 42

Page 19: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Array in PHP

• Se la chiave di un nuovo elemento è omessa, viene adottata come nuova chiave il massimo indice intero dell’array +1. Questo vale anche per gli indici negativi.

• Se non esiste un indice intero, la nuova chiave avrà valore 0.

• Se viene specificata una chiave già esistente il vecchio valore sarà sovrascritto.

• Non si possono usare array o oggetti come chiavi.

• Una volta creato l’array può essere modificato.

• $arr = array(5 => 1, 12 => 2);

• $arr[] = 56; // Come fare $arr[13] = 56;

• $arr["x"] = 42; // Aggiunge un nuovo elemento

• unset($arr[5]); // Rimuove l’elemento dall’array

• unset($arr); // Cancella tutti gli elementi

Page 20: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Strutture di controllo - 1

• Costrutto if.. else• if ($a > $b) {• print "a è maggiore di b";• } else {• print "a NON è maggiore di b";• }

• elseif estende if aggiungendo la possibilità di eseguire un'altra istruzione nel caso in cui l'espressione contenuta nel ramo if sia FALSE

• if ($a > $b) {• print "a è maggiore di b";• } elseif ($a == $b) {• print "a è uguale a b";• } else {• print "a è minore di b";• }

Page 21: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Strutture di controllo - 2

•Costrutto while

•$i = 1;

•while ($i <= 10) {

• print $i++;

•}

•Costrutto do..while•$i = 0;•do {• print $i;•} while ($i>0);•Costrutto for

•for ($i = 1; $i <= 10; $i++) { print $i; }

Page 22: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Strutture di controllo - 3

•Costrutto for..each

•$a = array (1, 2, 3, 17);

•foreach ($a as $v) { // $v cicla sui valori

• print "Valore corrente di \$a: $v.\n"; }

•Costrutto switch

•switch ($i) {

• case 0: print "i è uguale a 0"; break;

• case 1: print "i è uguale a 1"; break;

• case 2: print "i è uguale a 2"; break; }

•break termina l'esecuzione di una struttura for, foreach, while, do..while o switch.

•continue si utilizza per interrompere l'esecuzione del ciclo corrente e continuare con l'esecuzione all'inizio del ciclo successivo

Page 23: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

include() e require()

• include() e require() includono e valutano uno specifico file.

• include() e require() sono identiche in ogni senso eccetto per come esse trattano gli errori:include() produce un warning mentre require() restituisce un Fatal Error.

• Quando un file viene incluso, il codice che esso contiene eredita lo scope delle variabili della riga in cui si verifica l'inclusione.

• require() e include() devono essere inclusi all'interno di blocchi di istruzioni se si trovano in un blocco condizionale.

• È possibile eseguire un'istruzione return() in un file incluso per terminare l'esecuzione di quel file e restituirlo allo script che l'ha chiamato.

Page 24: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Funzioni in PHP

• Una funzione può essere definita usando la sintassi• function myfunc($arg_1, $arg_2, ..., $arg_n)• {• echo "Funzione di esempio.\n";• return $retval;• }• PHP non supporta l'overloading di funzioni

• PHP 4 supporta un numero variabile di argomenti e gli argomenti di default

• PHP supporta il passaggio di argomenti per valore e per riferimento (di default, gli argomenti della funzione sono passati per valore)

• Il passaggio per riferimento si ottiene anteponendo un ampersand (&) al nome dell'argomento nella definizione della funzione

• I valori vengono restituiti usando l'istruzione opzionale return.

• Può essere restituito qualsiasi tipo, incluse liste ed oggetti.

Page 25: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Classi e oggetti

• Le classi sono tipi del linguaggio.

• Una classe si definisce usando la seguente sintassi:

• <?php• class Cart{• var $items; // Articoli nel carrello • // lo uso come array associativo

• // Aggiunge $num articoli di $artnr nel carrello• function add_item ($artnr, $num)• {• $this->items[$artnr] += $num;• } • }• ?>

Page 26: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Classi e oggetti

• Per creare una variabile oggetto si usa l'operatore ‘new’.

• $cart = new Cart;

• Si può accedere ai metodi della classe usando l’operatore ‘->’

• $cart->add_item(”Mele",10 );

• Questa operazione aggiunge all’array associativo items la nuova coppia (Mele,10).

• Per stampare i valori dell’array si può usare ancora l’operare ->

• echo $cart->items["Mele"]; //stampa 10

• si specifica un solo simbolo di $ per accedere alla variabili

• Per poter accedere all'interno della classe alle funzioni e alle variabili interne della stessa classe si usa la pseudo-variabile ‘$this’

Page 27: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Classi e oggetti

• E’ possibile generare classi per estensione di altre classi.

• Una classe estesa o derivata ha tutte le variabili e le funzioni della classe di base più tutto ciò che viene aggiunto dall'estensione.

• Non è possibile che una sottoclasse ridefinisca variabili e funzioni di una classe madre.

• L'eredità multipla non è supportata

• Le classi si estendono usando la parola chiave 'extends'.• class Named_Cart extends Cart{• var $owner;• function set_owner ($name)• {• $this->owner = $name;• }• }

Page 28: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Classi e oggetti

• In PHP si possono definire i costruttori di classe che vengono invocati automaticamente quando viene istanziato un oggetto con l’operatore new.

• class Auto_Cart extends Cart {

• function Auto_Cart() {

• $this->add_item ("10", 1);

• }

• }

• L'operatore :: è usato per riferirsi alle funzioni di classi senza istanziarle. Si possono usare funzioni della classe, ma non le variabili della classe.

Page 29: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Variabili speciali

• PHP definisce un certo numero di array associativi speciali disponibili all’interno degli script server-side tra le quali:

• $_SERVER: contiene variabili impostate dal web server e relative all’ambiente di esecuzione dello script

• $_GET: contiene variabili ricevute dallo script via HTTP GET

• $_POST: contiene variabili ricevute dallo script via HTTP POST

• $_ COOKIE: contiene variabili ricevute dallo script tramite l’invio di cookie

• $_ENV: contiene variabili d’ambiente dello script.

• $_SESSION: contiene variabili che sono correntemente registrate nella sessione di esecuzione dello script.

Page 30: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Esempi con le variabili speciali

• Vediamo come verificare che tipo di browser sta utilizzando la persona che visita le nostre pagine.

• Per fare questo si controlla la variabile che contiene le informazioni sull'user agent che il browser invia come parte della richiesta HTTP. Quest'informazione viene registrata nell’array $_SERVER.

• La variabile alla quale ci riferiamo adesso è $_SERVER["HTTP_USER_AGENT"]

• <?php echo $_SERVER["HTTP_USER_AGENT"]; ?>

• L'output (risultato) di questo script potrebbe essere:

• Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)

• $_SERVER è soltanto un array che automaticamente viene reso disponibile da PHP.

Page 31: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Gestire le form

• Qualsiasi elemento inviato tramite una form è automaticamente disponibile negli script PHP.

• Es:• <form action="action.php" method="POST">• Il tuo Nome: <input type="text" name="name" value="" />• La tua et&agrave;: <input type="text" name="age" value ="" />• <input type="submit">• </form>

• Quando l'utente riempie questa form e preme il pulsante submit, viene richiamata la pagina action.php.

Page 32: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Gestire le form - 2

• Nella pagina action.php lo script di gestione della form precedente potrebbe essere:

• Ciao <?php echo $_POST["name"]; ?>.• La tua et&agrave; &egrave; di <?php echo $_POST["age"]; ?> anni.

• Ecco un possibile output di questo script: • Ciao Joe.• La tua età è di 22 anni.• Le variabili $_POST["name"] e $_POST["age"] vengono impostate

automaticamente dal PHP.

• Se usassimo il metodo GET le informazioni ricavate dalla nostra form si troverebbero invece in $_GET.

Page 33: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Gestione delle sessioni

• PHP consente di mantenere certi dati attraverso accessi successivi con l’uso delle sessioni.

• Il sistema di gestione delle sessioni supporta un numero di opzioni di configurazione che possono essere impostate nel file php.ini.

• Al visitatore del sito web viene assegnato un id unico, il cosidetto id di sessione. Questo viene registrato in un cookie sul lato utente o è propagato tramite l'URL.Quando un visitatore accede al sito, PHP controllerà automaticamente (se session.auto_start è settato a 1 in php.ini) se uno specifico id di sessione sia stato inviato con la richiesta.

• Le sessioni sono gestite un 2 modi

– Tramite session_register() che registra variabili nella sessione corrente.

– Con $_SESSION. Si può accedere alle variabili di sessione come a variabili normali in un array.

Page 34: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Gestione delle sessioni

• Registrare una variabile con $_SESSION.

• //isset verifica se la variabile è definita

• if (!isset($_SESSION['count'])) {

• $_SESSION['count'] = 0; }

• else {

• $_SESSION['count']++;

• }

• Resettare una variabile con $_SESSION.

• unset($_SESSION['count']);

• Registrare una variabile con session_register().

• $nome = ”Mario";

• session_register(”nome");

Page 35: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Espressioni regolari

• Il PHP fornisce un insieme di funzioni che forniscono l’interfaccia per l’uso di espressioni regolari con una sintassi compatibile con Perl 5.

• Il supporto per le espressioni regolari è ottenuto mediante la libreria PCRE, che è un software open source, scritto da Philip Hazel, ed il cui copyright è detenuto dalla Università di Cambridge, Inghilterra. A partire dalla versione 4.2.0 di PHP queste funzioni sono abilitate per default.

• Le espressioni regolari devono essere racchiuse tra delimitatori, ad esempio /. Il delimitatore finale può essere seguito da vari modificatori che agiscono sul criterio di riconoscimento.

• Le funzioni per le espressioni regolari consentono anche le operazioni di sostituzione e split delle stringhe.

Page 36: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Espressioni regolari - funzioni

• La funzione preg_grep() restituisce un array composto dagli elementi dell'array preso in input che soddisfano i criteri impostati nell’espressione regolare specificata.

• $array = array("1" => "stringa1", 2 => "stringa2");

• $f_array = preg_grep ("/ga1/", $array);

• echo $f_array[1]; //stampa stringa1

• La funzione preg_match() restituisce il numero di volte in cui è avvenuto il riconoscimento della espressione regolare nelle stringa di testo.

• if (preg_match ("/php/i", "PHP supporta le e. r.")) {

• echo ”Riconoscimento avvenuto."; }// stampa questo

• else { echo "Testo non riconosciuto."; }

Page 37: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

La libreria Curl

• PHP supporta libcurl, una libreria creata da Daniel Stenberg, che permette di collegarsi e comunicare con parecchi tipi di server e con parecchi tipi di protocolli. Libcurl al momento supporta i protocolli http, https, ftp, telnet, file, e altri. libcurl supporta anche i certificati HTTPS, HTTP POST, HTTP PUT, l'upload via FTP (questo può essere ottenuto anche con l'estensione ftp di PHP), upload attraverso una form HTTP, proxy, cookie e autenticazione con utente e password.

Page 38: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Funzionamento della libreria

• Funzioni principali:• curl_close -- Chiude una sessione CURL • curl_errno -- Restituisce il numero dell'ultimo errore • curl_ error --  Restituisce una stringa contenente l'ultimo errore relativo alla

sessione corrente • curl_ exec -- Esegue una sessione CURL • curl_ getinfo --  Ottiene informazioni relative a un determinato trasferimento • curl_ init -- Inizializza una sessione CURL • curl_ setopt -- Imposta una opzione per un trasferimento CURL • curl_ version -- Restituisce la versione di in uso

• Per operare con la libreria curl in generale si inizializza una sessione usando curl_init(), si impostano le opzioni per il trasferimento tramite curl_setopt(), si esegue la sessione usando curl_exec() e quindi si termina la sessione con curl_close().

Page 39: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Esempio

• <?php• $versione = curl_version(); echo "$versione";

• $ch = curl_init ("http://www.esempio.it/");• // anche curl_setopt ($ch, CURLOPT_URL, "http://www.example.it/");

• $errore =curl_error($ch);• echo "-$errore-";

• $fp = fopen ("C:/tmp/provaCurl.txt", "w");

• curl_setopt ($ch, CURLOPT_FILE, $fp);• curl_setopt ($ch, CURLOPT_HEADER, 0);• // se diverso da 0 gli header HTTP vengono inclusi nell’output• curl_exec ($ch);• curl_close ($ch);• fclose ($fp);• ?>

Page 40: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Esempio

• <?php• $versione = curl_version(); echo "$versione";

• $ch = curl_init ("http:// www.esempio.it /");• // anche curl_setopt ($ch, CURLOPT_URL, "http://www.example.com/");

• $errore =curl_error($ch);• echo "-$errore-";

• $fp = fopen ("C:/tmp/provaCurl.txt", "w");

• curl_setopt ($ch, CURLOPT_FILE, $fp);• curl_setopt ($ch, CURLOPT_HEADER, 0);• // se diverso da 0 gli header HTTP vengono inclusi nell’output• curl_exec ($ch);• curl_close ($ch);• fclose ($fp);• ?>

Questo programma esegue una connesione http col sito www.esempio.it, scarica il contenuto e lo salva sul file C:/tmp/provaCurl.txt, senza includere gli header HTTP

Page 41: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Gestire file XML col DOM in PHP

• Dato un file XML del tipo:• <?xml version="1.0" encoding="UTF-8"?>• <ListaPersone>• <Persona>• <Nome>Nicola</Nome>• <Cognome>Gessa</Cognome>• </Persona>• <Persona>• <Nome>Mario</Nome>• <Cognome>Rossi</Cognome>• </Persona>• </ListaPersone>

• Questo file è strutturato secondo una “forma” ad albero, infatti potremmo rappresentarlo…

Page 42: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Gestire file XML col DOM in PHP

…in questo modo

Lista_Persone

Persona Persona

Nome NomeCognome Cognome

Nicola Gessa Mario Rossi

/

Page 43: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Come costruire un DOM con PHP?

• Ci sono tre modi:

• Creare un albero vuoto e usare le funzioni disponibili per aggiungere gli elementi necessari

$doc=domxml_new_doc

• Creare l’albero a partire da un documento XML salvato su file

• $dom = domxml_open_file("example.xml");

• Creare l’albero a partire da una stringa scritta secondo il formato XML• $xmlstr ="<?xml version='1.0' standalone='yes'?

>• <Persona>• <Nome>Nicola</Nome>• </Persona>”;• $dom = domxml_open_mem(“xmlstr.xml");

Page 44: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Come gestire il DOM?

• La libreria di gestione del DOM per PHP mette a disposizione un vasto insieme di funzioni per operare sul DOM. Alcuni esempi di funzione…

• DomDocument->create_text_node -- Crea un nodo di testo• DomDocument->document_element -- Restituisce il nodo radice • DomNode->child_nodes -- Restituisce i figli di un nodo • DomNode->first_child -- Restituisce il primo nodo figlio • DomNode->get_content -- Restituisce il contenuto del nodo • DomNode->next_sibling -- Restituisce il successivo fratello del nodo • DomNode->node_name -- Restituisce il nome del nodo • DomNode->remove_child -- Rimuove un nodo figlio dalla lista dei figli • DomNode->replace_child -- Sostituisce un nodo figlio • DomNode->replace_node -- Sostituisce il nodo • DomNode->set_content -- Imposta il contenuto del nodo • DomNode->unlink_node -- Rimuove il nodo

• … ma ce ne sono molti altri.

Page 45: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Esempio

• <?php• $xmlstr ="<?xml version='1.0' standalone='yes'?>….";• $xmlstr = preg_replace ("/>\s*</","><",$xmlstr);

• if(!$dom = domxml_open_mem($xmlstr)) {• echo "Errore nel parsing del documento\n";• exit;• }• $root = $dom->document_element();• $nome_root = $root->node_name();

• $figli = $root->child_nodes(); • $nome1 = $figli[0]->node_name();• $nome2 = $figli[1]->node_name();

• print "<br> radice = $nome_root <br> ";• print "<br>figlio1 = $nome1";• print "<br>figlio1 = $nome2";• ?>

Output su browser: radice = ListaPersone

figlio1 = Persona figlio1 = Persona

Page 46: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Salvare il documento XML in un file

• Una volta operato sul DOM, questo può essere riversato in formato stringa in una variabile o in un file :

• DomDocument->dump_file --  Scarica in un file l'albero XML interno

• DomDocument->dump_mem --  Scarica in una variabile la struttura XML interna

Page 47: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Trasformazioni XSLT

DocumentoXML

DocumentoXML Documento

XSLT

DocumentoXSLT

RisultatoRisultato

Page 48: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Una trasformazione XSLT

• Dato il file XML…• <?xml version="1.0" encoding="UTF-8"?>• <persona>• <nome>Mario</nome>• <cognome>Rossi</cognome>• </persona>

• …e il file XSLT• <?xml version="1.0" encoding="UTF-8"?>• <xsl:stylesheet version="1.0" ……>• <xsl:template match="persona">• <html><head><title>Persona</title></head><body>• <xsl:value-of select="nome"></xsl:value-of>• <xsl:text> - </xsl:text>• <xsl:value-of select="cognome"></xsl:value-of>• <br/><xsl:text> Trasformazione eseguita! </xsl:text>• </body></html>• </xsl:template></xsl:stylesheet>

Page 49: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Una trasformazione XSLT

• Il risultato della trasformazione è:

• <html>

• <head>

• <title>Lista persone</title>

• </head>

• <body>Mario - Rossi<br> Trasformazione eseguita! </body>

• </html>

• Php fornisce l’estensione php_xslt.dll per operare trasformazioni XSLT su file XML, come quella vista precedentemente. Questa estensione utilizza le libreria Sablotron Sablot.dll e expat.dll della Ginger Alliance.

Page 50: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Le funzioni di Sablotron

• Le funzioni principali messe a disposizione dalla libreria sono:

• resource xslt_create ( void ) -- Crea un nuovo processore XSLT

• int xslt_errno ( resource xh) -- Restituisce un numero di errore

• mixed xslt_error ( resource xh) -- Restituisce una stringa di errore

• void xslt_free ( resource xh) -- Libera un processore XSLT

• mixed xslt_process ( resource xh, string xml, string xsl [, string result [, array arguments [, array parameters]]])

 -- Esegue una trasformazione XSLT

Page 51: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Un esempio

• <?php• echo “Inizio!"; • $proc = xslt_create();

• if (xslt_process($proc, “/tmp/esempio.xml", "/tmp/esempio.xsl", "/tmp/result.txt")) {• print “Esempio.xml è stato trasformato con esempio.xsl in result.xml";• }• else {• print “Il file esempio.xml non può essere trasformato con esempio.xsl in";• print " result.xml. Errore " . xslt_error($proc) . ";• print “Codice d’errore " . xslt_errno($proc);• }• xslt_free($proc);• ?> • Questo codice trasforma il file /tmp/esempio.xml secondo il file /tmp/esempio.xsl e

salva il risultato nel file /tmp/result.xml.

Il path inizia con /

Page 52: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Un altro esempio

• <?php• // $xml and $xsl contain the XML and XSL data• $xml =“……";• $xsl = “……";• $arguments = array(• '/_xml' => $xml,• '/_xsl' => $xsl• );• $xh = xslt_create();

• // Process the document• $result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments); • if ($result) { print $result; }• else { … }• xslt_free($xh);• ?> • Questo codice trasforma la stringa $xml secondo la stringa $xsl e salva il risultato in $result

Page 53: PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose

Link Utili

• http://www.php.net/

• http://php.resourceindex.com/

• http://www.hotscripts.com/PHP/

• http://www.phpworld.com/