Cómo instalar php 7 para que se ejecute junto a php 5 en ubuntu con nginx

9

Quiero probar php 7 y hacer que mi sitio funcione en php 7 al mismo tiempo manteniendo otros sitios trabajando en php 5 por si acaso. para que desde la configuración del host virtual del dominio pueda decidir qué php ejecutar.

Miré la gestión de versiones de php y vi que es posible ejecutar dos versiones, aunque las que encontré parecen apache. Estoy buscando instrucciones más claras sobre cómo hacer esto en nginx. También tengo hhvm ejecutándose en caso de que eso importe.

Punto y coma temido
fuente

Respuestas:

11

En primer lugar, debe instalar php5-fpmy php7.0-fpmdesde el PPA de Ondřej Surý para php5 y php7.0 coinstalables. :

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

Luego, con nginx, sugerimos usar los paquetes FPM. Por lo tanto, instale los paquetes en consecuencia:

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

Fuente: Una respuesta sobre "¿Cómo instalar php 7?" pregunta y comentarios personalizados y modificaciones de mi parte.


En segundo lugar, nginx. nginxsolo puede ser tan bueno como tus configuraciones. Es muy probable que tenga un bloque de manejo de PHP en su (s) bloque (s) de servidor nginx similar a este (de la configuración de ejemplo 'predeterminada'):

# 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;
}

Esta configuración solo pasará a php5-fpm. En efecto, esto se aplicará a todo el bloque del servidor. La forma más fácil de hacerlo es tener un segundo bloque de servidor (para, por ejemplo, test.domain.tld) y proporcionar en su lugar el fastcgi_passdestino PHP 7.0 . En php7.0 en Xenial, esto va a terminar algo como esto (extraído de una corrección recientemente cargada en el paquete Xenial nginx), sin embargo, no conozco el diseño del paquete de Ondrej, por lo que no puedo dar detalles específicos allí (verifique /etc/php7.0/fpm/pool.d/www.confo similar para determinar dónde está escuchando):

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

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

Tendrá que hacer algo similar para su php5bloque, para validar que php5.6se utilizan sockets en lugar del php5socket incorporado (que acabamos de eliminar).

Luego, use el segundo dominio de prueba para ejecutar la php7.0prueba. Sin embargo, asegúrese de hacer una copia de su sitio si desea hacer esto; es probable que sea necesario tener una copia de prueba por separado para que, una vez que haya terminado de hacerlo funcionar php7.0, pueda simplemente 'cambiar' sin problema.

Desafortunadamente, no hay una manera fácil de crear php5y php7.0trabajar dentro del mismo bloque de servidor, no sin alterar sus rutas para que su sitio, aplicaciones, etc. tengan uno para php5y otro para php7.0; Tal reelaboración de sitios puede ser desagradable, de ahí la sugerencia de ejecutar dos copias separadas del código del sitio, una para la php7.0migración y otra para la php5producción.

Thomas Ward
fuente
Si elige de esta manera, debe seguir usando los *php5.6*paquetes que proporciona Ondřej y eliminar los php5paquetes simples .
Muru
@muru probablemente en lo cierto, voy a escribir que en
Thomas Ward,
¡Gracias! Esto funcionó mejor de lo que esperaba. al principio hubo problemas con pera y cli, pero resultó que era un error en el repositorio que necesitaba actualizar y funcionó. Mi sitio funciona muy rápido en php7. es asombroso.
Temido punto y coma
El calcetín fpm también tenía un 5.6 en el nombre.
toster-cx
A partir de casi 2018, la configuración php5.6 para NGINX esfastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
Ecksters