PHP wird nach dem Upgrade auf Ubuntu 16.04 als Text gerendert

20

Apache rendert PHP-Dateien nach dem Upgrade auf Ubuntu 16.04 als Text.

Apache ist installiert und läuft. PHP7 läuft. Wenn ich den folgenden Befehl ausführe, erhalte ich die richtige Ausgabe:

php -r 'echo "\n\nYour PHP installation is working fine.\n\n\n";'

Wenn ich jedoch auf http: //localhost/info.php oder eine andere PHP-Datei zugreife, erhalte ich den Inhalt der Datei anstelle der Seite.

Der größte Teil der Online-Hilfe bezieht sich auf ältere Versionen von Ubuntu und PHP, daher bin ich mir nicht sicher, ob sie zuverlässig sind oder nicht.

UPDATE: Apache startet nicht, nachdem libapache2-mod-php7.0 installiert und php7.0 aktiviert wurde. Siehe Ausgabe:

douglas@douglas-acer:~$ sudo service apache2 restart
douglas@douglas-acer:~$ sudo apt-get install libapache2-mod-php
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  libapache2-mod-php
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/2.960 B of archives.
After this operation, 15,4 kB of additional disk space will be used.
Selecting previously unselected package libapache2-mod-php.
(Reading database ... 263897 files and directories currently installed.)
Preparing to unpack .../libapache2-mod-php_1%3a7.0+35ubuntu6_all.deb ...
Unpacking libapache2-mod-php (1:7.0+35ubuntu6) ...
Setting up libapache2-mod-php (1:7.0+35ubuntu6) ...
douglas@douglas-acer:~$ sudo service apache2 restart
douglas@douglas-acer:~$ sudo a2enmod php7.0
Considering conflict php5 for php7.0:
Enabling module php7.0.
To activate the new configuration, you need to run:
  service apache2 restart
douglas@douglas-acer:~$ sudo service apache2 restart
Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details.
douglas@douglas-acer:~$ sudo apt-get purge php5
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package 'php5' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Die Ausgabe von systemctl status apache2.service:

● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: failed (Result: exit-code) since Dom 2016-04-24 08:21:35 BRT; 14s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 9216 ExecStart=/etc/init.d/apache2 start (code=exited, status=1/FAILURE)

Abr 24 08:21:35 douglas-acer apache2[9216]:  * The apache2 configtest failed.
Abr 24 08:21:35 douglas-acer apache2[9216]: Output of config test was:
Abr 24 08:21:35 douglas-acer apache2[9216]: [Sun Apr 24 08:21:35.235583 2016] [:crit] [pid 9226:tid 140666367190912] Apache is running a threade
Abr 24 08:21:35 douglas-acer apache2[9216]: AH00013: Pre-configuration failed
Abr 24 08:21:35 douglas-acer apache2[9216]: Action 'configtest' failed.
Abr 24 08:21:35 douglas-acer apache2[9216]: The Apache error log may have more information.
Abr 24 08:21:35 douglas-acer systemd[1]: apache2.service: Control process exited, code=exited status=1
Abr 24 08:21:35 douglas-acer systemd[1]: Failed to start LSB: Apache2 web server.
Abr 24 08:21:35 douglas-acer systemd[1]: apache2.service: Unit entered failed state.
Abr 24 08:21:35 douglas-acer systemd[1]: apache2.service: Failed with result 'exit-code'.

Die Ausgabe von journalctl -xe

-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit apache2.service has finished shutting down.
Abr 24 08:37:59 douglas-acer systemd[1]: Starting LSB: Apache2 web server...
-- Subject: Unit apache2.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit apache2.service has begun starting up.
Abr 24 08:37:59 douglas-acer apache2[10261]:  * Starting Apache httpd web server apache2
Abr 24 08:37:59 douglas-acer apache2[10261]:  *
Abr 24 08:37:59 douglas-acer apache2[10261]:  * The apache2 configtest failed.
Abr 24 08:37:59 douglas-acer apache2[10261]: Output of config test was:
Abr 24 08:37:59 douglas-acer apache2[10261]: [Sun Apr 24 08:37:59.748900 2016] [:crit] [pid 10271:tid 139911432607616] Apache is running a threa
Abr 24 08:37:59 douglas-acer apache2[10261]: AH00013: Pre-configuration failed
Abr 24 08:37:59 douglas-acer apache2[10261]: Action 'configtest' failed.
Abr 24 08:37:59 douglas-acer apache2[10261]: The Apache error log may have more information.
Abr 24 08:37:59 douglas-acer systemd[1]: apache2.service: Control process exited, code=exited status=1
Abr 24 08:37:59 douglas-acer systemd[1]: Failed to start LSB: Apache2 web server.
-- Subject: Unit apache2.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit apache2.service has failed.
-- 
-- The result is failed.
Abr 24 08:37:59 douglas-acer systemd[1]: apache2.service: Unit entered failed state.
Abr 24 08:37:59 douglas-acer systemd[1]: apache2.service: Failed with result 'exit-code'.
Abr 24 08:37:59 douglas-acer sudo[10258]: pam_unix(sudo:session): session closed for user root
Abr 24 08:38:02 douglas-acer sudo[10276]:  douglas : TTY=pts/18 ; PWD=/home/douglas ; USER=root ; COMMAND=/bin/journalctl -xe
Abr 24 08:38:02 douglas-acer sudo[10276]: pam_unix(sudo:session): session opened for user root by (uid=0)
Abr 24 08:38:38 douglas-acer sudo[10276]: pam_unix(sudo:session): session closed for user root
Abr 24 08:39:01 douglas-acer CRON[10297]: pam_unix(cron:session): session opened for user root by (uid=0)
Abr 24 08:39:01 douglas-acer CRON[10299]: (root) CMD (  [ -x /usr/lib/php5/sessionclean ] && /usr/lib/php5/sessionclean)
Abr 24 08:39:01 douglas-acer CRON[10297]: pam_unix(cron:session): session closed for user root
Abr 24 08:39:01 douglas-acer CRON[10298]: pam_unix(cron:session): session opened for user root by (uid=0)
Abr 24 08:39:01 douglas-acer CRON[10300]: (root) CMD (  [ -x /usr/lib/php/sessionclean ] && /usr/lib/php/sessionclean)
Abr 24 08:39:02 douglas-acer CRON[10298]: pam_unix(cron:session): session closed for user root
Abr 24 08:39:51 douglas-acer sudo[10122]: pam_unix(sudo:session): session closed for user root
Abr 24 08:39:53 douglas-acer sudo[10368]:  douglas : TTY=pts/5 ; PWD=/home/douglas ; USER=root ; COMMAND=/bin/journalctl -xe
Abr 24 08:39:53 douglas-acer sudo[10368]: pam_unix(sudo:session): session opened for user root by (uid=0) 

