550 likes | 654 Views
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax. Sommario. Definizione del web 2.0 Caratteristiche dei siti web 2.0 Infrastrutture tecnologiche La piramide del web 2.0 Esempi di siti web 2.0. Sommario. PHP - Storia PHP – Significato dell'acronimo PHP - Caratteristiche
E N D
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Sommario • Definizione del web 2.0 • Caratteristiche dei siti web 2.0 • Infrastrutture tecnologiche • La piramide del web 2.0 • Esempi di siti web 2.0
Sommario • PHP - Storia • PHP – Significato dell'acronimo • PHP - Caratteristiche • PHP – Esempio • PHP – Stringhe • PHP – Array • PHP – Funzioni interne
Sommario • PHP – MySQL • PHP – MySQL - Connessione • PHP – MySQL – Query • PHP – MySQL – Risultato di query • PHP – MySQL – Altre funzioni • PHP – Framework • PHP – Sicurezza
Sommario • Ajax • Ajax – JSON • WebLogiX • STOOPHP • STOOPHP - Prospettive
Definizione del web 2.0 • ”Web 2.0” indica una nuova generazione di siti web che cercando di coinvolgere maggiormente l'utente • Non si tratta spesso di nuove tecnologie ma di un modo diverso di utilizzare tecnologie già esistenti
Caratteristiche dei siti web 2.0 • Dinamicità dei contenuti aggiornabili senza la necessità di dover conoscere HTML, FTP • Interfaccie ricche che cercano di portare l'esperienza desktop sul web • Grafica accattivante: il web 2.0 significa comunicazione e business
Caratteristiche dei siti web 2.0 • Pubblicità inerenti al contesto (Adsense) • Organizzazione dei contenuti in base alla loro popolarità anziché tassonomia • Syndication • Social bookmarking • Ottimizzazione per motori di ricerca
Infrastrutture tecnologiche • Linux • Apache (o Lighttpd) • Mysql • PHP (o Ruby, Python) • in una parola sola LAMP
Infrastrutture tecnologiche • XHTML • CSS • Javascript per comunicazioni asincrone (Ajax) • ... a questo punto occorre solo convincere i navigatori ad utilizzare un browser che rispetti gli standard e aggiornato.
Esempi di siti web 2.0 • Youtube • Flickr • Digg • Wikipedia • ... qualsiasi blog
Web 2.0 • I siti web 2.0, compresi quelli citati, sono dinamici sotto tutti i punti di vista, anche laddove non dovrebbero esserlo, cioè nel codice: sono siti che rimangono sempre in beta
Web 3.0 • Il Web 2.0 è quindi un fenomeno di comunicazione e marketing supportato dalla programmazione web a cui molti non sono ancora abituati, ma occorre farlo in fretta perché le sfide del Web 3.0 incombono
Web 3.0 • GGG Giant Global Graph – più interattività tra i siti • Connettività a banda ”larghissima” da qualsiasi apparecchio • Navigazione in 3 dimensioni stile ”Second Life”
PHP - Storia • Inizialmente sviluppato da Rasmus Lerdorf come serie di script CGI • Al progetto si unirono Zeev Suraski e Andi Gutmans che ne scrissero l'interprete Zend • Oggi è alla versione 5 e può essere usato anche per shell script e applicazioni stand-alone
PHP – Significato dell'acronimo • Si tratta di un acronimo ricorsivo e ”oggi” sta per PHP: Hypertext Preprocessor • Lerdorf non ne ha comunicato il significato originario, che secondo la tradizione sembra essere Personal Home Page
PHP - Caratteristiche • Sintassi basata sul C • Tipizzazione debole • Orientato agli oggetti (in particolare dalla versione 5) • Alto livello di astrazione
PHP – Caratteristiche • Le variabili hanno il prefisso $ e ciò le permette di essere utilizzate all'interno di stringhe. Alcune sono predefinite • $_GET: array che contiene le variabili passate alla pagina • $_POST: array che contiene variabili provenienti da from
PHP – Esempio <?php if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) { ?> <h3>strpos() must have returned non-false</h3> <p>You are using Internet Explorer</p> <?php } else { ?> <h3>strpos() must have returned false</h3> <p>You are not using Internet Explorer</p> <?php } ?>
PHP - Esempio • strpos è una funzione una stringa in un'altra • In questo caso è stata cercata la stringa MSIE all'interno di una variabile predefinita, cioé $_SERVER['HTTP_USER_AGENT'],che identifica il browser dell'utente • A seconda del risultato, vengono mostrate due porzioni di HTML differenti
PHP – Stringhe • Anche se permane la libertà di trattare le stringhe a basso livello come in C, possiamo avvalerci di numerose funzioni per la ricerca, la sostituzione, il padding, la formattazione, l'hashing, la trattazione di HTML...
PHP – Array • La libertà sugli array è totale: possiamo usare qualsiasi tipo di variabile per gli indici, qualsiasi tipo di variabile per i valori, e mescolare i tipi
PHP – Array <?php $arr = array("foo" => "bar", 12 => true); echo $arr["foo"]; // bar echo $arr[12]; // true ?>
PHP - Array • Per eseguire dei cicli sugli elementi di un array, non dobbiamo preoccuparci delle dimensioni, grazie al costrutto foreach, che per ogni elemento dell'array permette di eseguire degli statement • Ad ogni ciclo abbiamo a disposizione l'indice e il valore, in variabili con scope limitato
PHP – Array foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement
PHP – Array • Anche per gli array sono presenti numerose funzioni per eseguire ricerche, sostituzioni, operazioni di tipo insiemistico, e per trattare gli stack
PHP – Funzioni interne • In PHP sono già presenti diverse funzioni per accedere a decine di database, collegarsi a server FTP, elaborare immagini • Il primo livello di espansione del linguaggio è dato da PECL, insieme di librerie scritte in C che spesso vengono incorporate nelle successive release di PHP
PHP - MySQL • In PHP 4 le funzioni per accedere al database MySQL erano incorporate al linguaggio: era ovvio che le persone interessate a PHP erano interessate anche a questa caratteristica • In PHP 5 occorre abilitare il supporto in fase di compilazione o caricare il relativo modulo a runtime, per incompatibilità di licenze
PHP – MySQL • In PHP è stato scritto un ottimo client per MySQL, PHPMyAdmin, che fornisce un'interfaccia grafica per la gestione completa del database • Ovviamente occorre avere un webserver sulla stessa macchina in cui è in esecuzione il servere MySQL
PHP – MySQL - Connessione <?php $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') or die('Could not connect: ' . mysql_error()); echo 'Connected successfully'; mysql_select_db('my_database') or die('Could not select database'); ?>
PHP – MySQL – Query <?php $query = 'SELECT * FROM my_table'; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); ?>
PHP – MySQL – Risultato di query echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n";
PHP – MySQL – Altre funzioni • mysql_affected_rows: restituisce il numero di righe che sono state prese in considerazione nell'ultima query eseguita • mysql_insert_id: restituisce l'ultima chiave generata se abbiamo eseguito una query di inserimento su una tabella che ha l'opzione auto_increment
PHP – Framework • Al giorno d'oggi negli ambienti di produzione è prassi interporre un livello di astrazione tra PHP e il programmatore, cioè un framework • Il framework ufficiale è PEAR. Uno dei più utilizzati è Symphony
PHP – Sicurezza • Occore prestare attenzione agli attacchi di SQL Injection, Form Injection, Variable Injection. • Fondamentale controllare le variabili che arrivano dai form, esposti a tutti
Ajax • Ajax è il nome nuovo introdotto dal web 2.0, ma non si tratta di un nuovo linguaggio di programmazione, piuttosto di una tecnica: • Asynchronous • Javascript • and XML
Ajax • Il Javascript è una vecchia conoscenza del web, introdotta da Netscape ed in seguito adottata da tutti i browser • Spesso i webmaster del Web 1.0 ne abusavano e molti utenti infastiditi da popup e alert lo disattivavano
Ajax • Tuttavia se Javascript viene usato bene può arricchire l'esperienza del navigatore e alleggerire il carico di lavoro del server • Infatti mentre PHP viene interpretato dal server, Javascript viene interpretato dal browser
Ajax • La rivoluzione iniziò quando i sviluppatori di browser iniziarono a includere in Javascript un oggetto capace di effettuare richieste in HTTP al server, in maniera trasparente all'utente • Originariamente tale oggetto era stato pensato per ottenere documenti XML
Ajax function CreateXmlHttpReq(handler) { var xmlhttp = null; try { xmlhttp = new XMLHttpRequest(); } catch(e) { try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } } xmlhttp.onreadystatechange = handler; return xmlhttp; }
Ajax • Una volta ottenuti dei dati XML tramite richiesta PHP, è possibile cambiare certe parti della pagina già caricata utilizzando le capacità di Javascript di modificare gli elementi del DOM • Questo in sintesi è Ajax
Ajax function myHandler() { if (myRequest.readyState == 4 && myRequest.status == 200) { alert(myRequest.responseText); } } function esempio3() { myRequest = CreateXmlHttpReq(myHandler); myRequest.open("GET","primo.php"); myRequest.send(null); }
Ajax • Tuttavia non siamo obbligati a richiedere un documento XML, possiamo richiedere frammenti di HTML, testo semplice • Possiamo richiedere documenti statici ma anche documenti generati da PHP in base a nuove indicazioni fornite dall'utente
Ajax – JSON • JSON è un formato di codifica che permette in un linguaggio di programmazione di trasformare ad esempio un array in una stringa da decodificare in un altro linguaggio • In questo modo possiamo richiedere con Ajax una stringa JSON generata da PHP e convertirla in un array in Javascript
Ajax • Questi esempi di Ajax provengono dal documento ”Spaghetti Ajax” di Salvatore Sanfilippo, uno dei primi italiani a trattare questa tecnologia
Ajax • Ci sono diversi framework Javascript che permettono di astrarre Ajax, come Prototype, e altri che arricchiscono l'interfaccia, come Scriptaculous • Vedere anche mootools e jquery
Problematiche • Latenza della comunicazione • Javascript è interpretato quindi non è veloce • Diversa mentalità di programmazione (asincrona)
WebLogiX • La WebLogiX è una ditta individuale che si occupa di sviluppo di applicazioni web • Tutte le applicazioni si basano su un framework sviluppato in proprio, STOOPHP, che fa uso di programmazione ad oggetti e di Ajax