PHP da EGPHP
Tutto ciò che costruiamo parte da PHP.
Il nostro team scrive e gestisce PHP da venticinque anni, fin da PHP 4. I server, il pannello di controllo e i siti che seguiamo partono tutti da qui.
PHP
Laravel
NGINX
LiteSpeed
MySQL
MariaDB
PostgreSQL
Redis
Composer
Venticinque anni, versione dopo versione
Queste versioni non le conosciamo per sentito dire. Abbiamo aggiornato siti veri attraverso ciascuna di esse, e ogni riga qui sotto è un cambiamento che abbiamo dovuto affrontare su un server in produzione.
-
PHP 4 2000
Sessioni e buffering dell'output, integrati
È arrivato lo Zend Engine, e sessioni e buffering dell'output sono diventati parte del linguaggio anziché componenti aggiuntivi. Su questa base è stata scritta un'intera generazione dei primi siti dinamici.
Zend Enginesession_start()ob_start()
Cosa ha significato per noiIl punto di partenza del nostro team: siti scritti a mano su server condivisi, con register_globals ancora attivo.
-
PHP 5.0 2004
Un vero modello a oggetti
Lo Zend Engine 2 ha portato classi con visibilità, interfacce ed eccezioni, oggetti passati per handle anziché copiati, e le estensioni MySQLi e SimpleXML.
privateinterfacetry / catchmysqli
Cosa ha significato per noiIl codice si poteva organizzare in classi condivise da un team, e il database ha avuto un driver moderno.
-
PHP 5.3 2009
Namespace e closure
Namespace, funzioni anonime e late static binding: le fondamenta su cui sono stati costruiti in seguito Composer e l'ecosistema dei pacchetti condivisi.
namespacefunction () use ()static::
Cosa ha significato per noiLibrerie di autori diversi potevano finalmente convivere nello stesso progetto senza conflitti di nomi.
-
PHP 5.4 2012
Trait, array brevi e un po' di pulizia Ha rotto il codice vecchio
Trait, la sintassi breve [] per gli array e un server di sviluppo integrato, mentre register_globals, magic quotes e safe mode sono stati eliminati per sempre.
trait[ ]php -S
Cosa ha significato per noiI vecchi siti che si affidavano a register_globals hanno smesso di funzionare, e aggiornarli significava prima correggerli.
-
PHP 5.5 2013
OPcache di serie
OPcache è entrato a far parte di PHP stesso e ha iniziato a tenere in memoria gli script compilati; nella stessa versione sono arrivati i generatori e password_hash().
opcacheyieldpassword_hash()
Cosa ha significato per noiIl codice compilato resta in memoria invece di essere riletto a ogni richiesta. È ancora la prima impostazione che controlliamo su qualsiasi server PHP.
-
PHP 6 mai uscita
La versione mai uscita
PHP 6 era stato progettato attorno alle stringhe Unicode native ed è stato abbandonato. La versione successiva è stata numerata 7 per non confonderla con i libri e i piani scritti per la 6.
-
PHP 7.0 2015
Il salto di velocità Ha rotto il codice vecchio
Un motore ricostruito, che il progetto PHP ha descritto come fino a due volte più veloce della 5.6 consumando meno memoria, più le dichiarazioni di tipo scalari e di ritorno, ?? e <=>.
int $id: string??<=>
Cosa ha significato per noiLe vecchie funzioni mysql_* sono state rimosse: un motivo frequente per cui un vecchio sito si rompeva con questo aggiornamento.
-
PHP 7.4 2019
Proprietà tipizzate e preloading
Proprietà tipizzate, arrow function, l'operatore ??=, il preloading di OPcache e FFI.
public int $idfn ($x) =>??=
Cosa ha significato per noiL'ultima versione 7.x, e quella su cui molte applicazioni più vecchie sono rimaste più a lungo: per questo spostiamo ancora oggi siti che la usano.
-
PHP 8.0 2020
JIT, attributi e argomenti nominali Ha rotto il codice vecchio
Un compilatore JIT, attributi, argomenti nominali, union type, match, l'operatore nullsafe ?-> e la promozione delle proprietà nel costruttore.
#[Attribute]match?->JIT
Cosa ha significato per noiMolti avvisi sono diventati errori e i confronti tra stringhe e numeri sono cambiati: il codice che girava tranquillo sulla 7.4 poteva fermarsi sull'8.0.
-
PHP 8.1 2021
Enum, readonly e fiber
Enum nativi, proprietà readonly, fiber, il tipo di ritorno never e la sintassi first-class callable.
enumreadonlyFibernever
Cosa ha significato per noiI fiber hanno aperto la strada a librerie PHP asincrone senza cambiare il modo in cui gira una normale richiesta.
-
PHP 8.2 2022
Classi readonly, e un avviso per il vecchio codice
Classi readonly, tipi DNF, true, false e null come tipi autonomi, e una nuova estensione Random.
readonly class(A&B)|nullRandom\Randomizer
Cosa ha significato per noiLe proprietà dinamiche sono state deprecate, e i plugin più vecchi hanno riempito i log di avvisi finché non sono stati aggiornati.
-
PHP 8.3 2023
Costanti tipizzate e #[\Override]
Costanti di classe tipizzate, l'attributo #[\Override], json_validate() e l'accesso dinamico alle costanti di classe.
const string#[\Override]json_validate()
Cosa ha significato per noiUna versione più tranquilla, e proprio per questo un passo facile per i siti già sull'8.2.
-
PHP 8.4 2024
Hook sulle proprietà
Hook sulle proprietà, visibilità asimmetrica, oggetti lazy, un parser DOM compatibile con HTML5, e new MyClass()->method() senza le parentesi in più.
get { }public private(set)Dom\HTMLDocument
Cosa ha significato per noiGetter e setter che prima richiedevano un metodo ciascuno ora appartengono alla proprietà stessa, quindi c'è meno codice da mantenere.
-
PHP 8.5 2025
L'operatore pipe Attuale
L'operatore pipe |>, un'estensione URI integrata, clone with, l'attributo #[\NoDiscard], array_first() e array_last(), e un backtrace sugli errori fatali.
|>Uri\Rfc3986\Uriclone($o, [ ])
Cosa ha significato per noiLa linea di versioni attuale, quella su cui avviamo i nuovi siti quando il loro codice la supporta.
Gli anni sono quelli della prima uscita di ciascuna versione, secondo la cronologia ufficiale delle release del progetto PHP.
Segui una richiesta lungo lo stack
Una pagina di un sito PHP attraversa cinque livelli all'andata e risale per gli stessi cinque al ritorno. Ci occupiamo di ognuno di essi, e ciascuno ha la sua pagina.
-
Il visitatore
Un browser chiede una pagina via HTTPS. Il certificato, il firewall e le regole davanti al server decidono se la richiesta può anche solo entrare.
-
Il web server
Nginx o LiteSpeed accetta la connessione, serve da sé immagini e file, e passa solo il lavoro PHP al pool che sta dietro.
-
Il runtime PHP
Pool PHP-FPM, uno per sito, ciascuno sulla versione di PHP che serve al suo codice, con OPcache già caldo e worker dimensionati sul traffico.
-
Il tuo codice
Un framework o una piattaforma pronta trasforma la richiesta in una pagina: la tua applicazione Laravel, oppure WordPress, Magento, Moodle e tutte le altre.
-
I dati
MySQL o MariaDB conserva i record, e Redis tiene in memoria ciò che viene richiesto più e più volte.
Il server stesso
I nostri server, gestiti dallo stesso team, con sopra il nostro pannello di controllo.
Passare a un PHP più recente senza brutte mattinate
Ogni sito ha il suo pool, così un solo server può far girare più versioni di PHP una accanto all'altra, e ogni sito passa alla nuova quando è pronto il suo codice, non quando lo è il server.
Elenchiamo cosa usa ogni sito
La versione di PHP, le estensioni, e i plugin o i pacchetti che lo tengono indietro.
Una copia prova la nuova versione
Il sito viene copiato e fatto girare sulla versione successiva di PHP, e il suo log degli errori viene letto riga per riga.
Sistemiamo ciò che si rompe
Funzioni rimosse, chiamate deprecate e plugin senza aggiornamenti vengono corretti o sostituiti.
Un sito alla volta
Ogni sito passa al suo nuovo pool per conto proprio, e può tornare subito indietro se è sfuggito qualcosa.
| Sito | PHP | Pool | Stato |
|---|---|---|---|
| shop.example.com | 8.4 | fpm-shop | attivo |
| blog.example.com | 8.3 | fpm-blog | attivo |
| crm.example.com | 7.4 → 8.3 | fpm-crm | su una copia |
| learn.example.com | 8.3 | fpm-learn | attivo |
Quali versioni di PHP ricevono ancora correzioni
Il progetto PHP supporta ogni ramo per quattro anni: due con correzioni di bug e di sicurezza, poi due con sole correzioni di sicurezza. Dopo non ci sono più correzioni di alcun tipo. Ecco quel calendario per le versioni di questa pagina.
- Correzioni di bug e di sicurezza
- Solo correzioni di sicurezza
- Oltre la fine del supporto
- Oggi
-
PHP 7.4 Fine del supporto
La versione su cui molte applicazioni più vecchie sono rimaste più a lungo.
- Rilasciata
- 2019-11-28
- Fine del supporto
- 2022-11-28
-
PHP 8.0 Fine del supporto
- Rilasciata
- 2020-11-26
- Fine del supporto
- 2023-11-26
-
PHP 8.1 Fine del supporto
- Rilasciata
- 2021-11-25
- Fine del supporto
- 2025-12-31
-
PHP 8.2 Solo correzioni di sicurezza
- Rilasciata
- 2022-12-08
- Correzioni di bug fino al
- 2024-12-31
- Correzioni di sicurezza fino al
- 2026-12-31
-
PHP 8.3 Solo correzioni di sicurezza
- Rilasciata
- 2023-11-23
- Correzioni di bug fino al
- 2025-12-31
- Correzioni di sicurezza fino al
- 2027-12-31
-
PHP 8.4 Supporto attivo
Gira sul nostro hosting, con OPcache e JIT attivi.
- Rilasciata
- 2024-11-21
- Correzioni di bug fino al
- 2026-12-31
- Correzioni di sicurezza fino al
- 2028-12-31
-
PHP 8.5 Supporto attivo
Dove iniziamo i nuovi siti quando il loro codice lo supporta.
- Rilasciata
- 2025-11-20
- Correzioni di bug fino al
- 2027-12-31
- Correzioni di sicurezza fino al
- 2029-12-31
Le date sono quelle del progetto PHP, prese dalle sue pagine sulle versioni supportate e sulla fine del supporto, verificate il 2026-09-29. php.net/supported-versions.php
Lo stack PHP, capacità per capacità
Tutto ciò che compare in questa mappa è descritto in un'altra pagina di questo sito. Ogni scheda rimanda alla pagina che lo spiega per intero.
Esecuzione
Come viene eseguito PHP stesso per ogni sito.
-
Un pool per sito
Ogni sito ha il proprio pool PHP-FPM, così versione, limiti e worker appartengono solo a quel sito.
Prestazioni di PHP -
Versione di PHP per sito
Scelta per ogni sito dal pannello EGPNL, così un server può far girare più versioni affiancate.
Pannello di controllo EGPNL -
OPcache
Script compilati tenuti in memoria condivisa, dimensionati sul sito, con il tasso di successo letto per verificare che nulla venga espulso.
Prestazioni di PHP -
JIT
Trasforma il codice più usato in codice macchina. Aiuta il lavoro che impegna il processore e cambia poco per un sito tipico che attende il database.
Prestazioni di PHP -
Precaricamento
Per un framework, i suoi file principali vengono caricati una volta all'avvio e tenuti pronti. Un riavvio fa parte del deploy.
Prestazioni di PHP
Strumenti
Ciò che puoi usare da riga di comando e in background.
-
Composer
Supporto completo a Composer, con un autoloader ottimizzato e senza pacchetti di sviluppo sul server.
Hosting -
Worker di coda in background
I worker di coda girano sotto Supervisor, così i lavori lenti restano lontani dalla pagina che un visitatore sta aspettando.
Hosting -
Accesso shell
Accesso SSH per Composer e altre attività da riga di comando sulle applicazioni PHP.
Hosting -
WP-CLI e Drush
WP-CLI è preinstallato per WordPress; Drupal si installa e si aggiorna con Composer e Drush.
Piattaforme PHP
Estensioni e cache
I moduli che PHP carica e le cache in memoria accanto a lui.
-
Estensioni gestite per te
Installate e attivate sito per sito dal pannello, invece che tramite ticket di supporto.
Perché PHP -
ionCube Loader
Installato dove una piattaforma ne ha bisogno per eseguire codice codificato, come fa WHMCS.
Piattaforme PHP -
APCu
Una cache in memoria per valori PHP, usata con Redis per la cache e il blocco dei file su piattaforme come Nextcloud.
Piattaforme PHP -
Redis
Cache, sessioni, code e lock tenuti in memoria, su un Redis non raggiungibile da internet.
Database
Dati e web server
Dove sono conservati i dati e chi risponde al visitatore.
-
MySQL e MariaDB
Tabelle InnoDB gestite con phpMyAdmin sull'hosting; installate, ottimizzate e monitorate sui server gestiti.
Database -
PostgreSQL
Installato e ottimizzato dove l'applicazione lo richiede, ad esempio per contabilità, ERP e report.
Database -
Nginx o LiteSpeed
Serve da solo immagini e file e passa solo il lavoro PHP al pool che ha alle spalle.
Perché Nginx -
HTTP/2 su TLS
Le pagine sono servite via HTTP/2 con TLS e i certificati Let's Encrypt sono installati e rinnovati automaticamente.
Hosting

Portaci il tuo PHP
Un vecchio sito che ha bisogno di un PHP più recente, una piattaforma da installare o un server su cui far girare tutto. Per ogni lavoro prepariamo un preventivo dopo una breve chiacchierata.