PHP (acronimo ricorsivo di “PHP: Hypertext Preprocessor”, preprocessore di ipertesti; originariamente acronimo di “Personal Home Page”) è un linguaggio di programmazione interpretato, originariamente concepito per la programmazione di pagine web dinamiche. L’interprete PHP è un software libero distribuito sotto la PHP License.

Attualmente è principalmente utilizzato per sviluppare applicazioni web lato server, ma può essere usato anche per scrivere script a riga di comando o applicazioni stand-alone con interfaccia grafica.

Cenni storici

Nato nel 1994 ad opera del danese Rasmus Lerdorf, PHP era in origine una raccolta di script CGI che permettevano una facile gestione delle pagine personali. Il significato originario dell’acronimo era Personal Home Page (secondo l’annuncio originale di PHP 1.0 da parte dell’autore sul newsgroup comp.infosystems.www.authoring.cg).

Il pacchetto originario venne in seguito esteso e riscritto dallo stesso Lerdorf in C, aggiungendo funzionalità quali il supporto al database mySQL e prese a chiamarsi PHP/FI, dove FI sta per Form Interpreter (interprete di form), prevedendo la possibilità di integrare il codice PHP nel codice HTML in modo da semplificare la realizzazione di pagine dinamiche. In quel periodo, 50.000 domini Internet annunciavano di aver installato PHP.

A questo punto il linguaggio cominciò a godere di una certa popolarità tra i progetti open source del web, e venne così notato da due giovani programmatori: Zeev Suraski e Andi Gutmans. I due collaborarono nel 1998 con Lerdorf allo sviluppo della terza versione di PHP (il cui acronimo assunse il significato attuale) riscrivendone il motore che fu battezzato Zend da una contrazione dei loro nomi. Le caratteristiche chiave della versione PHP 3.0, frutto del loro lavoro, erano la straordinaria estensibilità, la connettività ai database e il supporto iniziale per il paradigma a oggetti. Verso la fine del 1998 PHP 3.0 era installato su circa il 10% dei server web presenti su Internet.

PHP diventò a questo punto talmente maturo da competere con ASP, linguaggio lato server analogo a PHP sviluppato da Microsoft, e cominciò ad essere usato su larga scala. La versione 4 di PHP venne rilasciata nel 2000 e prevedeva notevoli migliorie. Attualmente siamo alla quinta versione, sviluppata da un team di programmatori, che comprende ancora Lerdorf, oltre a Suraski e Gutmans.

La popolarità del linguaggio PHP è in costante crescita grazie alla sua flessibilità: nel giugno 2001, ha superato il milione di siti che lo utilizzano. Nell’ottobre 2002, più del 45% dei server Apache usavano PHP.

Nel gennaio 2005 è stato insignito del titolo di “Programming Language of 2004” dal TIOBE Programming Community Index[5], classifica che valuta la popolarità dei linguaggi di programmazione sulla base di informazioni raccolte dai motori di ricerca.

Nel 2005 la configurazione LAMP (Linux, Apache, MySQL, PHP) supera il 50% del totale dei server sulla rete mondiale.

Nel 2008 PHP 5 è diventata l’unica versione stabile in fase di sviluppo. A partire da PHP 5.3.0, PHP implementa una funzione chiamata “late static binding” che può essere utilizzata per fare riferimento alla classe chiamata in un contesto di eredità statica.

A partire dal 5 febbraio 2008, a causa dell’iniziativa GoPHP5, sostenuta da una serie di sviluppatori PHP, molti dei progetti open-source di alto profilo cessano di supportare PHP 4 nel nuovo codice e promuovono il passaggio da PHP 4 a PHP 5.

Caratteristiche

PHP riprende per molti versi la sintassi del C, come peraltro fanno molti linguaggi moderni, e del Perl. È un linguaggio a tipizzazione debole e dalla versione 5 migliora il supporto al paradigma di programmazione ad oggetti. Certi costrutti derivati dal C, come gli operatori fra bit e la gestione di stringhe come array, permettono in alcuni casi di agire a basso livello; tuttavia è fondamentalmente un linguaggio di alto livello, caratteristica questa rafforzata dall’esistenza delle sue moltissime API, oltre 3.000 funzioni del nucleo base.

PHP è in grado di interfacciarsi a innumerevoli database tra cui MySQL, PostgreSQL, MariaDB, Oracle, Firebird, IBM DB2, Microsoft SQL Server solo per citarne alcuni tra cui anche database NoSql come per esempio MongoDB, e supporta numerose tecnologie, come XML, SOAP, IMAP, FTP, CORBA. Si integra anche con altri linguaggi/piattaforme quali Java e .NET e si può dire che esista un wrapper per ogni libreria esistente, come CURL, GD, Gettext, GMP, Ming, OpenSSL ed altro.

Fornisce un’API specifica per interagire con Apache, nonostante funzioni naturalmente con numerosi altri server web. È anche ottimamente integrato con il database MySQL, per il quale possiede più di una API. Per questo motivo esiste un’enorme quantità di script e librerie in PHP, disponibili liberamente su Internet. La versione 5, comunque, integra al suo interno un piccolo database embedded, SQLite.

Dispone di un archivio chiamato PEAR che mette a disposizione un framework di librerie riusabili per lo sviluppo di applicazioni PHP e di PECL che raccoglie tutte le estensioni conosciute scritte in C.

PHP non ha ancora un supporto nativo per le stringhe Unicode o multibyte; il supporto Unicode è in fase di sviluppo per una futura versione di PHP, e consentirà di usare caratteri non ASCII in stringhe e nomi di funzioni, classi e metodi.

Sicurezza

Da alcune indagini è possibile osservare come la percentuale di software non sicuro scritto in PHP, sul totale di tutte le falle di sicurezza nei software elencate dal Common Vulnerabilities and Exposures, ammontava al: 12% nel 2003, 20% nel 2004, 28% nel 2005, 43% nel 2006, 36% nel 2007, 34.8% nel 2008, 29.9% nel 2009 e 27.2% nel 2010. La quasi totalità di queste vulnerabilità note ha origine da mancati adempimenti delle best practice da parte dei programmatori e relativi abusi di particolari funzionalità offerte dal PHP che in determinati utilizzi danno origine a gravi vulnerabilità. Un esempio noto sono i problemi legati agli abusi di Register globals e Magic quotes, funzionalità che se usate in modo errato potevano degenerare in vere e proprie backdoor all’interno del proprio programma PHP. Per evitare problemi di questo tipo molte di queste funzionalità sono state via via deprecate se non addirittura rimosse nel susseguirsi delle versioni di PHP.

Bisogna comunque osservare che il picco di software con problemi di sicurezza (2006) è associabile temporalmente con precedenti versioni di PHP in cui le configurazioni di default lasciavano spazio a una relativa semplicità nello scrivere software con potenziali problemi di sicurezza anche gravi.

È sempre buona norma rivedere la propria configurazione di PHP (contenuta generalmente nel file php.ini) per rivedere le funzionalità attivate. Di solito nel file stesso si documentano 3 tipi di configurazioni: Configurazione di PHP di default, configurazione in un ambiente di sviluppo (per esempio con la possibilità di vedere a video gli errori), e configurazione in un ambiente di produzione (dove per esempio si deve aprire un file di log per vedere gli errori e non sono mostrati a video).