Comment installer PHP 7 pour fonctionner à côté de PHP 5 sur Ubuntu avec Nginx

9

Je veux essayer php 7 et faire fonctionner mon site sur php 7 en même temps en gardant d'autres sites travaillant sur php 5 au cas où. de sorte qu'à partir de la configuration de l'hôte virtuel du domaine, je puisse décider quel php exécuter.

J'ai regardé la gestion des versions de php et j'ai vu qu'il était possible d'exécuter deux versions, bien que celles que j'ai trouvées semblent pour apache. Je cherche des instructions plus claires sur la façon de le faire sous nginx. J'ai également hhvm en cours d'exécution au cas où cela compte.

Point-virgule redouté
la source

Réponses:

11

Tout d'abord, vous devez installer php5-fpmet à php7.0-fpmpartir du PPA d' Ondřej Surý pour php5 et php7.0 co-installables. :

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

Nous nginxsuggérons ensuite, avec , d'utiliser les packages FPM. Alors, installez les packages en conséquence:

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

Source: Une réponse sur le "Comment installer php 7?" question et commentaires personnalisés et modifications de moi-même.


En second lieu , nginx. nginxne peut être aussi bon que vos configurations. Vous avez très probablement un bloc de gestion PHP sur votre ou vos blocs de serveur nginx similaire à celui-ci (de l'exemple de configuration 'par défaut'):

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

Cette configuration ne sera transmise qu'à php5-fpm. En effet, cela s'appliquera à l'ensemble de votre bloc serveur. La façon la plus simple de procéder est d'avoir un deuxième bloc serveur (pour, disons test.domain.tld) et de fournir à la place la fastcgi_passdestination PHP 7.0 . En php7.0 sur Xenial, cela va finir par quelque chose comme ça (extrait d'un correctif récemment téléchargé dans le paquet Xenial nginx), mais je ne connais pas la disposition du paquet Ondrej donc je ne peux pas donner de détails précis là-bas (vérifier /etc/php7.0/fpm/pool.d/www.confou similaire pour déterminer où il écoute):

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

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

Vous devrez faire quelque chose de similaire pour votre php5bloc, pour valider que les php5.6sockets sont utilisés à la place du php5socket intégré (que nous venons de supprimer).

Ensuite, utilisez le deuxième domaine de test pour exécuter le php7.0test. Assurez-vous cependant de faire une copie de votre site si vous voulez le faire - il sera probablement nécessaire d'avoir une copie de test distincte de sorte qu'une fois que vous aurez fini de l'utiliser php7.0, vous pourrez simplement `` basculer '' sans problème.

Il n'y a malheureusement pas de moyen facile de créer php5et de php7.0travailler dans le même bloc serveur, non sans modifier vos chemins d'accès à votre site, vos applications, etc. pour en avoir un pour php5et un pour php7.0; une telle refonte des sites peut devenir désagréable, d'où la suggestion d'exécuter deux copies distinctes du code du site, une pour la php7.0migration et une pour la php5production.

Thomas Ward
la source
Si vous choisissez de cette façon, vous devez vous en tenir à l'utilisation des *php5.6*packages fournis par Ondřej et supprimer les php5packages simples .
muru
@muru a probablement raison, j'écrirai cela dans
Thomas Ward
Merci! Cela a fonctionné mieux que ce à quoi je m'attendais. il y avait des problèmes avec pear et cli au début, mais il s'est avéré que c'était un bug dans le dépôt que j'avais besoin de mettre à jour et cela a fonctionné. Mon site fonctionne très rapidement sur php7. c'est incroyable.
Point-virgule
La chaussette fpm avait également un 5.6 dans le nom.
toster-cx
Depuis presque 2018, la configuration php5.6 pour NGINX estfastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
Ecksters