Le origini
La chiave per comprendere a fondo ogni cosa è nella conoscenza del percorso che è stato fatto per arrivare al punto in cui si trova adesso. PHP non è differente da questo punto di vista ed ha una lunga storia fatta di scelte importanti, di basi progettuali e cambiamenti in itinere. La storia dello sviluppo web è ancora più lunga e lasciamo che sia il lettore, eventualmente, ad approfondirla.
Agli inizi il codice per analizzare i moduli di input (form) era scritto generalmente in C. Se era vero che veniva eseguito molto rapidamente, era altrettanto vero che risultava molto difficile da usare. Un semplice script per realizzare l'analisi del form poteva facilmente occupare una cinquantina di righe o più. La ragione principale di questa situazione era che il C non era stato progettato per il web e quindi non possedeva del codice già pronto per facilitare le operazioni più comuni costringendo il programmatore a scrivere tutte le funzioni mancanti.
Il protocollo HTTP è un sistema senza stato, il che significa che non salva assolutamente i dati da scambiare tra una pagina e l'altra, e quindi pur con l'aiuto del C il solo fatto di potere scambiare i dati tra le varie pagine costituiva già un grande passo in avanti.
Questo problema è stato risolto in qualche modo da un linguaggio più semplice chiamato PERL (Practical Extraction and Report Language), originariamente inventato come linguaggio di elaborazione di testo generico, è stato impiegato poi per l'analisi dei form HTML e per altre elaborazioni di testo per essere alla portata anche di programmatori meno esperti. Perl è stato dotato di una grande varietà di funzioni progettate per semplificare ogni operazione possibile nello sviluppo web e questo lo ha reso immensamente popolare tra gli sviluppatori, ma nemmeno Perl era nato per per il web ed era ancora lontano dall'essere perfetto. Probabilmente il suo più grande difetto consiste nell'essere PERL-centrico in quanto costringe il programmatore ad incorporare l'HTML all'interno di Perl.
A metà degli anni Novanta il Web era ancora formato in gran parte da pagine statiche, cioè da documenti HTML il cui contenuto non poteva cambiare fino a quando qualcuno non interveniva manualmente a modificarlo. Con l'evoluzione di Internet, però, si cominciò a sentire l'esigenza di rendere dinamici i contenuti, cioè di far sì che la stessa pagina fosse in grado di proporre contenuti diversi, personalizzati in base alle preferenze degli utenti, oppure estratti da una base di dati (database) in continua evoluzione.
PHP viene progettato nel 1994, da Rasmus Lerdorf, come una serie di macro la cui funzione era quella di rendere meno ripetitive le comuni attività web e facilitare ai programmatori l'amministrazione delle homepage personali: da qui trasse origine il suo nome, che allora significava appunto Personal Home Page. In seguito, queste macro furono riscritte ed ampliate fino a comprendere un pacchetto chiamato Form Interpreter (PHP/FI).
L'obiettivo principale era allora quello di ottenere i risultati desiderati con la minima quantità di logica, e questo ha reso il PHP un software HTML-centrico, cioè con il codice PHP incorporato all'interno dell'HTML. Nonostante i suoi difetti e le sue contraddizioni iniziali PHP è riuscito, però, ad attirare subito un certo numero di programmatori. Il problema principale con questa versione era costituito dal parser, scritto in gran parte a mano e con diffusi errori e sviste, assolutamente legato al server web Apache, e non particolarmente brillante per la sua velocità .
NOTA: parser, comunemente tradotto con analizzatore grammaticale, è quel software che prende uno script e lo converte in elementi che il computer possa comprendere. Deriva dal verbo to parse che dovrebbe condensare il significato di rompere un testo in componenti elementari per analizzarli.
Gli sviluppi
Essendo un progetto di tipo open source (a codice aperto), quindi disponibile e modificabile da tutti, ben presto si formò una ricca comunità di sviluppatori che portò alla creazione di PHP 3: la versione del linguaggio che diede il via alla crescita esponenziale della sua popolarità . Tale popolarità era dovuta anche alla forte integrazione di PHP con il Web server Apache (il più diffuso in rete), e con il database MySQL. Tale combinazione di prodotti, integralmente ispirata alla filosofia del free software, diventò ben presto vincente in un mondo in continua evoluzione come quello di Internet.
Molti dei problemi iniziali del PHP sono stati risolti nella versione 3, quando Zeev Suraski e Andi Gutmans lo hanno riscritto da zero utilizzando strumenti e compilatori standard come Flex e Bison. Questo ha reso il parser molto più solido, a prova di proiettile, ed ha ridato serenità ai programmatori vecchi e nuovi. Una nuova caratteristica, molto apprezzata, è stata l'estensibilità del linguaggio che ha consentito agli sviluppatori di scrivere moduli personalizzati con l'aggiunta di funzionalità a livello di base. Il parser, ancora legato ad Apache, era migliorato per la velocità anche se non in maniera vistosa. L'unico aspetto negativo di PHP 3 era la retrocompatibilità con le versioni precedenti, ma il parco utenti non era ancora troppo numeroso ed il colpo fu ben assorbito.
Il miglioramento complessivo determinato da PHP 3 indusse molti utenti a saltare dalla nave PERL al PHP, un sistema che era di gran lunga più facile da usare e da sviluppare, nonostante il vantaggio in termini di velocità mantenuto da PERL.
Alla fine del 1998 erano circa 250.000 i server Web che supportavano PHP: un
anno dopo superavano il milione. I 2 milioni furono toccati in aprile del 2000,
e alla fine dello stesso anno erano addirittura 4.800.000.
Il 2000 è stato sicuramente l'anno di maggiore crescita del PHP, coincisa anche con il rilascio
della versione 4, con un nuovo motore (Zend) molto più veloce
del precedente ed una lunga serie di nuove funzioni, fra cui quelle
importantissime per la gestione delle sessioni. Il nome ZEND risulta dalla contrazione dei nomi dei 2 rifondatori del PHP (ZEev Suraski and aNDi Gutmans), che già avevano provveduto alla riscrittura del PHP 3.
E' stata resa più agevole la retrocompatibilità con la versione 3, e con una completa astrazione del web server
si è garantita la portabilità anche su piattaforme diverse da apache. La velocità , che era il fattore frenante nei confronti di PERL, è stata migliorata con l'introduzione del metodo byte-code.
NOTA: byte-code è il nome con cui vengono identificate le varie parti funzionali dello script codificate dopo una completa compilazione interna che avviene prima dell'esecuzione dello script stesso.
La metodologia è in contrapposizione con quella adottata nella versione 3 che funzionava in maniera interpretata: esecuzione delle singole istruzioni subito dopo la loro interpretazione.
La crescita di PHP, nonostante sia rimasta bloccata fra luglio e ottobre del 2001, è poi proseguita toccando quota 7.300.000 server alla fine del 2001, per superare i 10 milioni alla fine del 2002, quando è stata rilasciata la versione 4.3.0. La continua evoluzione dei linguaggi di programmazione concorrenti e l'incremento notevole dell'utilizzo del linguaggio anche in applicazioni enterprise ha portato la Zend a sviluppare una nuova versione del motore per supportare una struttura ad oggetti molto più rigida e potente.
Nasce così PHP 5, che si propone come innovazione nell'ambito dello sviluppo web open source soprattutto grazie agli strumenti di supporto professionali forniti con la distribuzione standard ed al grande sforzo di Zend che, grazie alla partnership con IBM, sta cercando di spingere sul mercato soluzioni di supporto enterprise a questo ottimo linguaggio. Lo sviluppo di PHP procede comunque con due progetti paralleli che supportano ed evolvono sia la versione 4 sia la versione 5. Questa scelta è stata fatta poichè tuttora sono pochi i fornitori di hosting che hanno deciso di fare il porting dei propri server alla nuova versione del linguaggio.
Oggi PHP è conosciuto come PHP: Hypertext Preprocessor, ed è un linguaggio completo di scripting, sofisticato e flessibile, che può girare praticamente su qualsiasi server Web, su qualsiasi sistema operativo (Windows o Unix/Linux, ma anche Mac, AS/400, Novell, OS/2 e altri), e consente di interagire praticamente con qualsiasi tipo di database (SQLite, MySQL, PostgreSQL, SQL Server, Oracle, SyBase, Access e altri). Si può utilizzare per i più svariati tipi di progetti, dalla semplice home page dinamica fino al grande portale o al sito di e-commerce.
PHP 5 ha portato il linguaggio ad uno stadio di piena maturità , ma i cambiamenti rispetto alla versione precedente non sono stati così drastici come quelli dalla 3 alla 4.
Enormi passi avanti sono stati fatti per gli script orientati agli oggetti: modalità di dichiarazione, costruttori, funzioni disponibili, controllo degli errori.
Al momento della scrittura di questi appunti la versione stabile di PHP porta il numero 5.6.3
Lato client e lato server
Parlando di PHP e di altri linguaggi di scripting può capitare di sentir
citare le espressioni lato client e lato server, proviamo a chiarire
questi concetti esaminando come funziona, in maniera estremamente semplificata, la
richiesta di una pagina Web. L'utente apre il suo browser e digita un indirizzo
Internet, ad esempio www.miosito.it/pag1.html
, a questo punto
il browser si collega al server www.miosito.it
e gli chiede la
pagina pag1.html
. Tale pagina contiene esclusivamente codice
HTML: il server la prende e la spedisce al browser, così com'è (insieme ad
eventuali file allegati, ad esempio immagini). Il nostro utente quindi avrà la
possibilità di visualizzare questa pagina.
Supponiamo ora che l'utente richieda invece la pagina
pag2.php
che, a differenza della prima, contiene codice HTML e codice PHP. In questo caso il server, prima di spedire la pagina,
esegue il codice PHP, che in genere produce ulteriore codice HTML. Dopo l'esecuzione, la nuova pagina generata non conterrà più codice PHP, ma solo
codice HTML, e così confezionata verrà spedita al browser. Il file originale, invece, rimane disponibile per le prossime
richieste. Quindi l'utente vede solo il codice HTML, e non ha accesso al codice
PHP che ha generato la pagina.
Per comprendere ancora meglio questo concetto, confrontiamo PHP con un altro linguaggio di scripting molto diffuso sul Web, cioè JavaScript, che di solito viene usato come linguaggio lato client: JavaScript infatti viene eseguito non dal server, ma dal browser dell'utente (il client, appunto). JavaScript ci consente di eseguire operazioni che riguardano il sistema dell'utente, come ad esempio aprire una nuova finestra del browser, o controllare la compilazione di un modulo segnalando eventuali errori prima che i dati vengano spediti al server. Ci permette anche di avere un'interazione con l'utente: ad esempio, possiamo far sì che quando il mouse passa su una determinata immagine, tale immagine si modifichi.
Per svolgere tutti questi compiti, JavaScript deve essere eseguito sul sistema dell'utente e per questo il codice JavaScript viene spedito al browser insieme al codice HTML. Quindi l'utente ha la possibilità di visualizzarlo, contrariamente a ciò che accade con PHP.
Abbiamo citato alcune utili funzioni svolte da JavaScript sul browser dell'utente: PHP, essendo eseguito sul server, non è in grado di svolgere direttamente queste funzioni. Ma attenzione: questo non significa che non sia in grado ugualmente di controllarle! Infatti PHP svolge principalmente la funzione di 'creare' il codice della pagina che viene spedita all'utente: di conseguenza, così come può creare codice HTML, allo stesso modo può creare codice JavaScript. Questo significa che PHP ci può permettere, ad esempio, di decidere se ad un utente dobbiamo spedire il codice JavaScript che apre una nuova finestra, oppure no. In pratica, quindi, lavorando sul lato server abbiamo il controllo anche del lato client.
Rimane un ultimo dettaglio da svelare: come fa il server a sapere quando
una pagina contiene codice PHP che deve essere eseguito prima dell'invio al
browser? Semplice: si basa sull'estensione delle pagine richieste.
Nell'esempio che abbiamo visto prima, pag1 aveva l'estensione
.html
, mentre pag2 aveva l'estensione .php
. Sulla base di questo, il
server sa che nel secondo caso deve eseguire PHP, mentre nel primo può spedire
il file così com'è. In realtà il server deve essere istruito per poter fare ciò:
generalmente gli si dice di eseguire PHP per le pagine che hanno estensione
.php
. È possibile comunque assegnargli qualsiasi altra estensione
(fino a qualche anno fa venivano utilizzate .phtml
e .php3
, anche se ormai la
pratica è caduta in disuso). Si possono utilizzare anche le estensioni standard
.htm
e .html
, ma ciò significherebbe chiamare PHP per
tutte le pagine richieste, anche se non contengono codice PHP: questo
rallenterebbe inutilmente il lavoro del server e dunque è meglio evitarlo.
Pregi e caratteristiche di PHP
Dopo quanto detto in precedenza va precisato, tuttavia, che PHP non è l'unico linguaggio lato server disponibile per chi si appresta a sviluppare pagine web. Sono disponibili varie alternative, sia proprietarie sia open source, ed ognuna di queste ha i suoi pregi ed i suoi difetti. Dato che il paragone tra due linguaggi di programmazione di buon livello è spesso soggettivo, in questa sede ci occupiamo di descrivere in modo semplice le caratteristiche di PHP ed i vantaggi che queste possono portare allo sviluppatore, lasciando al lettore l'eventuale compito di confrontarlo con altri strumenti.
La versione di PHP su cui si basa questa guida (la 5.6.3) implementa soluzioni avanzate che permettono un controllo completo sulle operazioni che possono essere svolte dal nostro server web. L'accesso ai cookie ed alle sessioni è molto semplice ed intuitivo, avvenendo attraverso semplici variabili (vedi paragrafo relativo) che possono essere usate da qualunque posizione all'interno del codice.
PHP ha una lunga storia legata esclusivamente al web, e per questo motivo esistono moltissime librerie testate e complete per svolgere i compiti più diversi: abbiamo strumenti per la gestione di template, librerie che permettono la gestione completa di un mail server, sia in invio sia in ricezione e molto altro ancora. A supporto di tutto questo bisogna dire che il modulo per eseguire script PHP è ormai installato di default sui server di hosting, e che la comunità di sviluppatori risolve molto velocemente i bug che si presentano agli utenti.
A supporto di PHP, sia Zend sia la comunità php.net, hanno associato una serie di strumenti molto utili:
Il repository PEAR (http://pear.php.net) che contiene decine di classi ben organizzate e documentate per svolgere la maggior parte delle operazioni ad alto e basso livello richieste durante lo sviluppo di applicazioni web. Tra queste ricordiamo il layer di astrazione per l'accesso ai database, le classi per il debugging ed il logging, quelle per la generazione di grafici avanzati e quelle per la gestione di template.
Il repository PECL (http://pecl.php.net/packages.php) che contiene molte estensioni native che estendono le potenzialità del linguaggio con funzionalità di basso livello ad alte prestazioni. Abbiamo sistemi di cache ed ottimizzazione del codice intermedio generato durante l'esecuzione di script PHP, sistemi per il debugging avanzato ed il profiling del codice e molto altro.
Il template engine Smarty (http://smarty.php.net), uno dei più robusti ed utilizzati template engine per PHP in circolazione.
A tutto questo va aggiunto che la fusione di Zend con IBM sta portando allo sviluppo di strumenti di supporto professionali per gli sviluppatori, quali Zend Studio 5.0, Zend Safe Guard ed altri strumenti che coprono perfettamente tutto il processo di sviluppo e mantenimento del software.
In conclusione: PHP è un ottimo linguaggio, leader tra quelli open source per lo sviluppo web, molto semplice da imparare e subito produttivo. Oltretutto ha una serie di strumenti di appoggio molto completi e con la versione 5 un robusto supporto per la programmazione ad oggetti. Anche se con qualche difetto, si tratta di una scelta più che adeguata per un gran numero di situazioni.
PHP è un linguaggio la cui funzione fondamentale è quella di produrre codice HTML, che è quello dal quale sono formate le pagine web. Ma, poichè PHP è un linguaggio di programmazione, abbiamo la possibilità di analizzare diverse situazioni (l'input degli utenti, i dati contenuti in un database) e di decidere, di conseguenza, di produrre codice HTML condizionato ai risultati dell'elaborazione. Questo è, in parole povere, il Web dinamico. Come abbiamo visto precedentemente, quando il server riceve una richiesta per una pagina PHP, la fa analizzare dall'interprete del linguaggio, il quale restituisce un file contenente solo il codice che deve essere inviato al browser (in linea di massima HTML, ma può esserci anche codice JavaScript, fogli di stile CSS o qualunque altro contenuto fruibile da un browser, come immagini e documenti Pdf).
Bisogna vivere come si pensa, altrimenti si finirà per pensare come si è vissuto.
Paul Bourget