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.
La piramide del web 2.0
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
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;
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
STOOPHP



Con STOOPHP la progettazione
dell'applicazione è limitata alla progettazione
del database
In base alle relazioni tra le tabelle vengono
creati elenchi e form
Unica condizione: il database deve essere
progettato con DBDesigner
STOOPHP

In questo modo il cliente che ha commissionato
il sito può gestire le sue attività commerciali,
turistiche, divulgative e i contenuti del sito
stesso senza accedere in FTP o al database
STOOPHP


La pagina di gestione è unica e tramite Ajax
viene aggiornata in base alle richieste
dell'utente
I costi di sviluppo sono abbattuti e lo stesso
codice utilizzato da più clienti segnala al
programmatore i bug in maniera trasparente
STOOPHP - Prospettive

Scrivere documentazione per sviluppo e uso

Realizzare un sistema di update attraverso SVN

Ottimizzare le prestazioni
STOOPHP - Prospettive



Studiare in maniera approfondita la sicurezza
Riorganizzare il codice in base all'evoluzione di
PHP
Migliorare la procedura di setup, creando uno
strumento di progettazione database che segua
lo standard creato
Scarica

Lucidi