web-dev-qa-db-fra.com

Comment installer php 7 pour courir à côté de php 5 sur Ubuntu avec nginx

Je veux essayer php 7 et faire en sorte que mon site fonctionne sur php 7 tout en maintenant les autres sites sur php 5 au cas où. de sorte que de la config d'hôte virtuel de domaine je puisse décider quel php exécuter.

J'ai regardé la gestion des versions php et vu qu'il est 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 procéder sous nginx. J'ai aussi hhvm courir au cas où cela compte.

10
Dreaded semicolon

Tout d'abord, vous devez installer php5-fpm et php7.0-fpm à partir de le PPA de 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

Ensuite, avec nginx, nous suggérons d’utiliser les packages FPM. Donc, installez les paquets 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: ne réponse à la question "Comment installer php 7?" , ainsi que des commentaires personnalisés et des modifications de moi-même.


Deuxièmement, nginx. nginx ne peut être aussi bon que vos configurations. Vous avez très probablement un bloc de manipulation de PHP sur votre (vos) serveur (s) nginx similaire à celui-ci (à partir 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 passera seulement à php5-fpm. En effet, cela s'appliquera à l'ensemble de votre bloc de serveur. Le moyen le plus simple de procéder consiste à créer un deuxième bloc serveur (pour, par exemple, test.domain.tld) et à indiquer à la place la destination PHP 7.0 fastcgi_pass. Dans php7.0 sur Xenial, cela va aboutir à quelque chose comme ça (extrait d'un correctif récemment chargé dans le paquet Xenial nginx), cependant je ne connais pas la disposition du paquet d'Ondrej, donc je ne peux pas donner les détails exacts (vérifier /etc/php7.0/fpm/pool.d/www.conf ou 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 bloc php5, pour valider que les sockets php5.6 sont utilisés à la place du socket php5 intégré (que nous venons de supprimer).

Ensuite, utilisez le deuxième domaine de test pour exécuter le test php7.0. Assurez-vous cependant de faire une copie de votre site si vous voulez le faire - il sera probablement nécessaire de disposer d'une copie de test distincte de sorte qu'une fois que vous avez fini de le faire fonctionner avec php7.0, vous pouvez simplement "basculer". sans problème.

Malheureusement, il n’existe pas de moyen simple de faire fonctionner php5 et php7.0 dans le même bloc de serveur, non sans modifier les chemins d’accès de votre site, de vos applications, etc. pour en avoir un pour php5 et un pour php7.0; De telles retouches sur les sites peuvent être désagréables, d’où la suggestion d’exécuter deux copies distinctes du code de site, l’une pour la migration php7.0 et l’autre pour php5 en production.

12
Thomas Ward