it-swarm.com.de

Zwei laufen PHP Versionen auf demselben Server

Ich habe zwei Projekte auf dem lokalen Server, ein Projekt führt PHP5.6 und das andere PHP7.0 aus. Wäre es jetzt möglich, diese beiden Versionen basierend auf den Projekten zu aktivieren? Ich habe bereits versucht, AddHandler application/x-httpd-php7 .php in einem der Projekte htaccess hinzuzufügen, aber es funktioniert nicht. Derzeit sind auf dem Server bereits PHP7.0 und PHP5.6-fpm installiert. Unten ist der Screenshot der phpinfo.

 enter image description here

13
Makubex

Also nach dem ganzen Tag bei Google suchen. Ich habe es geschafft, meine beiden Projekte in FastCgi auf verschiedenen PHP-Versionen auszuführen. Danke an die Jungs aus diesem Forum . Ich habe alles deinstalliert, einschließlich Apache, und von vorne beginnen. Nachfolgend finden Sie die Schritte, die ich zum Aktivieren von zwei Versionen von PHP auf meinem lokalen Server verwendet habe. Übrigens, mein Computer läuft unter Linux Mint 18.

  1. Vorausgesetzt, Sie haben Apache bereits installiert, einen virtuellen Host für die beiden Projekte erstellt und die erforderlichen PHP-PPAs hinzugefügt. Rufen wir die Projekte site56.local für php5.6 und site70.local für php7.0 auf. Installieren Sie php5.6-fpm und php7.0-fpm, indem Sie es ausführen.

Sudo apt-get install php5.6-fpm

Sudo apt-get install php7.0-fpm

  1. Erstellen Sie zwei Dateien unter/usr/lib/cgi-bin/(ehrlich gesagt weiß ich nicht, ob dieser Schritt noch erforderlich ist), und speichern Sie.

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

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

  1. Öffnen Sie die php56-Conf-Datei "/etc/Apache2/conf-available/php5.6-fpm.conf" und fügen Sie diese Konfiguration hinzu und speichern Sie sie.

    <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. Aktivieren Sie jetzt die neue Apache-Konfiguration.

Sudo a2enconf php5.6-fpm

  1. Wenn Sie php5.6 und php5.7 installiert haben, stellen Sie sicher, dass Sie diese beiden deaktivieren und Apache neu starten.

Sudo a2dismod php5.6 php7.0

Sudo systemctl neu starten Apache2

  1. Erstellen Sie eine .htacces-Datei für das Projekt, das unter php7.0 ausgeführt werden soll, und fügen Sie diesen Handler hinzu.

AddHandler php70-fcgi .php

  1. Erstellen Sie nun eine phpinfo-Datei für die beiden Projekte und wenn Sie so etwas sehen, dann gratulieren Sie!

PS: Stellen Sie sicher, dass Sie htaccess in Ihrer Apache2.conf oder httpd.conf aktivieren

site56.local/phpinfo.php  enter image description here

site70.local/phpinfo.php  enter image description here

21
Makubex

Stellen Sie zunächst sicher, dass alle mit PHP verbundenen Konfigurationen deaktiviert sind, indem Sie die folgenden Befehle ausführen:

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

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

Eine andere Version von PHP-FPM für eine bestimmte Site einrichten:

Fügen Sie die folgende Zeile in Ihre vorhandene VirtualHost-Datei ein.

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

Zum Beispiel,

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

<VirtualHost *:80>
    ServerName symfony.local

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

    ServerAdmin [email protected]
    DocumentRoot /var/www/symfony.local/curr/public

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

Es funktioniert nicht für Debian 9 Stretch. Ich habe eine Weile gebraucht, um herauszufinden, was zu tun ist, aber am Ende habe ich eine Lösung gefunden, die noch einfacher erscheint:

Sudo apt-get install php5.6-fpm

Sudo apt-get install php7.0-fpm

Sudo a2enconf php5.6-fpm

Wenn Sie php5.6 und php5.7 installiert haben, stellen Sie sicher, dass Sie diese beiden deaktivieren und Apache neu starten.

Sudo a2dismod php5.6 php7.0

Sudo systemctl restart Apache2

An diesem Punkt müssen alle Ihre Sites mit PHP 5.6 funktionieren. 

Fügen Sie für die Sites, die PHP 7 benötigen, diese Zeile im vhost hinzu:

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

Es sollte den Trick tun :)

2
JGL

Ich habe versucht, die Lösung von Makubex zu implementieren, und es hat funktioniert. Es gab nur ein Problem, das ich mit einer neu installierten LAMPE hatte. Das war die Tatsache, dass fastcgi nicht aktiviert war .. Ich habe gerade PHP erneut mit dem folgenden Skript installiert und anschließend fastcgi aktiviert.

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

Und dann:

a2enmod actions
a2enmod fastcgi

Danach funktionierte die Lösung einwandfrei . Ich habe die beiden oben genannten Versionen von Run mehrere PHP auf demselben Server mit php-fpm und xdebug unter Ubuntu 16.04 ausgeführt

2
user1215741

Dies kann durch Deaktivieren und Aktivieren der neuen Version von PHP-

  • zur älteren Version wechseln - 
    a2dismod php7.0 
    Dienst Apache2 neu starten
  • auf neuere Version wechseln
    a2enmod php7.0
    Dienst Apache2 neu starten
0
Vikas Chauhan

Nachdem ich versucht habe, Ihren Anweisungen zu folgen, fand ich einen möglicherweise einfacheren Weg für das gleiche Ergebnis.

Fügen Sie die folgende Zeile hinzu

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

in der Apache vhost-Konfiguration können Sie die PHP-Version im Verzeichnis php70project in Ihrem Vhost-Stammverzeichnis/var/www in Version 7 ändern, die als fastcgi ausgeführt wird.

Der folgende Ansatz für die Verwendung mit Unix-Socket

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

funktioniert leider nicht wie beabsichtigt . Leider konnte ich nicht den richtigen Code finden, um dies zu funktionieren, aber da es kein Beispiel für die Verwendung von Unix-Sockets mit Unterordner auf dieser Seite gibt, ist https://httpd.Apache.org/docs/2.4 /mod/mod_proxy_fcgi.html ist es einfach nicht möglich.

0
saschadd