Come installare php 7 da eseguire accanto a php 5 su Ubuntu con nginx


9

Voglio provare php 7 e far funzionare il mio sito su php 7 allo stesso tempo mantenendo altri siti funzionanti su php 5 per ogni evenienza. così che dalla configurazione dell'host virtuale del dominio posso decidere quale php eseguire.

Ho esaminato la gestione delle versioni di php e ho visto che è possibile eseguire due versioni, anche se quelle che ho trovato sembrano apache. Sto cercando istruzioni più chiare su come farlo sotto nginx. Ho anche hhvm in esecuzione nel caso sia importante.

Risposte:


11

Innanzitutto, è necessario installare php5-fpme php7.0-fpmdal PPA di Ondřej Surý per php5 e php7.0 co-installabili. :

sudo apt-get install python-software-properties
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

Quindi, con nginx, suggeriamo di usare i pacchetti FPM. Quindi, installa i pacchetti di conseguenza:

sudo apt-get update

# We need to ***remove*** php5 packages, so we can use php5.6 packages
# from the PPA instead
sudo apt-get remove php5-common
sudo apt-get autoremove

# Now we install php5.6 packages.
sudo apt-get install php5.6-fpm

# Now, install php7.0-fpm.  You may need to install separate PHP plugins
# for databases, extensions, etc. later.
sudo apt-get install php7.0-fpm

Fonte: una risposta su "Come installare php 7?" domanda e commenti personalizzati e modifiche da me stesso.


In secondo luogo, nginx. nginxpuò solo essere buono come le tue configurazioni. Molto probabilmente hai un blocco di gestione PHP sul tuo blocco server nginx simile a questo (dalla configurazione di esempio 'default'):

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

Questa configurazione passerà solo a php5-fpm. In effetti, questo vale per l'intero blocco server. Il modo più semplice per farlo è avere un secondo blocco server (per esempio, test.domain.tld) e fornire invece la fastcgi_passdestinazione PHP 7.0 . In php7.0 su Xenial, questo sta per finire qualcosa di simile (estratto da una correzione di recente caricato il pacchetto nginx Xenial), però non so il layout del pacchetto di Ondrej quindi non posso dare specifiche esatte là (assegno /etc/php7.0/fpm/pool.d/www.confo simile per determinare dove sta ascoltando):

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php7.0-fpm:
    fastcgi_pass unix:/var/run/php7.0-fpm.sock;
}

Dovrai fare qualcosa di simile per il tuo php5blocco, per convalidare che php5.6vengano usati i socket invece del php5socket incorporato (che abbiamo appena rimosso).

Quindi, utilizzare il secondo dominio di test per eseguire il php7.0test. Assicurati, tuttavia, di fare una copia del tuo sito se vuoi farlo - probabilmente sarà necessario disporre di una copia di prova separata in modo che una volta finito di farlo funzionare php7.0, puoi semplicemente 'passare' senza problema.

Sfortunatamente, non esiste un modo semplice per creare php5e php7.0lavorare all'interno dello stesso blocco server, non senza alterare i percorsi per il tuo sito, applicazioni, ecc. Di cui avere uno per php5e uno per php7.0; tale rielaborazione dei siti può diventare sgradevole, quindi il suggerimento di eseguire due copie separate del codice del sito, uno per la php7.0migrazione e uno per la php5produzione.


Se si sceglie in questo modo, è necessario attenersi all'utilizzo dei *php5.6*pacchetti forniti da Ondřej e rimuovere i php5pacchetti semplici .
muru,

@muru probabilmente ha ragione, lo scrivo in
Thomas Ward

Grazie! Funzionava meglio di quanto mi aspettassi. all'inizio c'erano problemi con pear e cli, ma si è scoperto che era un bug nel repository che dovevo aggiornare e ha funzionato. Il mio sito funziona molto velocemente su php7. è fantastico.
Temibile punto e virgola

La calza fpm aveva anche un 5.6 nel nome.
toster-cx,

A partire da quasi il 2018, la configurazione php5.6 per NGINX èfastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
Ecksters,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.