PHP: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
migliora codice |
Migliorato la pagina |
||
Riga 25:
=== Origini ===
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. 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 ''
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 ''
=== PHP 3 ===
Il linguaggio cominciò a godere di una certa popolarità tra i progetti ''open source'' del
=== PHP 4 ===
PHP diventò a questo punto sufficientemente maturo da competere con i linguaggi
La popolarità del linguaggio PHP è in costante crescita grazie alla sua flessibilità: nel giugno
Nel 2004 è stato uno dei linguaggi principali con cui è stato creato [[Facebook]].
Nel gennaio
Nel
=== PHP 5 ===
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
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.<ref>{{Cita web|url=https://pear.php.net/gophp5.php|titolo=GOPHP5!|sito=pear.php.net|lingua=en|accesso=26 settembre 2017}}</ref>
Riga 59:
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'', 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 3.000 funzioni [[Application programming interface|API]] del nucleo base.
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 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]] ed esiste un [[wrapper]] per tutte le librerie più diffuse come [[CURL]], [[GD Graphics Library|GD]], [[Gettext]], GMP, Ming, [[OpenSSL]] ed altro.
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
Dispone di un archivio chiamato [[PHP Extension and Application Repository
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 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
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
Nel sito ufficiale è presente l'archivio storico delle [[Release (informatica)|versioni]] dismesse, aggiornato a novembre 2022.<ref name=":0" />
Riga 79:
PHP può essere soggetto a diversi 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 issues 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
* ''[[Cross-site request forgery
* 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}}''
== Esempi di codice ==
Riga 90:
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>
<html>
Riga 116:
==== Stringhe ====
In PHP una stringa di caratteri alfanumerici si rappresenta in due modi: racchiudendola tra apici doppi (
<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'è.
Esempio di composizione della frase "Wikipedia è meravigliosa" in due modi: usando gli apici singoli e doppi:
<syntaxhighlight lang="php" line="1">
<?php
$uno = 'Wikipedia';
Riga 136:
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 d'esempio di un array associativo in cui ad 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 = [
Riga 161:
=== Funzioni ===
Le
Esempio di funzione con un parametro obbligatorio e uno opzionale con valore predefinito.
<syntaxhighlight lang="php" line="1">
<?php
/**
Riga 181:
</syntaxhighlight>
Qualunque variabile di qualunque tipo creata dentro alla funzione è
Esempio:
<syntaxhighlight lang="php" line="1">
<?php
function esperimento(): void {
Riga 205:
È 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!";
Riga 213:
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 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, richieste di tipo
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
/*
Riga 240:
=== Una funzione con controllo sui parametri ===
<syntaxhighlight lang="php" line="1">
<?php
function get_hello_world(mixed $value1, mixed $value2): string {
Riga 273:
=== Il ciclo for ===
<syntaxhighlight lang="php" line="1">
<?php
/*
Riga 288:
=== Il ciclo while ===
<syntaxhighlight lang="php" line="1">
<?php
/*
Riga 311:
=== 99 Bottles of Beer ===
Il seguente esempio stampa il testo della canzone ''[[99 Bottles of Beer]]''.
<syntaxhighlight lang="php" line="1">
<?php
/*
Riga 355:
=== 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
L'estensione [https://web.archive.org/web/20130920103145/http://it1.php.net/manual/it/book.mysqli.php 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.
Riga 361:
Esempio di connessione a base di dati e richiesta di un dato:
<syntaxhighlight lang="php" line="1">
<?php
// Connessione a MySQL con l'estensione MySQLi
Riga 517:
== Uso di PHP nei MVC model view Controllers ==
Tra i più rinomati Model View Controllers [[Model-view-controller]] abbiamo Symfony e Laravel i quali hanno le caratteristiche di avere un core basato su librerie e packages creati da altri team e società come ad esempio Nodejs o Composer i quali rendono l'uso di packages (tali packages sono creati dalla comunità di programmatori PHP in packagist.org) composti da algoritmi integrativi e riutilizzabili nello stesso framework tramite PSR-4 o superiori si facilita l'uso di classi e l{{'}}''autoload'' delle stesse. Usando la [[Programmazione orientata agli oggetti|metodologia OOP]] (Oriented Object Programming) tramite l'incapsulazione si rende più sicura l'applicazione. Attualmente nel 2023 la versione consigliata per tali framework non può essere inferiore alla versione 8.0 "per questioni di sicurezza". Una delle Caratteristiche più evidenti rispetto ai vecchi monoliti e la capacita di essere una applicazione modulare capace di ampliarsi e cambiare la sua forma con molta rapidità.Tra gli strumenti che facilitano tale versatilità abbiamo Artisan e Php Cli e Tinker.
== Ambienti di sviluppo ==
|