Ich habe zwei Projekte auf dem lokalen Server, ein Projekt läuft mit PHP5.6 und das andere mit PHP7.0. Wäre es nun möglich, diese beiden Versionen basierend auf den Projekten zu aktivieren? Hinzufügen habe ich schon versucht AddHandler application/x-httpd-php7 .php
in einem der htaccess-Projekte, aber es funktioniert nicht. Derzeit sind PHP7.0 und PHP5.6-fpm bereits auf dem Server installiert. Unten ist der Screenshot der phpinfo.
Ausführen von zwei PHP-Versionen auf demselben Server
Makubex
Also nachdem ich den ganzen Tag bei Google gesucht habe. Ich habe es geschafft, meine beiden Projekte in FastCgi auf verschiedenen PHP-Versionen auszuführen. Danke an die Jungs von diesem Forum. Ich habe alles deinstalliert, einschließlich Apache, und von vorne begonnen. Im Folgenden sind die Schritte aufgeführt, mit denen ich zwei Versionen von PHP auf meinem lokalen Server aktiviert habe. Übrigens, mein Computer läuft auf Linux Mint 18.
-
Angenommen, Sie haben Apache bereits installiert, einen virtuellen Host für die beiden Projekte erstellt und die erforderlichen PHP-PPAs hinzugefügt. Nennen wir die Projekte
site56.local
für PHP 5.6 undsite70.local
für PHP7.0. Installierenphp5.6-fpm
undphp7.0-fpm
durch Laufen:sudo apt-get install php5.6-fpm sudo apt-get install php7.0-fpm
-
Erstellen Sie zwei Dateien unter
/usr/lib/cgi-bin/
(Ehrlich gesagt weiß ich nicht, ob dieser Schritt noch notwendig ist), und speichern Sie:sudo nano /usr/lib/cgi-bin/php56-fcgi sudo nano /usr/lib/cgi-bin/php70-fcgi
-
Öffnen Sie die php56-conf-Datei
/etc/apache2/conf-available/php5.6-fpm.conf
fügen Sie diese Konfiguration hinzu und speichern 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>
-
Aktivieren Sie nun die neue Apache-Konfiguration:
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
-
Ein … kreieren
.htacces
Datei in dem Projekt, das auf php7.0 laufen soll, und fügen Sie diesen Handler hinzu:AddHandler php70-fcgi .php
-
Erstellen Sie nun eine phpinfo-Datei zu den beiden Projekten und wenn Sie so etwas sehen, dann herzlichen Glückwunsch!
PS: Stellen Sie sicher, dass Sie htaccess in Ihrer apache2.conf oder httpd.conf aktivieren
-
Falls Sie PHP 5.5.9 anstelle von PHP 5.6 haben möchten, müssen Sie php5-fpm installieren. Außerdem sollte der Inhalt der Datei php5-fpm.conf wie in diesem Link aussehen: pastebin.com/3UgdxNV7
– Accord_Typ
18. Dezember 17 um 3:14 Uhr
-
Ich musste auch laufen
sudo apt-get install php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-xml
wie in der akzeptierten Antwort beschrieben Hier– Paul
12. April 18 um 15:03 Uhr
-
Ich weiß nicht, ob Sie Ihre Lösung Schritt für Schritt überhaupt richtig ausprobiert haben, da ich diesen Fehler erhalte, wenn ich Apache neu starte, nachdem ich die php5.6-fpm-Konfiguration aktiviert habe
Alias takes 1-2 arguments, a fakename and a realname, or a realname in a Location
– Morgan
25. Mai 19 um 22:47 Uhr
-
es ist wirklich großartig! aber ich brauche Centos
– Strahl
24. Juli 2020 um 11:40 Uhr
Stellen Sie zunächst sicher, dass alle PHP-bezogenen 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
Richten Sie für eine bestimmte Site eine andere Version von PHP-FPM ein:
Fügen Sie die folgende Zeile in Ihre vorhandene VirtualHost-Datei ein.
Include "conf-available/php7.2-fpm.conf"
Beispielsweise,
# 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>
-
Ich habe sowohl php7 als auch php5 auf meinem lokalen Rechner installiert. aber wenn ich wie von Ihnen vorgeschlagen “ls -la /etc/apache2/conf-enabled | grep php” ausführe, erhalte ich eine leere Ausgabe. Habe ich etwas vergessen? Danke.
– abc
9. Mai 18 um 13:11 Uhr
-
Eine leere Ausgabe ist das erwartete Ergebnis. Eine Liste der verfügbaren Konfigurationen und Module finden Sie hier: “ls -l /etc/apache2/conf-available/” und “ls -l /etc/apache2/mods-available/”
– Jun Hsieh
10. Mai 18 um 4:56 Uhr
JGL
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
Zu diesem Zeitpunkt müssen alle Ihre Websites 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 machen 🙂
Ich habe versucht, die Lösung von Makubex zu implementieren, und es hat funktioniert. Es gibt nur ein Problem, das ich mit einer neu installierten LAMP hatte, und das war die Tatsache, dass fastcgi nicht aktiviert war. Ich habe gerade php mit dem folgenden Skript neu installiert und danach 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 von Führen Sie mehrere PHP-Versionen auf demselben Server mit php-fpm und xdebug unter Ubuntu 16.04 aus
Hiren Makwana
Sie können dies mithilfe von .htaccess-Dateien tun
Zuerst müssen Sie das erforderliche FPM mit installieren
sudo apt install php7.2-fpm
Führen Sie dann den folgenden Befehl aus
sudo a2enmod actions alias proxy_fcgi fcgid
Starten Sie dann Ihren Server neu
sudo systemctl restart apache
Nehmen Sie dann die folgenden Änderungen in der Htacess-Datei vor
<FilesMatch .php$>
# Apache 2.4.10+ can proxy to unix socket
SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
</FilesMatch>
Hier ist ein Beispiel für die Ausführung von PHP 7.2, wenn PHP 5.6 aktiviert ist
-
Danke! Ich habe einen Fehler von curl bekommen “[ErrorException] Verwendung der undefinierten Konstante CURLOPT_HTTPGET – angenommen ‘CURLOPT_HTTPGET’ (dies wird einen Fehler in einer zukünftigen Version von PHP auslösen) ” Also habe ich sudo apt-get install php7.2-curl ausgeführt, um es zu beheben, und es schien zu funktionieren
– Paul Preibisch
12. Juni 2020 um 22:13 Uhr
Nachdem ich versucht hatte, Ihren Anweisungen zu folgen, fand ich einen möglicherweise einfacheren Weg für dasselbe Ergebnis.
Durch Hinzufügen der folgenden Zeile
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-Root /var/www auf 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 nicht wie vorgesehen. Leider konnte ich den richtigen Code nicht finden, um dies zum Laufen zu bringen, aber da es auf dieser Seite kein Beispiel für die Verwendung von Unix-Sockets mit Unterordnern gibt https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html es könnte einfach nicht möglich sein.
-
Danke! Ich habe einen Fehler von curl bekommen “[ErrorException] Verwendung der undefinierten Konstante CURLOPT_HTTPGET – angenommen ‘CURLOPT_HTTPGET’ (dies wird einen Fehler in einer zukünftigen Version von PHP auslösen) ” Also habe ich sudo apt-get install php7.2-curl ausgeführt, um es zu beheben, und es schien zu funktionieren
– Paul Preibisch
12. Juni 2020 um 22:13 Uhr
MagierPsycho
Wir haben dies im Falle von PHP auf Ubuntu + Nginx abgedeckt:
https://blog.magepsycho.com/how-to-install-multiple-versions-of-php-on-ubuntu/
So ändern Sie die CLI-PHP-Version
sudo update-alternatives --set php /usr/bin/php7.2
So ändern Sie die Web-PHP-Version
fastcgi_pass unix:/run/php/php7.2-fpm.sock
Wobei php7.2 durch die PHP-Version Ihrer Wahl ersetzt werden kann.
.
Was ist die Ausgabe von Ihrem
mod-enabled
in Ihrem Apache-Verzeichnis? Sind Sie sicher, dass Sie dort sowohl php5.x als auch php7.0x aktiviert haben?– hasan
9. März 17 um 13:41 Uhr
askubuntu.com/questions/50344/… Dies
– Vasil Schaddix
9. März 17 um 13:42 Uhr
Hallo @HassanAhmed, nur php7.0 und php5.6-fpm sind aktiviert. Wenn ich php5.6 aktiviere, ist Apache abgestürzt. Vielleicht ist es verwirrt, welche Version Sie bekommen sollen.
– Makubex
9. März 17 um 13:49 Uhr
Schau mal Docker an
– yBrodsky
9. März 17 um 14:07 Uhr
Schauen Sie sich diese sehr gut erklärte Antwort für debian / apache an stackoverflow.com/questions/45033511/…
– Erwan
1. Februar 18 um 11:48 Uhr