web-dev-qa-db-fra.com

version PHP dédiée par hôte virtuel

J'ai un serveur Ubuntu 18.04 LTS avec PHP7.2 et PHP5.6 installé. Jusqu'à présent, deux hôtes virtuels sont configurés de la même manière:

<VirtualHost *:80>
    # domain: php56.test
    # public: /var/www/php56/   

    ServerName php56.test
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/php56

    <Directory /var/www/php56/>
        Require all granted
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
    </Directory>

    ErrorLog ${Apache_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>

Maintenant, je veux dédier PHP5.6 à php56.test et PHP7.2 à php72.test.

J'ai joué autour des fichiers .conf en fonction de plusieurs articles sur le Web, mais sans succès. Soit je pouvais faire tourner PHP5.6 ou PHP7.2, mais pas les deux à la fois comme requis pour les sites dédiés. Par défaut, le fichier .conf est tel que décrit ci-dessus et php56.test.conf.

3
Thomas-AC

en fait, j'ai trouvé une solution de travail sans besoin de .htaccess. Vérifiez comment installer plusieurs PHP version avec Apache sous Ubuntu 18.04 et 16.04 - https://tecadmin.net/install-multiple-php-version-Apache-ubuntu/

Merci à Rahul Kumar.

1
Thomas-AC

Vous ne pouvez pas faire cela avec mod_php, il ne peut charger qu'une version à la fois.

Vous pouvez exécuter plusieurs instances FPM sur différentes versions, ou utiliser PHP via FCGI (des tutoriels pour chacune d'entre elles sont sur le net), mais vous perdrez les intégrations mod_php (comme php_flag et php_value dans les configs) qui vous pouvez avoir besoin.

Vous pouvez aussi mélanger et assortir - ayez donc une version dans mod_php et d’autres dans FCGI ou FPM; J'ai déjà eu la version "notoirement valide" dans mod_php lors des tests sous FCGI, puis mis à niveau la version mod_php lorsque je suis prêt.

Alternativement, vous pouvez exécuter deux installations Apache avec un mod_php différent dans chacune, mais cela peut devenir plus compliqué (et ils ne peuvent pas partager un socket).

Pour ce faire, la méthode moderne consiste à utiliser un VM ou un conteneur.

2
BigRedS