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

10

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ù. afin que de l'hôte de domaine virtuel config je peux décider quel php à exécuter.

J'ai examiné la gestion des versions php et constaté qu'il était possible d'exécuter deux versions, bien que celles que j'ai trouvées semblaient être 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.

    
posée Dreaded semicolon 23.03.2016 - 07:31
la source

1 réponse

12

Tout d'abord, vous devez installer php5-fpm et php7.0-fpm dans le PPA de pour php5 co-installable et php7.0. :

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

Nous suggérons ensuite, avec nginx , 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: Une réponse à la question "Comment installer php 7?" question , ainsi que des commentaires et modifications personnalisés de ma part.

Deuxièmement, nginx . nginx peut seulement être aussi bon que vos configurations. Vous avez très probablement un bloc de traitement 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 ne passera qu'à php5-fpm . En effet, cela s'appliquera à l'ensemble de votre bloc de serveur. Le moyen le plus simple d’y parvenir est d’avoir un deuxième bloc serveur (pour, par exemple, test.domain.tld ) et de fournir plutôt 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), mais je ne connais pas la disposition du paquet d'Ondrej, je ne peux donc pas donner de détails exacts (contrôle%)/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 , afin de valider que php5.6 sockets 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 d’avoir une copie de test distincte de sorte qu’une fois que vous avez fini de le faire fonctionner avec php7.0 , vous pouvez simplement "changer". sur 'sans problème.

Malheureusement, il n’existe pas de moyen facile de faire fonctionner php5 et php7.0 au sein du même bloc 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 de créer deux copies distinctes du code de site, une pour php7.0 migration et une pour php5 en production.

    
réponse donnée Thomas Ward 23.03.2016 - 13:24
la source

Lire d'autres questions sur les étiquettes