Upgrade auf den 16.04. PHP7 funktioniert nicht im Browser

69

Ich habe gerade ein Upgrade von 14.10 auf 16.04 durchgeführt und bin mir nicht sicher, wie ich PHP 7 in Apache konfigurieren soll. Ich habe die php7.0.conf-Datei geändert, um die letzten Zeilen zu entfernen, Apache2 neu gestartet und keine Änderung vorgenommen.

Muss ich das Apache2-Setup ändern, um PHP zuzulassen?

PHP funktioniert von der Kommandozeile aus, daher bin ich sicher, dass das PHP richtig installiert ist.

Außerdem erhalte ich auf phpadmin eine Fehlermeldung, dass der mbstring fehlt.

David Wright
quelle
1
Working CLI SAPI (der phpBefehl) ist orthogonal zu den anderen PHP-SAPIs (apache2, FPM, CGI, ...), sodass Working Command Line PHP nichts über das Arbeiten mit PHP auf dem HTTP-Server aussagt.
oerdnj
2
Für fehlende mbstring tun: sudo apt-get install php-mbstring(Wer hätte das gedacht, oder?)
oerdnj
Was bedeutet "php7 funktioniert nicht im Browser"? Sprechen Sie über Apache nicht starten? PHP ist keine clientseitige Sprache.
Andrea Lazzarotto
Es ist wirklich deprimierend, all diese Antworten zu sehen, die die Benutzer anweisen, mpm-prefork und mod-php zu aktivieren. Dies ist ein großer Rückschritt.
Andrew Ensley

Antworten:

81

Nach wie vor müssen Sie PHP für Apache installieren.

Aus dem Serverhandbuch :

sudo apt install php libapache2-mod-php

Dieser Befehl installiert PHP und das Apache 2 PHP-Modul. Konfigurieren Sie einfach Apache wie zuvor ( sudo a2enmod php7.0ich denke, wird das Modul einschalten).


Ihr mbstringProblem ist ähnlich - Sie müssen diese Erweiterung installieren:

sudo apt install php7.0-mbstring

Für andere fehlende Module müssen ähnliche Dinge ebenfalls installiert werden.

Thomas Ward
quelle
Das PHP-Modul sollte bei der Installation standardmäßig aktiviert sein. Wenn nicht, muss es voll sudo a2enmod php7.0interessant sein (oder so habe ich durch Deaktivieren und erneutes Aktivieren auf meinem Computer festgestellt.), Considering conflict php5 for php7.0: Enabling module php7.0.
Doug Smythies
@DougSmythies Ich nehme an, Sie haben nicht gelesen, wo Sie das Modul aktivieren müssen ...
Thomas Ward
1
Ja, das habe ich getan, weshalb ich den Kommentar abgegeben habe. sudo a2enmod phpwird nicht funktionieren, ich habe es versucht. Allerdings sudo a2enmod php7.0funktioniert.
Doug Smythies
1
Dies sollte als die richtige Antwort markiert werden. Die Neuinstallation von Ubuntu 16.04 enthält dieses Apache2-Modul standardmäßig nicht.
Selosindis
@Selosindis Absolut einverstanden! Immer noch ärgerlich, dass sich mit Ubuntu 16.04 der Standard-Installationsprozess im Vergleich zu älteren Versionen geändert hat.
Sokrates
40

Um php7 für den Betrieb mit Ihrem Server zu konfigurieren, müssen Sie einige Einstellungen vornehmen:

1. Stellen Sie sicher, dass Sie alle Spuren von entfernen php/php5

Öffnen Sie ein Terminal Ctrl+ Alt+ Tund:

cd /etc/apache2/mods-enabled
ls -la

Die Ausgabe sollte keinphp5.conf oder enthalten. php5.loadWenn dies der Fall ist, gehen Sie folgendermaßen vor:

# this is the proper way of disabling modules
sudo a2dismod php5

# run this only if the above command didn't remove the php5 sym-links
sudo rm php5.load
sudo rm php5.conf

Fügen Sie nun das php7.0.confund hinzu php7.0.load:

