web-dev-qa-db-fra.com

En cours d'exécution deux PHP versions sur le même serveur

J'ai deux projets sur le serveur local, l'un exécute PHP5.6 et l'autre, PHP7.0. Serait-il possible d'activer ces deux versions en fonction des projets? J'ai déjà essayé d'ajouter AddHandler application/x-httpd-php7 .php dans l'un des projets htaccess mais cela ne fonctionne pas. Actuellement, PHP7.0 et PHP5.6-fpm sont déjà installés sur le serveur. Ci-dessous, la capture d'écran du phpinfo.

 enter image description here

13
Makubex

Donc, après avoir cherché sur Google pendant toute la journée. J'ai réussi à exécuter mes deux projets dans FastCgi sur différentes versions de PHP. Merci aux gars de ce forum . J'ai tout désinstallé, y compris Apache et recommencer. Voici les étapes que j'ai utilisées pour activer deux versions de PHP sur mon serveur local. En fait, mon ordinateur fonctionne sous Linux Mint 18.

  1. En supposant que vous ayez déjà installé Apache, créé un hôte virtuel pour les deux projets et ajouté les PPA nécessaires. Permet d'appeler les projets site56.local pour php5.6 et site70.local pour php7.0. Installez php5.6-fpm et php7.0-fpm en le lançant.

Sudo apt-get install php5.6-fpm

Sudo apt-get install php7.0-fpm

  1. Créez deux fichiers sous/usr/lib/cgi-bin/(honnêtement, je ne sais pas si cette étape est encore nécessaire), puis enregistrez.

Sudo nano/usr/lib/cgi-bin/php56-fcgi

Sudo nano/usr/lib/cgi-bin/php70-fcgi

  1. Ouvrez le fichier de configuration php56 "/etc/Apache2/conf-available/php5.6-fpm.conf" et ajoutez cette configuration et enregistrez-la.

    <IfModule mod_fastcgi.c> AddHandler php56-fcgi .php Action php56-fcgi /php56-fcgi Alias /php56-fcgi /usr/lib/cgi-bin/php56-fcgi -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization Action php70-fcgi /php70-fcgi Alias /php70-fcgi /usr/lib/cgi-bin/php70-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization </IfModule> <Directory /usr/lib/cgi-bin> Require all granted </Directory>

  2. Activez maintenant la nouvelle configuration Apache.

Sudo a2enconf php5.6-fpm

  1. Si vous avez installé php5.6 et php5.7, assurez-vous de désactiver ces deux et redémarrez Apache.

Sudo a2dismod php5.6 php7.0

Sudo systemctl redémarrer Apache2

  1. Créez un fichier .htacces sur le projet qui devrait s'exécuter sur php7.0 et ajoutez ce gestionnaire.

AddHandler php70-fcgi .php

  1. Maintenant, créez un fichier phpinfo sur les deux projets et si vous voyez quelque chose comme ça, alors félicitations!

PS: assurez-vous d’activer htaccess dans votre Apache2.conf ou httpd.conf

site56.local/phpinfo.php  enter image description here

site70.local/phpinfo.php  enter image description here

21
Makubex

Tout d'abord, assurez-vous que toute la configuration liée à PHP est désactivée en exécutant les commandes suivantes:

# ls -la/etc/Apache2/conf-enabled | grep php

# ls -la/etc/Apache2/mods-enabled | grep php

Configurez une version différente de PHP-FPM pour un site spécifique:

Ajoutez la ligne suivante dans votre fichier VirtualHost existant.

Include "conf-available/php7.2-fpm.conf"

Par exemple,

# vim /etc/Apache2/sites-enabled/symfony.local.conf

<VirtualHost *:80>
    ServerName symfony.local

    Include "conf-available/php7.2-fpm.conf"

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/symfony.local/curr/public

    <Directory /var/www/symfony.local/curr/web>
        AllowOverride All
    </Directory>
</VirtualHost>
6
Jun Xie

Cela ne fonctionne pas pour debian 9 Stretch. Il m'a fallu un certain temps pour savoir quoi faire, mais à la fin j'ai trouvé une solution qui semble encore plus simple:

Sudo apt-get install php5.6-fpm

Sudo apt-get install php7.0-fpm

Sudo a2enconf php5.6-fpm

Si vous avez installé php5.6 et php5.7, assurez-vous de désactiver ces deux et redémarrez Apache.

Sudo a2dismod php5.6 php7.0

Sudo systemctl restart Apache2

À ce stade, tous vos sites doivent fonctionner sur php 5.6. 

Pour les sites qui ont besoin de PHP 7, ajoutez cette ligne dans le vhost:

ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php/php7.0-fpm.sock|fcgi://localhost/path/to/my/main/file"

Ça devrait faire l'affaire :)

2
JGL

J'ai essayé d'implémenter la solution Makubex et cela a fonctionné. Il n’ya qu’un problème que j’ai eu avec une lampe LAMP nouvellement installée, à savoir le fait que fastcgi n’était pas activé .

Sudo apt-get install libapache2-mod-fastcgi php5.6-fpm php5.6 php5.6-dev php5.6-mcrypt php5.6-mbstring php5.6-mysql php5.6-Zip php5.6-Gd php5.6-xml php7.1-fpm libapache2-mod-fastcgi php7.1-fpm php7.1 php7.1-dev php7.1-mbstring php7.1-mysql php7.1-Zip php7.1-Gd php7.1-xml php7.1-curl php7.1-intl php7.1-json php7.1-mcrypt

Et alors:

a2enmod actions
a2enmod fastcgi

Après cela, la solution fonctionnait parfaitement . J'ai obtenu les deux précédents de Exécuter plusieurs versions PHP sur le même serveur à l'aide de php-fpm et xdebug sur Ubuntu 16.04

2
user1215741

Cela peut être fait en désactivant et en activant la nouvelle version de PHP.

  • passer à l'ancienne version - 
    a2dismod php7.0 
    service Apache2 redémarrer
  • passer à la nouvelle version
    a2enmod php7.0
    service Apache2 redémarrer
0
Vikas Chauhan

Après avoir essayé de suivre vos instructions, j’ai trouvé un moyen probablement plus facile d’obtenir le même résultat.

En ajoutant la ligne suivante

ProxyPassMatch "^/php70project/.*\.php(/.*)?$" "fcgi://localhost:9070/var/www/" enablereuse=on

dans la configuration Apache vhost, vous pouvez changer la version de PHP dans le répertoire php70project de votre racine/hôte/var/www en la version 7 exécutée en tant que fastcgi.

L'approche suivante pour une utilisation avec unix socket

ProxyPassMatch "^/php70project/.*\.php(/.*)?$" "unix:/var/run/php70fpm.sock|fcgi://localhost/var/www"

ne fonctionne pas comme prévu . Malheureusement, je n'ai pas trouvé le code correct pour que cela fonctionne, mais il n'y a pas d'exemple d'utilisation de socket Unix avec sous-dossier sur cette page https://httpd.Apache.org/docs/2.4 /mod/mod_proxy_fcgi.html cela pourrait ne pas être possible.

0
saschadd