In Bezug auf den Fehler habe Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHPich in https://wiki.archlinux.org/index.php/Apache_HTTP_Server Hilfe zu diesem Problem gefunden. Die Dateipfade stimmten jedoch nicht mit denen in Ubuntu überein, sodass ich nicht versuchte, die zu übernehmen empfohlene Lösung.

machadoug
quelle

Antworten:

27

Der phpBefehl wird vom php7.0-cliPaket unter Ubuntu 16.04 bereitgestellt . Das Ausführen der CLI erfolgt orthogonal zur Webserverkonfiguration.

Sie müssen eines der Web-SAPIs installieren und konfigurieren - apache2, fpm oder cgi. Am einfachsten ist es, apache2 SAPI zu installieren.

  1. Führen Sie zum Installieren von apache2 SAPI Folgendes aus apt-get install libapache2-mod-php(dabei wird die derzeitige Standard-PHP-Version abgerufen libapache2-mod-php7.0). Das Paket sollte sich selbst aktivieren und zu apache2 prefork MPM wechseln, das als einziges MPM unterstützt wird. Wenn nicht, versuchen Sie, das Programm auszuführen a2enmod php7.0und nach Fehlern zu suchen. Die Installation sollte automatisch vom Ereignis-MPM zum Prefork-MPM wechseln. Wenn dies nicht der Fall ist, können Sie die Installation manuell durchführen, indem Sie sudo a2dismod mpm_eventgefolgt von ausführen sudo a2enmod mpm_prefork.

  2. Um FPM SAPI zu installieren, führen Sie FPM aus apt-get install php-fpmund aktivieren Sie es, indem Sie es ausführen a2enconf php7.0-fpm. Die FPM-SAPI ist sicherer, aber schwieriger zu konfigurieren.

  3. Um CGI SAPI zu installieren, führen Sie CGI aus apt-get install php-cgiund aktivieren Sie es, indem Sie es ausführen a2enconf php7.0-cgi. Bitte beachten Sie, dass CGI nicht für die Ausführung von PHP empfohlen wird, aber in speziellen Bereitstellungen nützlich sein kann.

oerdnj
quelle
Ich habe meine Frage bearbeitet, um weitere Details bereitzustellen.
Machadoug
@machadoug bearbeitete die Antwort mit der Beschreibung, wie MPMs gewechselt werden
oerdnj
Haben Sie eine Idee, wie das Problem behoben werden kann?
Machadoug
1
@machadoug Ja, ich habe hinzugefügt "Die Installation sollte automatisch von Event MPM zu Prefork MPM wechseln. Wenn dies nicht der Fall ist, können Sie manuell wechseln, indem Sie sudo a2dismod mpm_event gefolgt von sudo a2enmod mpm_prefork ausführen."
Oerdnj
1
Fehlt in Option 2 ein Schritt? Ich habe apache2 und php-fpm installiert und den Befehl a2enconf ausgeführt. Alles war erfolgreich und beide Dienste laufen, aber meine PHP-Dateien werden direkt ohne PHP-Verarbeitung ausgegeben. Keine Fehler in Protokollen für Apache oder PHP-FPM.
Andrew Ensley
1

Ich habe mein System wieder zum Laufen gebracht, indem ich libapache2-mod-php7.0 installiert habe. Hoffe das hilft.

Tommy Holt
quelle
0

Dieses Problem hat mich auch auf eine andere Art und Weise gebissen:

Standardmäßig werden PHP-Skripte nicht in Benutzerverzeichnissen ausgeführt. Wenn Ihr Server also public_html im Home-Ordner des Benutzers unterstützt und Benutzer darin PHP ausführen lassen möchten, sollten Sie den Teil entfernen, der php7.0.confihn deaktiviert.

Calmarius
quelle
0

Im neuesten Apache 2.0 für Ubuntu 16.04.2 habe ich festgestellt, dass Apache mit aktivierten Threads vorkonfiguriert ist, das Standard-PHP 7 jedoch nicht. Wenn das PHP nicht mit threadsafe kompiliert ist, müssen Sie zu prefork MPM wechseln, das keine Threads verwendet.

Deaktivieren Sie dazu zunächst:

sudo a2dismod mpm_event 

Dann aktivieren Sie:

sudo a2enmod mpm_prefork 

Sie müssen dies in der richtigen Reihenfolge tun, da sie sich gegenseitig ausschließen.

Dann starte Apache neu:

sudo service apache2 restart

Sie sollten jetzt bereit sein, auf Probleme zu verzichten.

Jeff Galbraith
quelle