Wie installiere ich PHP 7, um neben PHP 5 auf Ubuntu mit Nginx zu laufen

9

Ich möchte PHP 7 ausprobieren und meine Site gleichzeitig auf PHP 7 zum Laufen bringen, damit andere Sites für alle Fälle auf PHP 5 funktionieren. so dass ich aus der Domain Virtual Host Konfiguration entscheiden kann, welche PHP ausgeführt werden soll.

Ich habe mir die PHP-Versionsverwaltung angesehen und festgestellt, dass es möglich ist, zwei Versionen auszuführen, obwohl die gefundenen Versionen für Apache zu sein scheinen. Ich suche nach klareren Anweisungen, wie dies unter Nginx zu tun ist. Ich habe auch hhvm laufen, falls das wichtig ist.

Gefürchtetes Semikolon
quelle

Antworten:

11

Zunächst müssen Sie php5-fpmund php7.0-fpmvon Ondřej Surýs PPA für gemeinsam installierbares php5 und php7.0 installieren. ::

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

Wir nginxschlagen dann vor, die FPM-Pakete zu verwenden. Installieren Sie die Pakete entsprechend:

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

Quelle: Eine Antwort zum Thema "Wie installiere ich PHP 7?" Frage und benutzerdefinierte Kommentare und Änderungen von mir.


Zweitens nginx. nginxkann nur so gut sein wie Ihre Konfigurationen. Sie haben sehr wahrscheinlich einen PHP-Handling-Block auf Ihren Nginx-Serverblöcken, der diesem ähnelt (aus der 'Standard'-Beispielkonfiguration):

# 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;
}

Diese Konfiguration wird nur an übergeben php5-fpm. Tatsächlich gilt dies für Ihren gesamten Serverblock. Der einfachste Weg, dies zu tun, besteht darin, einen zweiten Serverblock (z. B. test.domain.tld) zu haben und stattdessen das PHP 7.0- fastcgi_passZiel anzugeben . In php7.0 unter Xenial wird dies ungefähr so ​​enden (extrahiert aus einem Fix, der kürzlich in das Xenial-Nginx-Paket hochgeladen wurde), aber ich kenne das Layout von Ondrejs Paket nicht, daher kann ich dort keine genauen Angaben machen (überprüfen /etc/php7.0/fpm/pool.d/www.confoder ähnlich, um festzustellen, wo es zuhört):

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php7.0-fpm:
    fastcgi_pass unix:/var/run/php7.0-fpm.sock;
}

Sie müssen etwas Ähnliches für Ihren php5Block tun , um zu überprüfen, ob php5.6Sockets anstelle des integrierten Sockets php5(den wir gerade entfernt haben) verwendet werden.

Verwenden Sie dann die zweite Testdomäne, um den php7.0Test auszuführen . Stellen Sie jedoch sicher, dass Sie eine Kopie Ihrer Site erstellen, wenn Sie dies möchten. Es ist wahrscheinlich erforderlich, eine separate Testkopie zu haben, damit Sie, sobald Sie mit der Arbeit fertig sind, php7.0einfach ohne umschalten können Problem.

Es gibt leider keinen einfachen Weg zu machen php5und php7.0innerhalb desselben Servers Block Arbeit, nicht ohne Ihre Wege für Ihre Website zu verändern, Anwendungen usw. , einen haben für php5und einen für php7.0; Eine solche Überarbeitung von Websites kann unangenehm werden, daher der Vorschlag, zwei separate Kopien des Standortcodes auszuführen, eine für die php7.0Migration und eine für die php5Produktion.

Thomas Ward
quelle
Wenn Sie diesen Weg wählen, sollten Sie sich an die von *php5.6*Ondřej bereitgestellten php5Pakete halten und die einfachen Pakete entfernen .
Muru
@muru wahrscheinlich richtig, ich werde das in schreiben
Thomas Ward
Vielen Dank! Das hat besser funktioniert als ich erwartet hatte. Anfangs gab es Probleme mit Pear und Cli, aber es stellte sich heraus, dass es ein Fehler im Repo war, den ich aktualisieren musste, und es funktionierte. Meine Seite funktioniert sehr schnell auf PHP7. es ist wunderbar.
Gefürchtetes Semikolon
Die fpm Socke hatte auch eine 5,6 im Namen.
Toster-CX
Ab fast 2018 ist die PHP5.6-Konfiguration für NGINXfastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
Ecksters