PHP: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Migliorato la pagina |
Annullata la modifica 142934040 di Simone Biancolilla (discussione) Etichetta: Annulla |
||
(12 versioni intermedie di 5 utenti non mostrate) | |||
Riga 4:
|immagine = PHP-logo.svg
|autore = PHP Group
|data =
|versione =
|utilizzo = Applicazioni web lato server
|paradigmi =
|tipizzazione = Debole
|specifiche =
|influenzato_da =
|ha_influenzato =
|implementazione_riferimento = Interprete
|sistema_operativo = [[Multipiattaforma]]
|lingua =
}}
'''PHP''' ([[
Attualmente è principalmente utilizzato per sviluppare [[
Grazie soprattutto alla diffusione di [[WordPress
== Storia ==
{{Immagine multipla
|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
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
=== 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
=== PHP 4 ===
PHP diventò a questo punto sufficientemente maturo da competere con i linguaggi lato server come [[Active Server Pages
La popolarità del linguaggio PHP
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.
Line 46 ⟶ 48:
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>
A partire dal 5 febbraio 2008, a causa dell'iniziativa ''GoPHP5'' sostenuta da una serie di sviluppatori PHP, molti dei progetti ''open
=== PHP 7 ===
Riga 54:
=== PHP 8 ===
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 [[
PHP è in grado di interfacciarsi a innumerevoli [[DBMS]] tra cui [[MySQL]], [[PostgreSQL]], [[MariaDB]], [[Oracle Database|Oracle]], [[Firebird SQL|Firebird]], [[IBM DB2]], [[Microsoft SQL Server]] e anche basi di dati
Fornisce un'[[Application programming interface|API]] specifica per interagire con [[Apache HTTP Server|Apache]], sebbene funzioni naturalmente con numerosi altri [[Web server|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]].<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 questi motivi esiste un'enorme quantità di [[script]] e [[Libreria software|librerie]] in PHP disponibili liberamente su [[Internet]].
Riga 65:
Dispone di un archivio chiamato [[PHP Extension and Application Repository]] (PEAR) che mette a disposizione un ''[[framework]]'' di [[Libreria software|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 ===
Riga 72:
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
* [[SQL injection|SQL Injection]] o SQLi: permette agli attaccanti di effettuare attività di ''[[IP spoofing|spoof identify]]'', modificare dati esistenti, causare ''repudiation
* ''[[Cross-site scripting]]'' (XSS) si verifica quando un utente malintenzionato causa il caricamento di codice dannoso nel browser del visitatore del sito
* ''[[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}}
Il seguente programma "[[Hello, World!]]" è scritto in codice PHP incorporato in un documento [[HTML]]:
<syntaxhighlight lang="html+php" highlight="7-9" line="1">
<!DOCTYPE html>
Line 105 ⟶ 106:
=== Variabili ===
I nomi di variabili in PHP iniziano sempre con il simbolo del dollaro (<code>$</code>) e il carattere successivo non deve essere un numero,
I nomi delle variabili sono [[Sensibile alle maiuscole|case-sensitive]], ovvero <code>$ancora</code> e <code>$ANCORA</code> sono due variabili distinte.
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":
<syntaxhighlight lang="php">$ciao = "Ciao mondo!";</syntaxhighlight>
Per mostrare il contenuto di <code>$ciao</code>, è possibile usare l'istruzione
<syntaxhighlight lang="php">echo $ciao;</syntaxhighlight>
che visualizza
==== Stringhe ====
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:
<syntaxhighlight lang="php">echo "Ciao vale: $ciao";</syntaxhighlight>
Stampa: <code>
Esempio di composizione della frase "Wikipedia è meravigliosa" in due modi: usando gli apici singoli e doppi:
<syntaxhighlight lang="php" line="1">
<?php
Line 132 ⟶ 138:
==== 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>.
Line 138 ⟶ 144:
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
<syntaxhighlight lang="php" line="1">
<?php
Line 158 ⟶ 165:
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
=== Funzioni ===
Line 164 ⟶ 171:
Esempio di funzione con un parametro obbligatorio e uno opzionale con valore predefinito.
<syntaxhighlight lang="php" line="1">
<?php
Line 184 ⟶ 192:
Esempio:
<syntaxhighlight lang="php" line="1">
<?php
Line 200 ⟶ 209:
echo "Dopo: $a $b";
</syntaxhighlight>
Il risultato sarà: <code>Prima uno due Durante tre quattro Dopo tre due</code>.
Line 206 ⟶ 216:
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!";
Line 213 ⟶ 225:
Tipi di inclusione:
* Si usa <code>{{Codice|codice=include|linguaggio=PHP}}</code> quando si vuole che venga inviato soltanto un
* Si usa <code>{{Codice|codice=require|linguaggio=PHP}}</code> quando si vuole che venga inviato un
* 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
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
▲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 di esempio.php (qui sotto) e mostrerà sul browser "Ciao".
<syntaxhighlight lang="php" line="1">
<?php
Line 357 ⟶ 370:
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>
L'estensione
Esempio di connessione a base di dati e richiesta di un dato:
Line 392 ⟶ 405:
== 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
Per visualizzare tutte le opzioni di configurazione è possibile utilizzare la funzione <code>phpinfo()</code>.
Line 464 ⟶ 477:
|style="background:silver;"|6.x
|Non pubblicato
|{{TBA|testo=N/A|align=left}}
|-
|{{Version|o|7.0}}
Line 498 ⟶ 511:
|31 dicembre 2026
|-
|{{Version|
|23 novembre 2023
|31
|-
|{{Version|c|8.4}}
|21 novembre 2024
|31 dicembre 2028
|-
| colspan="3" | {{Version|l|show=111111}}
|}
==
Grazie alle caratteristiche del linguaggio di programmazione è stato possibile realizzare [[Content management system|CMS (Content Management Systems)]] modulari dove attraverso file. php è possibile integrare e migliorare le funzionalità del software (come accade con 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.▼
=== Uso di PHP nei CMS ===
▲Grazie alle caratteristiche del linguaggio di programmazione è stato possibile realizzare [[Content management system|CMS (Content Management Systems)]] modulari dove attraverso file
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>
Line 516 ⟶ 535:
* [[TYPO3]]
=== Uso di PHP nei MVC
Tra i più
{{div col}}▼
{{div col end}}▼
== Note ==
Line 577 ⟶ 563:
== Voci correlate ==
* [[PHP Standard Recommendation]]
* [[LAMP]]
Line 588 ⟶ 575:
* [[HTML]]
* [[CSS]]
== Altri progetti ==
|