Questa pagina contiene le istruzioni per la migrazione dai runtime PHP di prima generazione a quelli di seconda generazione. Per eseguire l'upgrade dell'app di seconda generazione in modo che utilizzi l'ultima versione di PHP supportata, consulta Eseguire l'upgrade di un'applicazione esistente.
PHP 5 è deprecato. Non potrai eseguire il deployment delle applicazioni PHP 5, anche se la tua organizzazione in precedenza utilizzava una policy dell'organizzazione per riattivare i deployment dei runtime legacy. Le applicazioni PHP 5 esistenti continueranno a essere eseguite e a ricevere traffico. Ti consigliamo di eseguire la migrazione all'ultima versione di PHP supportata.
La migrazione a un runtime PHP di seconda generazione supportato ti consente di utilizzare funzionalità del linguaggio aggiornate e di creare app più portatili, con codice idiomatico.
Problemi di compatibilità tra PHP 5.5 e i runtime PHP di seconda generazione
La documentazione ufficiale di PHP fornisce informazioni sulla migrazione da diverse versioni di PHP:
- Migrazione da PHP 5.5.x a PHP 5.6.x
- Migrazione da PHP 5.6.x a PHP 7.0.x
- Migrazione da PHP 7.0.x a PHP 7.1.x
- Migrazione da PHP 7.1.x a PHP 7.2.x
- Migrazione da PHP 7.2.x a PHP 7.3.x
- Migrazione da PHP 7.3.x a PHP 7.4.x
- Migrazione da PHP 7.4.x a PHP 8.0.x
- Migrazione da PHP 8.0.x a PHP 8.1.x
Differenze principali tra PHP 5.5 e i runtime PHP di seconda generazione
Di seguito è riportato un riepilogo delle differenze tra PHP 5.5 e i runtime PHP di seconda generazione nell'ambiente standard di App Engine:
Differenze nella memoria utilizzata
I runtime di seconda generazione hanno una baseline di memoria utilizzata più elevata rispetto ai runtime di prima generazione. Ciò è dovuto a diversi fattori, come le diverse versioni dell'immagine di base e le differenze nel modo in cui le due generazioni calcolano l'utilizzo della memoria.
I runtime di seconda generazione calcolano la memoria utilizzata dell'istanza come la somma di ciò che utilizza un processo dell'applicazione e il numero di file dell'applicazione memorizzati nella cache in modo dinamico in memoria. Per evitare che le applicazioni che richiedono molta memoria subiscano arresti anomali dell'istanza a causa del superamento dei limiti di memoria, esegui l'upgrade a una classe di istanza più grande con più memoria.
Differenze nell'utilizzo della CPU
I runtime di seconda generazione possono avere una baseline di utilizzo della CPU più elevata all'avvio a freddo dell'istanza. A seconda della configurazione di scalabilità di un'applicazione, ciò potrebbe avere effetti collaterali indesiderati, ad esempio un numero di istanze superiore a quello previsto se un'applicazione è configurata per scalare in base all'utilizzo della CPU. Per evitare questo problema, esamina e testa le configurazioni di scalabilità dell'applicazione per assicurarti che il numero di istanze sia accettabile.
Differenze nelle intestazioni delle richieste
I runtime di prima generazione consentono l'inoltro delle intestazioni delle richieste con trattini bassi (ad es. X-Test-Foo_bar) all'applicazione. I runtime di seconda generazione introducono Nginx nell'architettura host. Di conseguenza, i runtime di seconda generazione sono configurati per rimuovere automaticamente le intestazioni con trattini bassi (_). Per evitare problemi con l'applicazione, non utilizzare trattini bassi nelle intestazioni delle richieste dell'applicazione.
Eseguire la migrazione del file app.yaml
Devi inserire un controller front-end per gestire tutto il routing nella tua applicazione. Per ulteriori informazioni, consulta Avvio dell'applicazione.
I runtime PHP di seconda generazione non consentono la personalizzazione dell'elemento del gestore script. L'unico valore valido è auto, perché tutto il traffico viene gestito utilizzando il comando del punto di ingresso. Tutti i gestori di URL non statici devono includere script: auto per il deployment riuscito.
Il comportamento di alcuni elementi nel file di configurazione app.yaml è stato modificato:
| Elemento | Tipo di modifica | Descrizione |
|---|---|---|
entrypoint | Aggiunta | Facoltativamente, utilizza questo campo per specificare il comando che verrà eseguito all'avvio dell'app. |
app_engine_bundled_services | Per le app che utilizzano i servizi in bundle legacy |
Configura questo campo per accedere a specifici servizi in bundle legacy per le versioni di PHP supportate.
Per ulteriori informazioni sulle impostazioni di configurazione app_engine_bundled_services, consulta il
app.yaml riferimento al file. |
threadsafe | Deprecato | Si presume che tutte le applicazioni siano thread-safe, il che significa che un'istanza può gestire più richieste contemporaneamente. |
api_version | Deprecato | In precedenza era obbligatorio, ma non è necessario nei runtime PHP di seconda generazione. |
application_readable | Deprecato | |
builtins | Deprecato | |
libraries | Deprecato | Le dipendenze di terze
parti arbitrarie possono essere installate utilizzando un file di metadati composer.json. |
handlers | Modificato |
|
Se utilizzi uno dei campi deprecati, si verificherà un errore durante il deployment dell'app.
Per ulteriori informazioni, consulta il app.yaml riferimento.
Limitazioni del runtime ridotte
I runtime PHP di seconda generazione hanno meno limitazioni rispetto al runtime PHP 5.5.
- Installa dipendenze di terze parti.
- Il runtime include un file system completo.
- Crea thread o processi in background che rimangono attivi oltre l'ambito della richiesta durante l'esecuzione dell'istanza.
- Utilizza la libreria client Google Cloud per PHP per integrare le app con altri Google Cloud servizi. Per ulteriori informazioni, consulta la pagina Installare la libreria client Google Cloud.
Per ulteriori informazioni, consulta l'ambiente di runtime PHP.
Eseguire la migrazione dall'SDK PHP di App Engine
Per ridurre l'impegno e la complessità della migrazione del runtime, l'ambiente standard di App Engine ti consente di accedere a molti servizi e API in bundle legacy nel runtime PHP di seconda generazione, ad esempio Memcache. La tua app PHP di seconda generazione può chiamare le API dei servizi in bundle tramite l'SDK App Engine e accedere alla maggior parte delle stesse funzionalità del runtime PHP 5. Non tutti i servizi in bundle legacy disponibili per PHP 5 hanno un servizio corrispondente nei runtime PHP di seconda generazione. Per l'elenco completo delle API dei servizi in bundle legacy disponibili per i runtime PHP di seconda generazione, consulta la documentazione di riferimento delle API dei servizi in bundle legacy.
Hai anche la possibilità di utilizzare Google Cloud prodotti che offrono funzionalità simili ai servizi in bundle legacy. Questi Google Cloud prodotti forniscono una libreria client idiomatica di Google Cloud CLI. Per i servizi in bundle legacy non disponibili come prodotti separati in Google Cloud, ad esempio la ricerca, puoi utilizzare provider di terze parti o altre soluzioni alternative. Per saperne di più sulla migrazione ai servizi non in bundle, consulta Eseguire la migrazione dai servizi in bundle.
Eseguire l'applicazione in locale
Per testare l'applicazione ed eseguirla in locale:
Installa localmente una versione di PHP corrispondente a un runtime PHP di seconda generazione disponibile nell'ambiente standard di App Engine.
Installa un server web e utilizzalo per pubblicare l'app in locale.
Ad esempio, avvia il server HTTP eseguendo il comando seguente:
php -S localhost:8080
Quindi, visualizza l'applicazione nel browser web all'indirizzo http://localhost:8080.