PHP: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
 
(604 versioni intermedie di oltre 100 utenti non mostrate)
Riga 1:
{{nota disambigua}}
{{nota disambigua|altre voci che possono riferirsi alla stessa combinazione di 3 caratteri|[[PHP (disambigua)|PHP]]}}
{{NN|informatica|settembre 2017|}}{{Linguaggio di programmazione
{{Infobox Software
|nome = PHP
|sviluppatoreimmagine = The PHP Group-logo.svg
|autore = PHP Group
|versione_ultimo_rilascio = 5.2.9
|data =
|data_ultimo_rilascio = [[26 febbraio]] [[2009]]
|versione =
|utilizzo = Applicazioni web lato server
|paradigmi =
|tipizzazione = Debole
|specifiche =
|influenzato_da =
|ha_influenzato =
|implementazione_riferimento = Interprete
|sistema_operativo = [[Multipiattaforma]]
|lingua =
|genere = [[Linguaggio di scripting]]
|licenza = [http://www.php.net/license/3_01.txt PHP License 3.01]
|sito_web = http://www.php.net
}}
'''PHP''' ([[acronimo ricorsivo]] di "PHP: Hypertext Preprocessor", [[preprocessore]] di [[ipertesti]]); èoriginariamente un [[Linguaggioacronimo di programmazione#Linguaggi"Personal di[[Home scriptingpage|linguaggioHome di scriptingPage]]"<ref>{{cita interpretato,web|url=http://it.php.net/history|titolo=History conof licenzaPHP [[openand source]]related eprojects|autore=The parzialmentePHP liberaGroup|accesso=26 (maaprile incompatibile2011|urlarchivio=https://web.archive.org/web/20210128131412/https://www.php.net/history|urlmorto=no}}</ref>) conè laun [[GPLlinguaggio di scripting]] [[interprete (informatica)|interpretato]], originariamente concepito per la realizzazioneprogrammazione di [[pagine web dinamiche]]. AttualmenteL'interprete PHP è utilizzato principalmente per sviluppareun [[Applicazionesoftware web|applicazioni weblibero]] [[latodistribuito server]]sotto ma può essere usato anche per scriverela [[scriptlicenza PHP]]<ref>{{Cita a [[Interfaccia a linea di comandoweb|lineaurl=https://www.php.net/license/index.php|titolo=PHP: diLicense comando]] o applicazioni [[Stand-aloneInformation|standalone]]accesso=28 confebbraio [[interfaccia grafica]]2020}}</ref>.
 
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 (informatica)|stand-alone]]'' con [[interfaccia grafica]]. Un esempio di software scritto in phpPHP è [[MediaWiki]], su cui si basano i progetti [[wiki]] comedella [[WikipediaWikimedia Foundation]] ecome [[WikizionarioWikipedia]].
 
Grazie soprattutto alla diffusione di [[WordPress]]<ref>{{Cita web|url=https://trends.builtwith.com/cms/WordPress|titolo=WordPress Usage Statistics|sito=trends.builtwith.com|accesso=30 gennaio 2021}}</ref> ([[Content management system|CMS]] scritto in PHP), secondo le statistiche, è il linguaggio lato server più usato al mondo<ref>{{Cita web|url=https://www.statista.com/statistics/793628/worldwide-developer-survey-most-used-languages/|titolo=Most used languages among software developers globally 2020|sito=Statista|lingua=en|accesso=30 gennaio 2021}}</ref><ref>{{Cita web|url=https://w3techs.com/technologies/overview/programming_language|titolo=Usage Statistics and Market Share of Server-side Programming Languages for Websites, January 2021|sito=w3techs.com|lingua=en|accesso=30 gennaio 2021}}</ref><ref>{{Cita web|url=https://www.ionos.it/digitalguide/hosting/cms/cms-a-confronto/|titolo=Confronto tra CMS nel 2021: i sistemi più popolari per la gestione dei contenuti|sito=IONOS Digitalguide|lingua=it|accesso=30 gennaio 2021}}</ref>.
== Cenni storici ==
 
== Storia ==
Nato nel [[1994]] ad 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. Il significato originario dell'[[acronimo]] era '''''P'''ersonal '''H'''ome '''P'''age'' (secondo l'annuncio originale di PHP 1.0 da parte dell'autore sul newsgroup comp.infosystems.www.authoring.cgi <ref>{{cita web|titolo=Announce: Personal Home Page Tools (PHP Tools)|url=http://groups.google.ch/group/comp.infosystems.www.authoring.cgi/msg/cc7d43454d64d133?oe=UTF-8&output=gplain|data=1995-06-08}}</ref> ).
{{Immagine multipla
Il pacchetto originario venne in seguito esteso e riscritto dallo stesso Lerdorf in [[C (linguaggio)|C]], aggiungendo funzionalità quali il supporto al database [[mSQL]] e prese a chiamarsi '''PHP/FI''', dove ''FI'' sta per '''''F'''orm '''I'''nterpreter'' (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.
|larghezza totale = 400
|immagine1 = Rasmus Lerdorf cropped.jpg
|immagine2 = Andi Gutmans 1.jpg
|immagine3 = Zeev Suraski 2005 cropped.jpg
|sotto = Rasmus Lerdorf, creatore di PHP e Andi Gutmans e Zeev Suraski, creatori dello Zend Engine, l'interprete standard del linguaggio
}}
=== Origini ===
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]] <code>comp.infosystems.www.authoring.cgi</code>, il significato originario dell'[[acronimo]] era ''Personal Home Page''.<ref>{{cita web|url=https://groups.google.ch/group/comp.infosystems.www.authoring.cgi/msg/cc7d43454d64d133?oe=UTF-8&output=gplain|titolo=Announce: Personal Home Page Tools (PHP Tools)|data=8 giugno 1995|lingua=en|accesso=6 luglio 2011|dataarchivio=22 dicembre 2008|urlarchivio=https://web.archive.org/web/20081222095125/http://groups.google.ch/group/comp.infosystems.www.authoring.cgi/msg/cc7d43454d64d133?oe=UTF-8&output=gplain|urlmorto=sì}}</ref>
 
Il pacchetto originario venne in seguito esteso e riscritto dallo stesso Lerdorf in [[C (linguaggio di programmazione)|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 {{Formatnum:50000}} siti web erano basati su PHP.<ref>{{Cita libro|nome=Ellie|cognome=Quigley|nome2=Marko|cognome2=Gargenta|titolo=PHP and MySQL by Example|url=https://books.google.it/books?id=mPzUH1EPEJkC&pg=PA4&lpg=PA4&dq=php+in+50000+web+sites&source=bl&ots=RXsNXbr7TO&sig=ACfU3U1vKzW3_43YWWjGswtci5vDPRuDPA&hl=it&sa=X&ved=2ahUKEwjlpomhgPPnAhVixaYKHbXzCesQ6AEwAHoECAUQAQ#v=onepage&q=php%20in%2050000%20web%20sites&f=false|accesso=28 febbraio 2020|data=22 novembre 2006|editore=Prentice Hall Professional|lingua=en|ISBN=978-0-13-800602-0}}</ref>
 
=== PHP 3 ===
Il linguaggio cominciò a godere di una certa popolarità tra i progetti ''open source'' del [[World Wide Web|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 [[Programmazione orientata agli oggetti|paradigma a oggetti]]<ref>{{Cita web|url=https://www.php.net/manual/php3.php|titolo=PHP Version 3 Documentation|lingua=en|accesso=28 febbraio 2020}}</ref>. Verso la fine del 1998 PHP 3.0 era installato su circa il {{M|10|ul=%}} dei [[server web]] in Internet.
 
=== PHP 4 ===
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<ref>{{Cita web|url=https://www.ntchosting.com/encyclopedia/scripting-and-programming/php/php4/|titolo=PHP 4 - features|lingua=en|accesso=28 febbraio 2020}}</ref>.
 
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 {{M|45|u=%}} dei [[server]] [[Apache HTTP Server|Apache]] usava PHP<ref>{{Cita web|url=https://w3techs.com/technologies/details/pl-php|titolo=Usage Statistics and Market Share of PHP for Websites, February 2020|sito=w3techs.com|lingua=en|accesso=28 febbraio 2020}}</ref>, 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]]<ref>{{cita web|url=https://www.tiobe.com/tiobe-index/|titolo=TIOBE Software Award|lingua=en|accesso=12 dicembre 2022}}</ref>, classifica che valuta la popolarità dei [[Linguaggio di programmazione|linguaggi di programmazione]] sulla base di informazioni raccolte dai [[Motore di ricerca|motori di ricerca]].
 
Nel 2005 la configurazione [[LAMP]] ([[Linux]], [[Apache HTTP Server|Apache]], [[MySQL]], PHP) ha superato il {{M|50|u=%}} del totale dei server sulla rete mondiale.
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 [[Programmazione orientata agli oggetti|paradigma a oggetti]]. Verso la fine del 1998 PHP 3.0 era installato su circa il 10% dei server web presenti su Internet.
 
=== PHP 5 ===
PHP diventò a questo punto talmente maturo da competere con [[Active Server Pages|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.
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.<ref>{{Cita web|url=https://www.php.net/ChangeLog-5.php#5.3.0|titolo=PHP 5 ChangeLog § 5.3.0|lingua=en|accesso=2022-01-12}}</ref><ref>{{Cita web|url=https://www.php.net/manual/en/language.oop5.late-static-bindings.php|titolo=PHP: Late Static Bindings - Manual|lingua=en|accesso=2022-01-12}}</ref>
Attualmente siamo alla quinta versione, sviluppata da un [http://www.php.net/credits.php team] di programmatori, che comprende ancora Lerdorf, oltre a Suraski e Gutmans.
 
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.<ref>{{Cita web|url=https://pear.php.net/gophp5.php|titolo=GOPHP5!|sito=pear.php.net|lingua=en|accesso=26 settembre 2017}}</ref> 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.<ref name=":0">{{Cita web|url=https://www.php.net/eol.php|titolo=PHP: Unsupported Branches|sito=www.php.net|lingua=en|accesso=2022-12-12}}</ref>
La popolarità del linguaggio PHP è in costante crescita grazie alla sua flessibilità: nel [[Giugno]] [[2001]], ha superato il milione di [http://www.php.net/usage.php siti che lo utilizzano].
Nell'ottobre [[2002]], [http://www.securityspace.com/s_survey/data/man.200210/apachemods.html più del 45%] dei [[server]] [[Apache HTTP Server|Apache]] usavano PHP.
 
=== PHP 7 ===
Nel gennaio [[2005]] è stato insignito del titolo di "Programming Language of 2004" dal [[TIOBE Programming Community Index]], classifica che valuta la popolarità dei linguaggi di programmazione sulla base di informazioni raccolte dai [[Motore di ricerca|motori di ricerca]].
Il 3 dicembre 2015 è stata pubblicata la versione 7, arrivata fino alla versione 7.4.33.<ref>{{Cita web|url=https://www.php.net/ChangeLog-7.php|titolo=PHP 7 ChangeLog|lingua=en|accesso=28 febbraio 2020}}</ref> Il supporto della versione 7.4 è terminato nel novembre 2022.<ref>{{Cita web|url=https://www.php.net/supported-versions.php|titolo=PHP: Supported Versions|sito=www.php.net|lingua=en|accesso=2022-12-12}}</ref>
 
=== PHP 8 ===
Nel [[2005]] la configurazione [[LAMP (piattaforma)|LAMP]] ([[Linux]], [[Apache HTTP Server|Apache]], [[MySQL]], PHP) supera il 50% del totale dei server sulla rete mondiale.
Il 27 novembre 2020 è stata pubblicata la versione 8.<ref>{{Cita web|url=https://www.php.net/ChangeLog-8.php|titolo=PHP 8 ChangeLog|accesso=2022-01-12}}</ref> È la prima versione di PHP a supportare la [[Compilatore just-in-time|compilazione just-in-time]], aumentando di gran lunga le prestazioni.<ref>{{Cita web|url=https://stitcher.io/blog/jit-in-real-life-web-applications|titolo=PHP 8: JIT performance in real-life web applications|sito=stitcher.io|data=2 luglio 2020|lingua=en|accesso=2022-12-12}}</ref>
 
== Caratteristiche ==
PHP riprende per molti versi la [[sintassi]] del [[C (linguaggio)|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 (informatica)|bit]] e la gestione di [[Stringa (informatica)|stringhe]] come [[array]], permettono in alcuni casi di agire a basso livello; tuttavia è fondamentalmente un [[Linguaggio di programmazione ad alto livello|linguaggio di alto livello]], caratteristica questa rafforzata dall'esistenza delle sue oltre {{Formatnum:3000}} [[Funzione (informatica)|funzioni]] [[Application programming interface|API]] del nucleo base.
 
PHP riprende per molti versi la [[sintassi]] del [[C (linguaggio)|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|programmazione ad oggetti]]. Certi costrutti derivati dal [[C (linguaggio)|C]], come gli operatori fra [[Bit (informatica)|bit]] e la gestione di [[Stringa (informatica)|stringhe]] come [[array]], permettono in alcuni casi di agire a basso livello; tuttavia è fondamentalmente un [[Linguaggio di programmazione ad alto livello|linguaggio di alto livello]], caratteristica questa rafforzata dall'esistenza delle sue moltissime [[Application programming interface|API]], oltre 3000 funzioni del nucleo base. PHP è in grado di interfacciarsi a innumerevoli [[DBMS|database]] tra cui [[MySQL]], [[PostgreSQL]], [[MariaDB]], [[Oracle Database|Oracle]], [[Firebird SQL|Firebird]], [[DB2|IBM DB2]], [[Microsoft SQL Server]], soloe peranche citarnebasi alcuni,di edati supporta[[NoSQL]] come [[MongoDB]]. Supporta numerose tecnologie, come [[XML]], [[SOAP]], [[Internet Message Access Protocol|IMAP]], [[File Transfer Protocol|FTP]], [[CORBA]]. Si integra anche con altri linguaggi/piattaforme quali [[Linguaggio di programmazione Java|Java]] e [[.NET]] eed si può dire che esistaesiste un ''[[wrapper]]'' per ognitutte libreriale esistente,librerie più diffuse come [[CURL]], [[GD Graphics Library|GD]], [[Gettext]], GMP, Ming, [[OpenSSL]] ede altro.
 
Fornisce un'[[Application programming interface|API]] specifica per interagire con [[Apache HTTP Server|Apache]], nonostantesebbene funzioni naturalmente con numerosi altri [[Web server|server web]]. È anche ottimamenteben integrato senza l'uso di componenti esterni con il databaseDBMS [[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'', [[APISQLite]].<ref>{{Cita web|url=https://www.php.net/ChangeLog-5.php#5.0.0b1|titolo=PHP 5 ChangeLog § Version 5.0.0 Beta 1|lingua=en|accesso=2022-01-12}}</ref> Per questoquesti motivomotivi esiste un'enorme quantità di [[script]] e [[Libreria software|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 [[PEARPHP Extension and Application Repository]] (PEAR) che mette a disposizione un ''[[framework]]'' di [[Libreria software|librerie]] riusabili per lo sviluppo di applicazioni PHP e di [http://pecl.php.net 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 ==
La percentuale di software non sicuro scritto in PHP, sul totale di tutte le falle 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 e 33,8% nel primo trimestre del 2008<ref>{{cita web|titolo=PHP-related vulnerabilities on the National Vulnerability Database|url=http://www.coelho.net/php_cve.html|data=2008-03-01}}</ref>. La maggior parte di questi punti vulnerabili possono essere sfruttati tramite remoto, ovvero senza accedere al computer che ospita l'applicazione vulnerabile. Le falle più comuni sono dovute al mancato adempimento delle [[best practice]] nella programmazione e da vulnerabilità presenti in codice scritto in versioni vecchie di PHP.
 
=== Sicurezza ===
== Gestione dei parametri ==
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: {{M|12|u=%}} nel 2003, {{M|20|u=%}} nel 2004, {{M|28|u=%}} nel 2005, {{M|43|u=%}} nel 2006, {{M|36|u=%}} nel 2007, {{M|34,8|u=%}} nel 2008, {{M|29,9|u=%}} nel 2009 e {{M|27,2|u=%}} nel 2010<ref>{{cita web|url=http://www.coelho.net/php_cve.html|titolo=PHP-related vulnerabilities on the National Vulnerability Database|lingua=en|accesso=6 luglio 2011|dataarchivio=28 giugno 2009|urlarchivio=https://web.archive.org/web/20090628173101/http://www.coelho.net/php_cve.html|urlmorto=sì}}</ref>. 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<ref>{{Cita web|url=http://php.net/manual/en/security.globals.php|titolo=Using Register Globals|lingua=en|urlarchivio=https://web.archive.org/web/20160602035242/http://php.net/manual/en/security.globals.php|dataarchivio=2 giugno 2016|urlmorto=sì}}</ref><ref>{{Cita web|url=http://php.net/manual/en/security.magicquotes.php|titolo=Magic Quotes|lingua=en|urlarchivio=https://web.archive.org/web/20160602035244/http://php.net/manual/en/security.magicquotes.php|dataarchivio=2 giugno 2016|urlmorto=sì}}</ref>.
Il PHP permette il passaggio di parametri da una pagina all'altra attraverso tre [[array]] di variabili: $_GET, $_POST e $_SESSION. Il primo tipo di parametro viene passato tramite la stringa che compare nella barra dell'indirizzo del [[browser]]; il secondo viene passato in background, mentre il terzo rimane persistente durante la [[sessione]].
 
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 integrato|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 [[Release (informatica)|versioni]] dismesse, aggiornato a novembre 2022.<ref name=":0" />
 
==== Attacchi hacker ====
PHP può essere soggetto a diversi [[Attacco informatico|attacchi hacker]]<ref>{{Cita web|url=https://www.wordfence.com/learn/understanding-php-vulnerabilities/|titolo=What are PHP Vulnerabilities & How Do They Originate?|cognome=|sito=Wordfence|lingua=en|accesso=28 gennaio 2021|urlarchivio=https://web.archive.org/web/20210129160545/https://www.wordfence.com/learn/understanding-php-vulnerabilities/|urlmorto=no}}</ref>:
 
* ''Remote Code Execution'' (RCE) si verifica quando un utente malintenzionato è in grado di caricare codice sul sito web ed eseguirlo.
* [[SQL injection|SQL Injection]] o SQLi: permette agli attaccanti di effettuare attività di ''[[IP spoofing|spoof identify]]'', modificare dati esistenti, causare ''repudiation issue'' come l'annullamento di [[Transazione (basi di dati)|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 <code>unserialize()</code> 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: {{Codice|codice=include|linguaggio=PHP}}'','' {{Codice|codice=include_once|linguaggio=PHP}}'','' {{Codice|codice=fopen|linguaggio=PHP}}'','' {{Codice|codice=file_get_contents|linguaggio=PHP}}'','' {{Codice|codice=require|linguaggio=PHP}}'','' {{Codice|codice=require_once|linguaggio=PHP}}.
 
== Esempi di codice ==
{{Organizzare|Stile manualistico. Va bene qualche breve esempio, ma meglio non duplicare la corrispettiva voce su Wikiversità|informatica|luglio 2023}}
=== Utilizzo delle variabili ===
 
Il seguente programma "[[Hello, World!]]" è scritto in codice PHP incorporato in un documento [[HTML]]:
<source lang=php>
$title = "Wikipedia";
</source>
Con questa istruzione viene definita una variabile e le viene assegnato il valore "Wikipedia".
 
<syntaxhighlight lang="html+php" highlight="7-9" line="1">
Ogni volta che nella pagina scriveremo così:
<!DOCTYPE html>
<source lang=php>echo $title;</source>
<html>
anziché la scritta $title all’utente apparirà la scritta “Wikipedia”.
<head>
<title>PHP "Hello, World!" program</title>
</head>
<body>
<?php
echo '<p>Hello, World!</p>';
?>
</body>
</html>
</syntaxhighlight>
 
=== Variabili ===
Se però scriviamo <code>echo $title;</code> in un'altra pagina (es.prova.php) che non sia il file originale (ad esempio file.php) non apparirà la scritta “Wikipedia” poiché la variabile $title non sarà definita, a meno che non includiamo in quest’altra pagina il file title.php in questo modo:
I nomi di variabili in PHP iniziano sempre con il simbolo del dollaro (<code>$</code>) e il carattere successivo non deve essere un numero, per esempio <code>$1</code> o <code>$2</code> non sono nomi di variabili valide.
 
I nomi delle variabili sono [[Sensibile alle maiuscole|case-sensitive]], ovvero <code>$ancora</code> e <code>$ANCORA</code> sono due variabili distinte.
<source lang=php>
require 'title.php';
</source>
 
Una variabile può contenere tutti i caratteri <code>A-Z</code> , <code>a-z</code> , <code>0-9</code> e <code>_</code>. Una volta definite esse vengono istanziate senza definirne esplicitamente il "tipo":
=== [[Hello world|Hello, world!]] ===
Il seguente esempio stampa il testo "[[Hello world]]" (vedi ''[http://php.net/manual/it/language.basic-syntax.php Sintassi fondamentale]'' del manuale di PHP).
<source lang="php">
<?php
echo "Hello world";
?>
</source>
Oppure, in forma breve
<source lang="php">
<?="Hello world"?>
</source>
Oppure ancora, usando le ''variabili''.
<source lang="php">
<?php
$var = "Hello World!";
echo $var; // Oppure print $var;
?>
</source>
 
<syntaxhighlight lang="php">$ciao = "Ciao mondo!";</syntaxhighlight>
=== Una semplice funzione con controllo sugli argomenti ===
<source lang="php">
<?php
function get_hello_world($value1, $value2)
{
$result = "";
if ($value1 != "") {
$result .= $value1;
}
 
Per mostrare il contenuto di <code>$ciao</code>, è possibile usare l'istruzione {{Codice|codice=echo|linguaggio=PHP}}:
// .= è un operatore di concatenazione;
// Il "." (punto) deriva dall'operazione di concatenzione delle stringhe nella teoria dei linguaggi;
 
<syntaxhighlight lang="php">echo $ciao;</syntaxhighlight>
if (($value1 != "") && ($value2 != "")) {
 
$result .= " ";
che visualizza <code>Ciao mondo!</code>. Se invece la variabile <code>$ciao</code> non esistesse generalmente {{Codice|codice=echo|linguaggio=PHP}} genererebbe un errore non fatale (<code>Notice</code>).
}
 
==== Stringhe ====
if ($value2 != "") {
In PHP una [[Stringa (informatica)|stringa]] di caratteri alfanumerici si rappresenta in due modi: racchiudendola tra apici doppi ({{Codice|codice="|linguaggio=PHP}}) o singoli (<code>'</code>). Quando si usano gli apici doppi vengono interpretati eventuali caratteri speciali (per esempio la tabulazione, {{Codice|codice="col1\tcol2"|linguaggio=PHP}} o il carattere di fine riga, {{Codice|codice="riga1\nriga2"|linguaggio=PHP}}) e viene restituito il contenuto delle variabili, ovvero:
$result .= $value2;
<syntaxhighlight lang="php">echo "Ciao vale: $ciao";</syntaxhighlight>
}
Stampa: <code>Ciao vale: Ciao mondo!</code>. Con gli apici singoli la stringa è salvata e utilizzata così com'è.
 
return $result;
Esempio di composizione della frase "Wikipedia è meravigliosa" in due modi: usando gli apici singoli e doppi:
}
 
<syntaxhighlight lang="php" line="1">
echo get_hello_world("Hello", "world");
<?php
?>
$uno = 'Wikipedia';
</source>
$due = 'è';
$tre = 'meravigliosa';
 
echo $uno . ' ' . $due . ' ' . $tre;
echo "$uno $due $tre";
</syntaxhighlight>
 
==== Array (e foreach) ====
PHP gestisce gli [[array]] come delle [[Array associativo|mappe associative]], ossia come un elenco di chiavi associate univocamente a un certo valore. Gli array in PHP possono perciò essere usati come una comune matrice, come una lista (vettore), uno stack, una coda o altro. Inoltre un qualsiasi elemento dell'array può a sua volta contenere altri array, anche multidimensionali<ref name="PHP-manuale-array">{{Cita web |url=http://it2.php.net/manual/it/language.types.array.php |titolo=Manuale PHP - array |accesso=14 marzo 2018 |urlarchivio=https://web.archive.org/web/20180315003659/http://it2.php.net/manual/it/language.types.array.php |urlmorto=sì }}</ref> e tutti gli elementi dell'array o dei sotto-array possono essere fra loro di tipi di variabile diversi, dando così la possibilità di creare [[Struttura dati|strutture dati]] complesse.
 
Gli array sono dinamici, infatti possono essere rimossi tramite <code>unset();</code><ref>{{Cita web|url=https://www.php.net/manual/en/function.unset.php|titolo=PHP: unset - Manual|accesso=17 ottobre 2020}}</ref>.
 
Dato che gli array in PHP sono associativi, possono essere usati tramite un costrutto chiamato {{Codice|codice=foreach|linguaggio=PHP}}<ref>{{Cita web|url=https://www.php.net/manual/en/control-structures.foreach.php|titolo=PHP: foreach - Manual|accesso=17 ottobre 2020}}</ref> che rende praticabile l'accesso ai contenuti ricavando tutte le singole associazioni di chiave-valore dell'array.
 
Codice d'esempio di un array associativo in cui a ogni nome di città corrisponde il numero di abitanti. L'esempio visualizza a video ogni città con il suo numero di abitanti e poi la somma di tutti gli abitanti.
 
<syntaxhighlight lang="php" line="1">
<?php
$residenti = [
'Torino' => 908551,
'Milano' => 1315791,
'Roma' => 2753000
];
 
$somma = 0;
 
foreach ($residenti as $città => $nResidenti) {
echo "La città $città ha $nResidenti abitanti";
$somma += $nResidenti;
}
 
echo "In tutto ci sono $somma abitanti!";
</syntaxhighlight>
L'output del codice è: <code>La città Torino ha {{formatnum:908551}} abitanti. La città Milano ha {{formatnum:1315791}} abitanti. La città Roma ha {{formatnum:2753000}} abitanti. In tutto ci sono {{formatnum:4977342}} abitanti</code>
 
Per approfondimenti vedere la documentazione ufficiale online<ref name="PHP-manuale-array" />.
 
=== Funzioni ===
Le funzioni in PHP possono avere un insieme misto di parametri opzionali con valori predefiniti e parametri obbligatori.<ref>{{Cita web|url=https://www.hashbangcode.com/article/default-function-parameters-php|titolo=Default Function Parameters In PHP {{!}} #! code|accesso=17 ottobre 2020}}</ref>
 
Esempio di funzione con un parametro obbligatorio e uno opzionale con valore predefinito.
 
<syntaxhighlight lang="php" line="1">
<?php
/**
* Programma che effettui
* la somma di minimo 2 numeri
* e massimo 3
*/
function somma(int $n1 = 0, int $n2 = 0, int $n3 = 0): int {
return $n1 + $n2 + $n3;
}
 
echo somma(1, 5); //OUTPUT: 6
echo somma(1, 24); //OUTPUT: 25
echo somma(3, 4, 2); //OUTPUT: 9
echo somma(n1: 5, n3: 5); //OUTPUT: 10
</syntaxhighlight>
 
Qualunque variabile di qualunque tipo creata dentro alla funzione è locale. Per specificare variabili globali dentro alla funzione si può usare {{Codice|codice=global $variabile|linguaggio=PHP}}<ref>{{Cita web|url=https://www.php.net/manual/en/language.variables.scope.php|titolo=PHP: Variable scope - Manual|accesso=17 ottobre 2020}}</ref>
 
Esempio:
 
<syntaxhighlight lang="php" line="1">
<?php
function esperimento(): void {
global $a;
$a = "tre";
$b = "quattro";
echo "Durante: $a $b";
}
 
$a = "uno";
$b = "due";
 
echo "Prima: $a $b";
esperimento();
echo "Dopo: $a $b";
</syntaxhighlight>
 
Il risultato sarà: <code>Prima uno due Durante tre quattro Dopo tre due</code>.
 
=== Inclusioni ===
È possibile includere uno script PHP all'interno di un altro per eseguirne il codice, per evitare codice ridondante e per accedere a variabili, funzioni e classi definite nello script incluso.
 
Per farlo si utilizza una delle seguenti istruzioni: <code>{{Codice|codice=include|linguaggio=PHP}}</code><ref>{{Cita web |url=http://www.php.net/manual/it/function.include.php |titolo=Manuale PHP - include |accesso=31 gennaio 2014 |dataarchivio=1 febbraio 2014 |urlarchivio=https://web.archive.org/web/20140201220826/http://www.php.net/manual/it/function.include.php |urlmorto=sì }}</ref>, <code>{{Codice|codice=include_once|linguaggio=PHP}}</code><ref>{{Cita web |url=http://it2.php.net/manual/it/function.include-once.php |titolo=Manuale PHP - include_once |accesso=31 gennaio 2014 |urlarchivio=https://web.archive.org/web/20140201220826/http://it2.php.net/manual/it/function.include-once.php |urlmorto=sì }}</ref>, <code>{{Codice|codice=require|linguaggio=PHP}}</code><ref>{{Cita web |url=http://it2.php.net/manual/it/function.require.php |titolo=Manuale PHP - require |accesso=31 gennaio 2014 |urlarchivio=https://web.archive.org/web/20140201220829/http://it2.php.net/manual/it/function.require.php |urlmorto=sì }}</ref> e <code>{{Codice|codice=require_once|linguaggio=PHP}}</code><ref>{{Cita web |url=http://it2.php.net/manual/it/function.require-once.php |titolo=Manuale PHP - require_once |accesso=31 gennaio 2014 |urlarchivio=https://web.archive.org/web/20140201220832/http://it2.php.net/manual/it/function.require-once.php |urlmorto=sì }}</ref>. Esempio:
 
<syntaxhighlight lang="php" line="1">
<?php
include 'header.php';
echo "Ciao mondo!";
include 'footer.php';
</syntaxhighlight>
 
Tipi di inclusione:
* Si usa <code>{{Codice|codice=include|linguaggio=PHP}}</code> quando si vuole che venga inviato soltanto un segnale di avviso senza interrompere l'esecuzione del programma qualora la pagina da includere non esista.
* Si usa <code>{{Codice|codice=require|linguaggio=PHP}}</code> quando si vuole che venga inviato un segnale di errore fatale e il programma venga interrotto se la pagina da includere non esiste.
* Si usa <code>{{Codice|codice=include_once|linguaggio=PHP}}</code>, <code>{{Codice|codice=require_once|linguaggio=PHP}}</code> quando il comando potrebbe essere ripetuto più volte anche in file diversi, creando così (potenzialmente) una inclusione [[Ricorsività|ricorsiva]], ma si vuole che la pagina non venga inclusa più di una volta. Se la pagina da includere non esiste si comportano analogamente ai rispettivi sopra citati.
 
=== Gestione dei parametri ===
PHP permette il passaggio di informazioni da una pagina all'altra attraverso le diverse funzionalità supportate dall'[[Hypertext Transfer Protocol#Riga di richiesta|HTTP]]. Nello specifico, [[Hypertext Transfer Protocol#Riga di richiesta|richieste]] di tipo GET (informazioni parametrizzate nella [[query string]] dell'[[URL]]), POST (informazioni generalmente con origine da un precedente invio di un [[form]]) e dei [[cookie]] (informazioni contenute in piccole stringhe di testo salvate fisicamente nella memoria locale di un browser), insieme al supporto alle [[Sessione|sessioni]] (funzionalità basata sull'utilizzo dei cookie). Queste informazioni sono utilizzabili in PHP tramite quattro [[array]] di tipo associativo chiamati internamente: {{Codice|codice=$_GET|linguaggio=PHP}}, <code>{{Codice|codice=$_POST|linguaggio=PHP}}</code>, <code>{{Codice|codice=$_COOKIE|linguaggio=PHP}}</code>, {{Codice|codice=$_SESSION|linguaggio=PHP}}. Questi tipi di array vengono chiamati superglobali<ref>{{Cita web|url=https://www.php.net/manual/en/language.variables.superglobals.php|titolo=PHP: Superglobals - Manual|accesso=17 ottobre 2020}}</ref> ovvero che sono visibili a ogni ''[[scope]]'' del programma.
 
In questo esempio di gestione di un parametro GET, con la richiesta <code><nowiki>http://example.org/esempio.php?pippo=Ciao</nowiki></code>, il server caricherà contenuto del seguente codice e mostrerà sul browser <code>Ciao</code>.
 
<syntaxhighlight lang="php" line="1">
<?php
/*
* Controllo se è stato ricevuto il parametro "pippo" tramite metodo GET.
* Se è rilevato lo visualizzo; se non è rilevato avverto l'utente.
*/
 
if (isset($_GET['pippo'])) {
$a = $_GET['pippo']; // Salvo nella variabile $a il parametro "pippo"
 
$a = htmlentities( $a ); // Questo "disinnesca" eventuali contenuti HTML contenuti in $a
 
echo $a; // Mostro a video
} else {
echo "Nessun parametro di nome pippo trovato. Devi inviarlo!";
}
</syntaxhighlight>
 
=== Una funzione con controllo sui parametri ===
<syntaxhighlight lang="php" line="1">
<?php
function get_hello_world(mixed $value1, mixed $value2): string {
$result = '';
 
/*
* In PHP il controllo "if", se contiene una sola istruzione,
* può anche non avere le parentesi graffe di contenimento
* ma è buona norma usarle sempre, per leggibilità del codice.
*/
if ($value1 != '') {
$result .= $value1; // Equivale a: $result = $result . $value1;
}
 
if (($value1 != ' ') && ($value2 != ' ')) {
$result .= " ";
}
 
/*
* !empty($value2) equivale a: $value2 != "" && $value2 != null
* Il "punto esclamativo" serve per negare un valore booleano
*/
if (!empty($value2)) {
$result .= $value2; // Equivale a: $result = $result . $value2;
}
 
return $result;
}
 
echo get_hello_world('Hello', 'world');
</syntaxhighlight>
 
=== Il ciclo for ===
<syntaxhighlight lang="php" line="1">
<?php
/*
* In questo caso la variabile $n viene stampata a video, successivamente
* viene incrementata di 1, il ciclo termina quando $n è uguale a 9 (il ciclo conta da 0 fino a 9 quindi 10 volte).
*/
 
for ($n = 0; $n <= 9; $n ++) {
echo $n;
}
 
// Output -> 0123456789
</syntaxhighlight>
 
=== Il ciclo while ===
<syntaxhighlight lang="php" line="1">
<?php
/*
* In questo caso vediamo come stampare a video dei risultati estratti
* da una base di dati MySQL, eseguendo una query SQL.
* Questo script è incompleto, in quanto prima è necessario effettuare
* il collegamento alla base di dati MySQL tramite mysqli o PDO.
*/
 
$result = $mysqli->query("SELECT id FROM persone");
 
while ($row = $result->fetch_assoc()) {
echo $row['id'] . "<br />";
}
 
/*
* In questo modo estraiamo dei dati da una base di dati MySQL
* sotto forma di array che verrà poi stampato tramite un ciclo while
*/
</syntaxhighlight>
 
=== 99 Bottles of Beer ===
Il seguente esempio stampa il testo della canzone ''[[99 Bottles of Beer]]''.
<syntaxhighlight lang="php" line="1">
<?php
/*
* Questo è un commento. Altri modi per commentare sono i simboli // e #
* Questo tipo di commenti non ha bisogno degli asterischi (*) all'inizio
* di ogni riga, ma lo si fa per convenzione. I simboli // e #
* commentano solo il testo che si trova dopo di essi e fino alla fine della riga;
* non c'è bisogno di finire il commento con qualche carattere speciale.
*/
 
/*
<source lang="php">
* Prima definiamo una funzione chiamata "plural".
<?php
* Restituisce una "s" se l'argomento passato non è 1.
/*/
function plural(int $number): string {
* Questo è un commento. Altri modi per commentare sono i simboli // e #
// L'operatore ternario (!= ? :) è una struttura condizionale
* Questo tipo di commenti non ha bisogno degli asterischi (*) all'inizio
// simile a if-else: (condizione ? true : false)
* di ogni riga, ma lo si fa per convenzione. I simboli // e #
return ($number != 1 ) ? 's' : '';
* commentano solo il testo che si trova dopo di essi e fino alla fine della riga;
}
* non c'è bisogno di finire il commento con qualche carattere speciale.
 
*/
// Definiamo una variabile chiamata $a_capo che contiene un a capo HTML,
// un carattere di ritorno e uno di nuova riga:
/*
$a_capo = "<br />\r\n";
* Prima definiamo una funzione chiamata "plural".
 
* Restituisce una "s" se l'argomento passato non è 1.
for ($i = 99; $i > 0; $i--) {
*/
echo "$i bottle" . plural($i) . " of beer on the wall,$a_capo";
function plural($number)
// Non abbiamo bisogno di ripetere il comando echo per ogni riga:
{
echo "$i bottle" . plural($i) . " of beer . $a_capo
// L'operatore ternario (!= ? :) è una struttura condizionale
Take one down, pass it around,$a_capo" .
// simile a if-else: (condizione ? true : false)
((($i - 1) != 0) return? ($numberi !=- 1 ? "s" : ""'no more'); .
' bottle' . plural($i - 1) . " of beer on the wall.$a_capo$a_capo";
}
/*
* PHP permette di creare stringhe su più righe, finché
// Definiamo una variabile chiamata $a_capo che contiene un a capo HTML,
* trova un punto e virgola (;) che termina l'istruzione.
// un carattere di ritorno e uno di nuova riga:
* Un punto (.) concatena insieme più stringhe.
$a_capo = "<br />\r\n";
* Le variabili, che iniziano con il carattere "$", sono interpretate
* anche dentro i doppi apici ("), ma non dentro gli apici singoli (').
for ($i = 99; $i > 0; $i--) {
* Le funzioni, come plural(), non sono interpretate fra gli apici.
print "$i bottle" . plural($i) . " of beer on the wall,$a_capo";
*/
// Non abbiamo bisogno di ripetere il comando print per ogni riga:
}
print "$i bottle" . plural($i) . " of beer.$a_capo
echo "Go to the store, $a_capo buy some more, $a_capo 99 bottles of beer on the wall!";
Take one down, pass it around,$a_capo" .
</syntaxhighlight>
($i - 1 != 0 ? $i - 1 : "no more") .
" bottle" . plural($i - 1) . " of beer on the wall.$a_capo$a_capo";
/*
* PHP permette di creare stringhe su più righe, finché
* trova un punto e virgola (;) che termina l'istruzione.
* Un punto (.) concatena insieme più stringhe.
* Le variabili, che iniziano con il carattere "$", sono interpretate
* anche dentro i doppi apici ("), ma non dentro gli apici singoli (').
* Le funzioni, come plural(), non sono interpretate fra gli apici.
*/
}
 
=== Esempio connessione con base di dati MySQL usando l'estensione MySQLi ===
Il PHP permette l'elaborazione di dati da base di dati MySQL. I dati verranno richiesti, inseriti e modificati attraverso opportune ''query'' usando alcune estensioni tra cui MySQLi e PDO'''.'''<ref>{{Cita web|url=https://www.php.net/manual/en/refs.database.php|titolo=PHP: Database Extensions - Manual|accesso=17 ottobre 2020}}</ref>
print "Go to the store, $a_capo buy some more, $a_capo 99 bottles of beer on the wall!";
?>
</source>
 
L'estensione MySQLi, dove la ''i'' sta per ''improved'', è stata messa a disposizione di PHP per sfruttare alcune nuove funzionalità messe a disposizione dalle versioni di MySQL versione 4.1.3 e successive ed è disponibile per PHP 5 e release superiori.
=== Il Ciclo for ===
 
Esempio di connessione a base di dati e richiesta di un dato:
<source lang=php>
 
<syntaxhighlight lang="php" line="1">
<?php
// Connessione a MySQL con l'estensione MySQLi
$mysqli = new mysqli('localhost', 'nome_utente_database', 'password_database', 'nome_database');
 
/*
// In questo caso la variabile $n viene stampata a video, successivamente
* Questo è il modo ufficiale di controllare se una connessione MySQL è fallita,
// viene incrementata di 1, il ciclo termina quando $n è uguale a 9.
*/
if (null !== $mysqli->connect_error) {
die("Connessione fallita, motivi: " . $mysqli->connect_error);
}
 
// Proviamo una query ipotizzando che stiamo elaborando dati provenienti da una simil-rubrica:
for($n = 0; $n <= 9; $n++){
$SQLQuery = $mysqli->query("SELECT indirizzo, telefono FROM utenti WHERE nome = 'Francesca'");
 
// Da questa query otterremo l'indirizzo e il telefono della persona di nome Francesca,
echo $n;
// ipotizzando sia presente nella tabella utenti della base di dati in questione.
 
// Ora "trasformiamo" i dati ricevuti dalla query in un array associativo, utilizzabile successivamente
}
$row = $SQLQuery->fetch_assoc();
 
// Mostriamo a video per esempio il numero di telefono dall'array
//Output -> 0123456789
echo "Il numero di telefono di Francesca è: " . $row['telefono'];
 
// Chiusura della connessione alla base di dati
?>
$mysqli->close();
</syntaxhighlight>
 
Per approfondimenti vedere il manuale online ufficiale MySQLi.<ref>{{Cita web |url=http://it2.php.net/manual/it/mysqli.construct.php |titolo=MySQLi:query |accesso=29 gennaio 2014 |urlarchivio=https://web.archive.org/web/20140201215316/http://it2.php.net/manual/it/mysqli.construct.php |urlmorto=sì }}</ref>
</source>
 
== php.ini ==
Il [[file di configurazione]] di PHP, chiamato <code>php3.ini</code> in PHP 3, e poi semplicemente php.ini nelle versioni successive, è letto all'avvio dell'interprete del linguaggio e fornisce le impostazioni dei vari moduli con cui l'interprete è stato compilato. Nella versione server modulare di PHP, questo avviene solo una volta, all'avvio del [[Web Server|server web]]. Per le versioni [[Common Gateway Interface|CGI]] e [[Interfaccia a riga di comando|CLI]], invece, è invocato a ogni richiesta.
 
Per visualizzare tutte le opzioni di configurazione è possibile utilizzare la funzione <code>phpinfo()</code>.
Il file di configurazione di PHP, chiamato php3.ini in PHP 3, e poi semplicemente php.ini nelle versioni successive, è letto all'avvio dell'interprete del linguaggio e fornisce le impostazioni dei vari moduli con cui l'interprete è stato compilato. Nella versione server modulare di PHP, questo avviene solo una volta, all'avvio del [[Web Server|server web]]. Per le versioni [[Common Gateway Interface|CGI]] e [[CLI]], invece, è invocato ad ogni richiesta.
 
== Versioni ==
Per visualizzare tutte le opzioni di configurazione è possibile utilizzare la funzione phpinfo().
{| class="wikitable plainrowheaders"
!Versione
!Data di pubblicazione
!Supportato fino al
|-
|{{Version|o|1.0}}
|8 giugno 1995
|
|-
|{{Version|o|2.0}}
|1 novembre 1997
|
|-
|{{Version|o|3.0}}
|6 giugno 1998
|20 ottobre 2000
|-
|{{Version|o|4.0}}
|22 maggio 2000
|23 giugno 2001
|-
|{{Version|o|4.1}}
|10 dicembre 2001
|12 marzo 2002
|-
|{{Version|o|4.2}}
|22 aprile 2002
|6 settembre 2002
|-
|{{Version|o|4.3}}
|27 dicembre 2002
|31 marzo 2005
|-
|{{Version|o|4.4}}
|11 luglio 2005
|7 agosto 2008
|-
|{{Version|o|5.0}}
|13 luglio 2004
|5 settembre 2005
|-
|{{Version|o|5.1}}
|24 novembre 2005
|24 agosto 2006
|-
|{{Version|o|5.2}}
|2 novembre 2006
|6 gennaio 2011
|-
|{{Version|o|5.3}}
|30 giugno 2009
|14 agosto 2014
|-
|{{Version|o|5.4}}
|1 marzo 2012
|3 settembre 2015
|-
|{{Version|o|5.5}}
|20 giugno 2013
|10 luglio 2016
|-
|{{Version|o|5.6}}
|28 agosto 2014
|31 dicembre 2018
|-
|style="background:silver;"|6.x
|Non pubblicato
|{{TBA|testo=N/A|align=left}}
|-
|{{Version|o|7.0}}
|3 dicembre 2015
|3 dicembre 2018
|-
|{{Version|o|7.1}}
|1 dicembre 2016
|1 dicembre 2019
|-
|{{Version|o|7.2}}
|30 novembre 2017
|30 novembre 2020
|-
|{{Version|o|7.3}}
|6 dicembre 2018
|6 dicembre 2021
|-
|{{Version|o|7.4}}
|28 novembre 2019
|28 novembre 2022
|-
|{{Version|o|8.0}}
|26 novembre 2020
|26 novembre 2023
|-
|{{Version|co|8.1}}
|25 novembre 2021
|31 dicembre 2025
|-
|{{Version|co|8.2}}
|8 dicembre 2022
|31 dicembre 2026
|-
|{{Version|co|8.3}}
|23 novembre 2023
|31 dicembre 2027
|-
|{{Version|c|8.4}}
|21 novembre 2024
|31 dicembre 2028
|-
|{{Version|p|8.5}}
|20 novembre 2025<ref>{{Cita web|lingua=en|autore=Ayesh Karunaratne|url=https://php.watch/versions/8.5|titolo=PHP 8.5: What's New and Changed|sito=PHP.Watch|accesso=2025-09-23}}</ref>
|31 dicembre 2029
|-
| colspan="3" | {{Version|l|show=111111}}
|}
 
== AmbientiAltri di sviluppoutilizzi ==
 
{{div col}}
=== Uso di PHP nei CMS ===
*{{en|http://www.embarcadero.com/products/delphi_for_php/|Delphi4php}}
Grazie alle caratteristiche del linguaggio di programmazione è stato possibile realizzare [[Content management system|CMS (Content Management Systems)]] modulari dove attraverso file <code>.php</code> è possibile integrare e migliorare le funzionalità del software (come accade con [[Plugin (informatica)|plugin]] e temi in WordPress).<ref>{{Cita web|url=https://codex.wordpress.org/it:Scrivi_un_Plugin|titolo=it:Scrivi un Plugin « WordPress Codex|lingua=en|accesso=2022-10-06}}</ref> La complementarità tra linguaggio PHP e l'utilizzo di database relazionali interrogabili con l'[[Structured Query Language|SQL]] consente la creazione di CMS dinamici che portano alla realizzazione di siti web dalla struttura estremamente flessibile.
*{{en|http://bluefish.openoffice.nl|Bluefish}}
 
*{{en|http://www.dreamweaver.com|Dreamweaver MX}}
Alcuni dei CMS più diffusi che usano PHP sono:<ref>{{Cita web|url=https://www.plesk.com/blog/various/top-10-php-cms-platforms-for-developers-in-2020/|titolo=Top 10 PHP CMS Platforms For Developers in 2022|sito=plesk.com|data=2022-08-07|lingua=en|accesso=2022-10-06}}</ref>
*{{en|http://www.blumentals.net/webuilder/|WeBuilder 2007}}
 
*{{en|http://www.maguma.com|Maguma Workbench}}
* [[WordPress]]
*{{en|http://www.nusphere.com|NuSphere PHPEd}}
* [[Joomla!]]
*{{en|http://www.mpsoftware.dk|PHP Designer 2007}}
* [[Drupal]]
*{{en|http://www.eclipse.org/pdt|PDT}}
* [[Magento]]
*{{en|http://www.phpeclipse.de|PHPEclipse}}
* [[TYPO3]]
*{{en|http://devphp.sourceforge.net|Dev-PHP}}
 
*{{en|http://www.waterproof.fr|PHPEdit}}
=== Uso di PHP nei MVC ===
*{{en|http://quanta.kdewebdev.org|Quanta Plus}}
Tra i più conosciuti ''[[model-view-controller]]'' ci sono [[Symfony]] e [[Laravel]], i quali hanno le caratteristiche di avere un ''core'' basato su librerie e package creati da altri team e società, come ad esempio [[Node.js]] o [[Composer (software)|Composer]], i quali rendono l'uso di package composti da algoritmi integrativi e riutilizzabili nello stesso ''framework'' tramite PSR-4 o superiori. In questo modo si facilita l'uso di classi e l{{'}}''autoload'' delle stesse
*{{en|http://www.phpside.org|Side}}
*{{en|http://www.xored.com/trustudio|Xored TruStudio}}
*{{en|http://www.zend.com/store/products/zend-studio.php|Zend Studio}}
*{{en|http://www.c-point.com/php_editor.php|Antechinus PHP Editor}}
*{{en|http://www.gphpedit.org|gPHPEdit}}
*{{en|http://www.jedit.org|jEdit}}
*{{it}} [http://www.pspad.com/it PSPad]
*{{en|http://www.vim.org|Vim}}
*{{en|http://www.scintilla.org/SciTE.html|SciTE}}
*{{it}} [http://hapedit.free.fr HAP EDIT]
*{{en|http://www.activestate.com/Products/komodo_ide/index.mhtml|Komodo IDE}}
*{{en|http://www.activestate.com/Products/komodo_ide/komodo_edit.mhtml|Komodo Edit}}
*{{it}} [http://notepad-plus.sourceforge.net/it/site.htm Notepad++]
*[[Notepad]] (blocco note di [[Windows]])
*[[gedit]]
* Qualsiasi altro [[editor di testo]]
{{div col end}}
 
== Note ==
Riga 226 ⟶ 546:
 
== Bibliografia ==
{{W|informatica|aprile 2023}}
*Zak Greant, Graeme Merrall, Torben Wilson, Brett Michlitsch (2002): ''PHP Functions Essential Reference'', Sams, ISBN 0-7357-0970-X
*Luke WellingZak Greant, LauraGraeme ThomsonMerrall, Torben Wilson, Brett Michlitsch (20042002): ''PHP andFunctions MySQLEssential Web DevelopmentReference'', 3rd ed., SAMSSams, ISBN 0-6727357-326720970-8X
*Matt ZandstraLuke Welling, Laura Thomson (2004): ''PHP 5and Objects,MySQL Patterns,Web and PracticeDevelopment'', Apress3rd ed., SAMS, ISBN 10-59059672-38032672-48
*Eric Rosebrock, EricMatt FilsonZandstra (2004): ''SettingPHP Up5 LAMP: Getting LinuxObjects, Apache, MySQLPatterns, and PHP Working TogetherPractice'', SYBEXApress, ISBN 01-782159059-4337380-74
*Cristian DarieEric Rosebrock, MihaiEric BucicaFilson (2004): ''BeginningSetting PHPUp 5LAMP: andGetting MySQLLinux, E-Commerce:Apache, FromMySQL, Noviceand PHP toWorking ProfessionalTogether'', ApressSYBEX, ISBN 10-590597821-3924337-87
*David PowersCristian Darie, Mihai Bucica (20052004): ''FoundationBeginning PHP 5 forand FlashMySQL E-Commerce: From Novice to Professional'', Friends of EDApress, ISBN 1-59059-466392-58
*Elizabeth Naramore,David Powers (2005): ''BeginningFoundation PHP5,PHP Apache,5 andfor MySQL Web DevelopmentFlash'', WroxFriends of ED, ISBN 01-764559059-7966466-5
*Thomas MyerElizabeth Naramore, (2005): ''NoBeginning NonsensePHP5, XMLApache, Weband DevelopmentMySQL WithWeb PHPDevelopment'', [[SitePoint]]Wrox, ISBN 0-97524027645-07966-X5
*Marc WandschneiderThomas Myer (2005): ''CoreNo WebNonsense ApplicationXML Web Development withWith PHP and MySQL'', Prentice-Hall[[SitePoint]], ISBN 0-139752402-1867160-4X
*Steven HolznerMarc Wandschneider (2005): ''SpringCore Web Application Development Intowith PHP 5and MySQL'', AddisonPrentice-WesleyHall, ISBN 0-13-149862186716-24
* Steven Holzner (2005): ''BuildingSpring OnlineInto CommunitiesPHP with phpBB 25 '', Packt PublishingAddison-Wesley, ISBN 1-9048110-13-149862-2
* (2005): ''WebBuilding StandardsOnline Programmer'sCommunities Referencewith :phpBB HTML,2 CSS, JavaScript, Perl, Python, and PHP'', WroxPackt Publishing, ISBN 01-7645904811-882013-6 2
*Chris Newman (2005): ''SamsWeb TeachStandards YourselfProgrammer's PHPReference: inHTML, 10CSS, MinutesJavaScript, Perl, Python, and PHP'', Wrox, ISBN 0-6727645-327628820-76
*Paul HudsonChris Newman (2005): ''Sams Teach Yourself PHP in a10 NutshellMinutes'', O'Reilly, ISBN 0-596672-1006732762-17
*Andi Gutmans, Stig S. Bakken, DerickPaul RethansHudson (2005): ''PHP 5:in Guidaa completaNutshell'', ApogeoO'Reilly, ISBN 880-503596-230410067-21
*Jack HerringtonAndi Gutmans, Stig S. Bakken, Derick Rethans (20062005),: ''PHP Trucchi5: eGuida segreticompleta'' , Tecniche Nuove HopsApogeo, ISBN 88-481503-19512304-42
*Rasmus LerdorfJack Herrington (20032006), ''PHP PocketTrucchi Referencee segreti'' , Tecniche Nuove Hops, ISBN 88-8378481-0701951-14
* Rasmus Lerdorf (2003), ''PHP Pocket Reference'', Tecniche Nuove Hops, ISBN 88-8378-070-1
* Peter B. MacIntyre (2010), ''PHP – Le tecniche per scrivere il codice migliore'', Tecniche Nuove, ISBN 978-88-481-2505-5
 
== Voci correlate ==
{{Div col}}
* [[Linguaggio di scripting]]
* [[PHP Standard Recommendation]]
* [[LAMP]]
* [[MAMP]]
* [[WAMP]]
* [[EasyPHP]]
* [[PHP-GTK]]
* [[Active Server Pages]]
* [[PEAR]]
* [[Cakephp]]
* [[TCPDF]]
* [[Perl]]
* [[JampHTML]]
* [[CSS]]
* [[PhpGedView]]
{{Div col end}}
 
== Altri progetti ==
{{interprogetto|bv=PHP|vwikt=PHP}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
*[http://www.php.net/manual/it Documentazione ufficiale in italiano del linguaggio]
* {{FOLDOC|PHP: Hypertext Preprocessor|PHP: Hypertext Preprocessor}}
*[http://session-start.com Session-Start.com - Gli Amici del PHP]
* {{Cita web|url=https://secure.php.net/manual/en/history.php.php|titolo=Storia di PHP|autore=The PHP group|sito=secure.php.net|lingua=en}}
*[http://www.pehepe.org php and mysql help page]
*[http://php-faq.org Sito in italiano non ufficiale delle FAQ su PHP del newsgroup it.comp.www.php]
*[http://php.html.it Guide, articoli, script e approfondimenti sul linguaggio]
*[http://www.phpnews.it Corsi, articoli, tips&tricks e notizie sul mondo PHP]
*[http://forum.session-start.com Forum su PHP]
*[http://www.php-forum.com/ discussioni e approfondimenti per sviluppatori PHP]
*[http://www.booksopen.org/index.php?view=article&catid=45%3Amanuali-sui-linguaggi-di-programmazione&id=64%3Alivello-quinto-itis&option=com_content&Itemid=56 Manuale di PHP], in italiano distribuito con licenza open source.
*{{en}}[http://www.booksopen.org/index.php?view=article&catid=33%3Adescrizione-libri-pubblicati&id=79%3Aphp-5-power-programming&option=com_content&Itemid=56 PHP Power Programming] Scarica il libro in formato pdf (testo open source)
 
*{{Dmoz|World/Italiano/Computer/Programmazione/Php/|Php}}
 
{{PHP}}
{{Framework per applicazioni web}}
{{Principali linguaggi di programmazione}}
{{FOSS}}
{{Portale|Telematica|software libero}}
{{Controllo di autorità}}
 
{{Portale|software libero|telematica}}
[[Categoria:Estensioni]]
[[Categoria:Linguaggi di scripting]]
[[Categoria:Tecnologie per il Web]]
[[Categoria:PHP]]
 
[[afCategoria:PHP| ]]
[[Categoria:Formati di file]]
[[als:PHP]]
[[an:PHP]]
[[ar:بي إتش بي]]
[[az:PHP]]
[[bar:PHP]]
[[bat-smg:PHP]]
[[bg:PHP]]
[[bn:পিএইচপি]]
[[br:Areg PHP]]
[[bs:PHP]]
[[ca:PHP]]
[[ceb:PHP]]
[[cs:PHP]]
[[cy:PHP]]
[[da:PHP]]
[[de:PHP]]
[[el:PHP]]
[[en:PHP]]
[[eo:PHP]]
[[es:PHP]]
[[et:PHP]]
[[eu:PHP]]
[[fa:زبان برنامه‌نویسی پی‌اچ‌پی]]
[[fi:PHP]]
[[fr:PHP: Hypertext Preprocessor]]
[[gl:PHP]]
[[he:PHP]]
[[hi:पीएचपी]]
[[hr:PHP]]
[[hu:PHP]]
[[id:PHP]]
[[is:PHP]]
[[ja:PHP: Hypertext Preprocessor]]
[[ka:PHP]]
[[kab:PHP]]
[[kk:PHP]]
[[km:PHP]]
[[ko:PHP]]
[[ku:PHP]]
[[la:PHP]]
[[lb:PHP]]
[[lt:PHP]]
[[lv:PHP]]
[[mg:PHP]]
[[mk:PHP]]
[[ml:പി.എച്ച്.പി.]]
[[mn:PHP]]
[[ms:PHP]]
[[my:PHP]]
[[nds:PHP]]
[[nl:PHP]]
[[no:PHP]]
[[pl:PHP]]
[[pt:PHP]]
[[ro:PHP]]
[[ru:PHP]]
[[sh:PHP]]
[[simple:PHP]]
[[sk:PHP (programovací jazyk)]]
[[sl:PHP]]
[[sq:PHP]]
[[sr:PHP]]
[[sv:PHP]]
[[ta:பி.எச்.பி]]
[[tg:PHP]]
[[th:ภาษาพีเอชพี]]
[[tk:PHP]]
[[tl:PHP]]
[[tr:PHP]]
[[uk:PHP]]
[[ur:PHP]]
[[uz:PHP]]
[[vi:PHP]]
[[vls:PHP]]
[[wuu:PHP]]
[[zh:PHP]]
[[zh-min-nan:PHP]]
[[zh-yue:PHP]]