# this is the proper way of enabling modules
sudo a2enmod php7.0

# run this only if the above command didn't create the php7.0 sym-links
sudo ln -s php7.0.conf ../mods-available/php7.0.conf
sudo ln -s php7.0.load ../mods-available/php7.0.load

Die Ausgabe von ls -la php*sollte folgendermaßen aussehen:

lrwxrwxrwx 1 root root 29 Apr 15 03:55 php7.0.conf -> ../mods-available/php7.0.conf
lrwxrwxrwx 1 root root 29 Apr 15 03:55 php7.0.load -> ../mods-available/php7.0.load

Nach der Bearbeitung der Module kommen wir nun zum /etc/apache2/conf-enabledVerzeichnis. Entfernen Sie hier auch alle Spuren von PHP / PHP5sudo rm <name>

Dann, wenn nötig, machen Sie:

# the proper way of enabling configs
sudo a2enconf php7.0-cgi
sudo a2enconf php7.0-fpm

# do those commands only if the above didn't work out
sudo ln -s php7.0-cgi.conf ../conf-available/php7.0-cgi.conf
sudo ln -s php7.0-fpm.conf ../conf-available/php7.0-fpm.conf

Die Ausgabe von ls -la php*sollte folgendermaßen aussehen:

lrwxrwxrwx 1 root root 33 Apr 21 17:00 php7.0-cgi.conf -> ../conf-available/php7.0-cgi.conf
lrwxrwxrwx 1 root root 33 Apr 21 17:01 php7.0-fpm.conf -> ../conf-available/php7.0-fpm.conf

2. Starten Sie Apache2 neu

Stellen Sie vor dem Neustart von Apache sicher, dass Sie den Apache bereinigen und error.loganschließend neu starten:

sudo su
> /var/log/apache2/error.log
exit
sudo service apache2 restart

Überprüfen Sie nun die error.logAusgabe durch cat /var/log/apache2/error.log | less(Durch Weiterleiten durch weniger können Sie einfach nach oben und unten scrollen, um qdie Ausgabe zu beenden).

Wenn Ihr error.logviele enthält (und ich meine wörtlich einen Haufen davon), MIBS not foundtun einige Folgendes:

sudo apt install libsnmp-dev
sudo net-snmp-config --snmpconfpath
sudo apt-get install snmp snmp-mibs-downloader
sudo su
> /var/log/apache2/error.log
exit
sudo service apache2 restart

Das Häkchen nochmal das error.loges jetzt nur noch 3 Zeilen enthalten soll:

[Sat Apr 23 01:39:07.504005 2016] [mpm_prefork:notice] [pid 1647] AH00169: caught SIGTERM, shutting down
[Sat Apr 23 01:39:08.685774 2016] [mpm_prefork:notice] [pid 9590] AH00163: Apache/2.4.18 (Ubuntu) mod_perl/2.0.9 Perl/v5.22.1 configured -- resuming normal operations
[Sat Apr 23 01:39:08.685938 2016] [core:notice] [pid 9590] AH00094: Command line: '/usr/sbin/apache2'

Ihr Apache mit php7.0 sollte jetzt richtig konfiguriert sein.

Videonauth
quelle
2
Verwenden Sie die Befehle a2enmodund a2dismod, anstatt manuell an Links in mods-available/ zu basteln mods-enabled(ähnlich a2enconfund a2disconffür conf-{available,enabled}).
muru
1
Meine Antwort wurde entsprechend Ihrer Eingabe überarbeitet.
Videonauth
Das Hantieren mit Links ist schädlich wie die a2enmodund a2dismodden Zustand der Module im internen apache2 Paket Registrierung erinnern, so machen / Entfernen der Links manuell können Ihr System für zukünftigen Upgrades gebrochen machen als der Upgrade - Skripte auf dem Zustand dieser internen Datenbank aussieht.
oerdnj
@oerdnj: ein Omelett machen kann Eier brechen ... ;-)
Fabby
1
@David Wright - Möglicherweise versuchen Sie, ein PHP-Skript über das Benutzerverzeichnis auszuführen. Diese sind standardmäßig deaktiviert. In diesem Fall müssen Sie die php7.0.conf öffnen und den letzten Teil auskommentieren. Mehr hier devplant.net/2010/05/04/…
xcxc
12

