PHP
| PHP linguaggio di programmazione | |
|---|---|
| Autore | PHP Group |
| Data di origine | 8 giugno 1995 |
| Ultima versione | 8.5.5 (9 aprile 2026) |
| Utilizzo | Applicazioni web lato server |
| Paradigmi | programmazione imperativa, programmazione funzionale, programmazione orientata agli oggetti, programmazione procedurale e riflessione |
| Tipizzazione | Debole |
| Estensioni comuni | php e phar |
| Influenzato da | C++, Perl, C, Java, Tcl, HTML e JavaScript |
| Implementazione di riferimento | |
| Implementazione | Interprete |
| Sistema operativo | Multipiattaforma |
| Licenza | Licenza PHP |
| Sito web | www.php.net |
PHP (acronimo ricorsivo di "PHP: Hypertext Preprocessor", preprocessore di ipertesti; originariamente acronimo di "Personal Home Page"[1]) è un linguaggio di scripting interpretato, originariamente concepito per la programmazione di pagine web dinamiche. L'interprete PHP è un software libero distribuito sotto la licenza PHP[2].
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. Un esempio di software scritto in PHP è MediaWiki, su cui si basano i progetti wiki della Wikimedia Foundation come Wikipedia.
Grazie soprattutto alla diffusione di WordPress[3] (CMS scritto in PHP), secondo le statistiche, è il linguaggio lato server più usato al mondo[4][5][6].
Storia
[modifica | modifica wikitesto]Origini
[modifica | modifica wikitesto]Nato nel 1994 a opera del danese Rasmus Lerdorf, PHP era in origine una raccolta di script Common Gateway Interface (CGI) che permettevano una facile gestione delle pagine personali. Secondo l'annuncio originale di PHP 1.0 da parte dell'autore sul newsgroup comp.infosystems.www.authoring.cgi, il significato originario dell'acronimo era Personal Home Page.[7]
Il pacchetto originario venne in seguito esteso e riscritto dallo stesso Lerdorf in C, aggiungendo funzionalità quali il supporto alla base di dati mSQL, e iniziò 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. Nel 1997 si stimava che circa 50 000 siti web erano basati su PHP.[8]
PHP 3
[modifica | modifica wikitesto]Il linguaggio cominciò a godere di una certa popolarità tra i progetti open source del web e venne così notato da Zeev Suraski e Andi Gutmans, due giovani programmatori. 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à alla base di dati e il supporto iniziale per il paradigma a oggetti[9]. Verso la fine del 1998 PHP 3.0 era installato su circa il 10% dei server web in Internet.
PHP 4
[modifica | modifica wikitesto]PHP diventò a questo punto sufficientemente maturo da competere con i linguaggi lato server come Active Server Pages (ASP), sviluppato da Microsoft, e cominciò a essere usato su larga scala. La versione 4 di PHP venne lanciata nel 2000 e prevedeva notevoli migliorie[10].
La popolarità del linguaggio PHP ha avuto una crescita costante 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 usava PHP[11], nel 2004 è stato uno dei linguaggi principali con cui è stato creato Facebook e nel gennaio 2005 è stato insignito del titolo di "Programming Language of 2004" dal TIOBE Programming Community Index[12], 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) ha superato il 50% del totale dei server sulla rete mondiale.
PHP 5
[modifica | modifica wikitesto]Nel 2008 PHP 5 è diventata l'unica versione stabile in fase di sviluppo. A partire da PHP 5.3.0 il linguaggio implementa una funzione chiamata late static binding che può essere utilizzata per fare riferimento alla classe chiamata in un contesto di eredità statica.[13][14]
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 hanno cessato di supportare PHP 4 nel nuovo codice e hanno promosso il passaggio da PHP 4 a PHP 5.[15] La versione 5 di PHP ha raggiunto la release 5.6 prima di essere abbandonata dal punto di vista dello sviluppo e del supporto nel gennaio 2019.[16]
PHP 7
[modifica | modifica wikitesto]Il 3 dicembre 2015 è stata pubblicata la versione 7, arrivata fino alla versione 7.4.33.[17] Il supporto della versione 7.4 è terminato nel novembre 2022.[18]
PHP 8
[modifica | modifica wikitesto]Il 27 novembre 2020 è stata pubblicata la versione 8.[19] È la prima versione di PHP a supportare la compilazione just-in-time, aumentando di gran lunga le prestazioni.[20]
Caratteristiche
[modifica | modifica wikitesto]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 orientata agli 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 oltre 3 000 funzioni API del nucleo base.
PHP è in grado di interfacciarsi a innumerevoli DBMS tra cui MySQL, PostgreSQL, MariaDB, Oracle, Firebird, IBM DB2, Microsoft SQL Server e anche basi di dati NoSQL come MongoDB. Supporta numerose tecnologie come XML, SOAP, IMAP, FTP, CORBA. Si integra anche con altri linguaggi/piattaforme quali Java e .NET ed esiste un wrapper per tutte le librerie più diffuse come CURL, GD, Gettext, GMP, Ming, OpenSSL e altro.
Fornisce un'API specifica per interagire con Apache, sebbene funzioni naturalmente con numerosi altri server web. È ben integrato senza l'uso di componenti esterni con il DBMS MySQL/MariaDB per il quale possiede più di una API (mysql, mysqli, PDO). A partire dalla versione 5, PHP integra al suo interno una piccola base di dati embedded, SQLite.[21] Per questi motivi esiste un'enorme quantità di script e librerie in PHP disponibili liberamente su Internet.
Dispone di un archivio chiamato PHP Extension and Application Repository (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
[modifica | modifica wikitesto]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[22]. La quasi totalità di queste vulnerabilità note ha origine da mancati adempimenti delle best practice da parte dei programmatori e dai 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, come le due citate, nel susseguirsi delle versioni di PHP[23][24].
La maggior parte del software con problemi di sicurezza (2006) è associabile temporalmente con vecchie 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 controllare 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 che consente per esempio di vedere a video gli errori e configurazione in un ambiente di produzione in cui tipicamente gli errori vengono scritti in un file di log.
Nel sito ufficiale è presente l'archivio storico delle versioni dismesse, aggiornato a novembre 2022.[16]
Attacchi hacker
[modifica | modifica wikitesto]PHP può essere soggetto a diversi attacchi hacker[25]:
- Remote Code Execution (RCE) si verifica quando un utente malintenzionato è in grado di caricare codice sul sito web ed eseguirlo.
- SQL Injection o SQLi: permette agli attaccanti di effettuare attività di spoof identify, modificare dati esistenti, causare repudiation issue come l'annullamento di transazioni o la modifica dei bilanci, permette di ottenere tutti i dati sul sistema, eliminare o rendere inaccessibile dei dati, e creare o compromettere gli utenti del database server.
- Cross-site scripting (XSS) si verifica quando un utente malintenzionato causa il caricamento di codice dannoso nel browser del visitatore del sito web e la sua esecuzione. Questo codice può quindi eseguire azioni dannose come il furto di cookie utente.
- Cross-site request forgery (CSRF): si verifica quando un utente malintenzionato può creare un collegamento e ottenere che un utente con accesso privilegiato lo clicchi per creare (per esempio) un nuovo utente "amministratore" con una password che conosce.
- Iniezione di oggetti PHP. Si verifica quando un'applicazione PHP prende l'input dell'utente e lo passa a una funzione chiamata
unserialize()che prende un oggetto immagazzinato e lo trasforma in un oggetto in memoria. - Remote e Local File Inclusion (RFI e LFI). Quando un'applicazione PHP accetta l'input dell'utente e lo passa a una funzione progettata per caricare un file. Se questo file è un URL, la funzione può caricare codice PHP da un altro sito Web specificato da un utente malintenzionato che verrà quindi eseguito sul sito Web attaccato. Le funzioni che possono essere suscettibili a RFI e LFI in PHP sono:
include,include_once,fopen,file_get_contents,require,require_once.
Esempi di codice
[modifica | modifica wikitesto]Il seguente programma "Hello, World!" è scritto in codice PHP incorporato in un documento HTML:

