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.

Funziona su e costruito con
  • PHP
  • Laravel
  • NGINX
  • LiteSpeed
  • MySQL
  • MariaDB
  • PostgreSQL
  • Redis
  • Composer
Crediti dei loghi

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.

  1. 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 Engine
    • session_start()
    • ob_start()
    Cosa ha significato per noi

    Il punto di partenza del nostro team: siti scritti a mano su server condivisi, con register_globals ancora attivo.

  2. 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.

    • private
    • interface
    • try / catch
    • mysqli
    Cosa ha significato per noi

    Il codice si poteva organizzare in classi condivise da un team, e il database ha avuto un driver moderno.

  3. 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.

    • namespace
    • function () use ()
    • static::
    Cosa ha significato per noi

    Librerie di autori diversi potevano finalmente convivere nello stesso progetto senza conflitti di nomi.

  4. 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 noi

    I vecchi siti che si affidavano a register_globals hanno smesso di funzionare, e aggiornarli significava prima correggerli.

  5. 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().

    • opcache
    • yield
    • password_hash()
    Cosa ha significato per noi

    Il codice compilato resta in memoria invece di essere riletto a ogni richiesta. È ancora la prima impostazione che controlliamo su qualsiasi server PHP.

  6. 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.

  7. 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 noi

    Le vecchie funzioni mysql_* sono state rimosse: un motivo frequente per cui un vecchio sito si rompeva con questo aggiornamento.

  8. PHP 7.4 2019

    Proprietà tipizzate e preloading

    Proprietà tipizzate, arrow function, l'operatore ??=, il preloading di OPcache e FFI.

    • public int $id
    • fn ($x) =>
    • ??=
    Cosa ha significato per noi

    L'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.

  9. 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 noi

    Molti 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.

  10. PHP 8.1 2021

    Enum, readonly e fiber

    Enum nativi, proprietà readonly, fiber, il tipo di ritorno never e la sintassi first-class callable.

    • enum
    • readonly
    • Fiber
    • never
    Cosa ha significato per noi

    I fiber hanno aperto la strada a librerie PHP asincrone senza cambiare il modo in cui gira una normale richiesta.

  11. 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)|null
    • Random\Randomizer
    Cosa ha significato per noi

    Le proprietà dinamiche sono state deprecate, e i plugin più vecchi hanno riempito i log di avvisi finché non sono stati aggiornati.

  12. 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 noi

    Una versione più tranquilla, e proprio per questo un passo facile per i siti già sull'8.2.

  13. 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 noi

    Getter e setter che prima richiedevano un metodo ciascuno ora appartengono alla proprietà stessa, quindi c'è meno codice da mantenere.

  14. 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\Uri
    • clone($o, [ ])
    Cosa ha significato per noi

    La 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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. I dati

    MySQL o MariaDB conserva i record, e Redis tiene in memoria ciò che viene richiesto più e più volte.

Sotto tutti e cinque

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.

  1. Elenchiamo cosa usa ogni sito

    La versione di PHP, le estensioni, e i plugin o i pacchetti che lo tengono indietro.

  2. 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.

  3. Sistemiamo ciò che si rompe

    Funzioni rimosse, chiamate deprecate e plugin senza aggiornamenti vengono corretti o sostituiti.

  4. Un sito alla volta

    Ogni sito passa al suo nuovo pool per conto proprio, e può tornare subito indietro se è sfuggito qualcosa.

php-fpmUn server, più versioni
SitoPHPPoolStato
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
Un server di esempio

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
  1. 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
  2. PHP 8.0 Fine del supporto
    Rilasciata
    2020-11-26
    Fine del supporto
    2023-11-26
  3. PHP 8.1 Fine del supporto
    Rilasciata
    2021-11-25
    Fine del supporto
    2025-12-31
  4. 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
  5. 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
  6. 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
  7. 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.

MickeyRisponde in pochi secondi