Ich habe auch dieses Problem.

Es hat mir geholfen, alle PHP zu löschen und PHP7 neu zu installieren.

Alles was benötigt wurde war:

sudo apt-get purge php*

php7 wird gelöscht, danach nur noch um es neu zu installieren:

sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi  php7.0 libapache2-mod-php7.0
Tom Idar Wangberg
quelle
1
Ich habe schon einige Dinge ausprobiert und diese Methode funktioniert für mich. Danke!!!
Srikanth Ponnapalli
1
OH MEIN GOTT. Du hast mich gerettet.
Plhn
Dies ist die einzige Lösung, die für mich funktioniert hat. Prost!
Geevee
Dies hat mir geholfen, da ich nach dem Ubuntu-Upgrade php7.0-cgi in conf-avaliable nicht gefunden habe. ABER denken Sie daran, dass dadurch sudo apt-get purge php*auch Ihr phpMyAdmin entfernt wird, falls Sie eines haben.
Artur Czyżewski
8

In meinem Fall funktionierte nicht nur PHP, sondern auch PHPYAdmin. Ich habe das Schritt für Schritt gemacht

sudo apt install php libapache2-mod-php
sudo apt install php7.0-mbstring
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

Und dann zu:

gksu gedit /etc/apache2/apache2.conf

In der letzten Zeile füge ich hinzu Include /etc/phpmyadmin/apache.conf

Das macht einen Deal mit allen Problemen

Maciej
quelle
7

Die Lösung, die ich für dieses Problem gefunden habe, war die Standardeinstellung von PHP.INI für short_open_tag. Standardmäßig ist diese Option auf "Aus" eingestellt. Mein PHP-Code begann mit

   <?

Anstatt von

   <?php

Wenn aktiviert, wird der short_open_tag (durch Ändern von 'Off' in 'On' in meiner php.ini) und das Zurücksetzen des Apache-Servers ( sudo service apache2 restart) und PHP lebend zurückgesetzt.

Patrick
quelle
OMMFG! Natürlich wäre es der allerletzte Kommentar mit Upvotes, der endlich für mich funktioniert hat! Vielen Dank, @patrick !!!
hyperGeoMetric
0

https://wiki.archlinux.org/index.php/Apache_HTTP_Server

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

Hinweis: Das oben Genannte ist erforderlich, da libphp7.sodas php-apacheHinzufügen zu nicht funktioniert mod_mpm_event, sondern nur funktioniert mod_mpm_prefork . ( FS # 39218 )

Andernfalls erhalten Sie folgende Fehlermeldung:

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.
AH00013: Pre-configuration failed
httpd.service: control process exited, code=exited status=1

Alternativ können Sie verwenden mod_proxy_fcgi(siehe Verwenden von php-fpm und mod_proxy_fcgi weiter unten ).

user539644
quelle
0

Ich konnte auch PHP-Skripte erfolgreich von der Kommandozeile unter Ubuntu 16.04 ausführen, aber nicht in jedem Browser. Um das Problem zu lösen, habe ich meine vorhandenen Kopien von php7.0 und apache2 gelöscht. Danach habe ich sowohl von der Kommandozeile als auch von der PHP-Bibliothek von Apache2 aus neu installiert. Frustration folgte, als ich versuchte, "a2enmod php7.0" auszuführen, was mir mitteilte, dass das php7.0-Modul nicht existierte, obwohl ich wieder PHP-Skripte von der Kommandozeile ausführen konnte. Der Instinkt setzte ein. Als ich Synaptic öffnete, stellte ich fest, dass ich bei der Installation der Apache2-PHP-Bibliothek über die Befehlszeile nur libapache2-mod-php7.0 installiert und vergessen hatte, auch den "Wrapper" libapache2-mod-php7.0 zu installieren. php, ohne das erstere nicht funktionieren wird.

Bill Wilken
quelle
1
Wie heißt der "Wrapper"?
EKons