PHP rendu sous forme de texte après la mise à niveau d'Ubuntu 16.04

20

Apache rend les fichiers PHP sous forme de texte après la mise à niveau d'Ubuntu 16.04.

Apache est installé et fonctionne. PHP7 est en cours d'exécution. Lorsque j'exécute la commande suivante, j'obtiens la sortie correcte:

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

Cependant, lorsque j'accède à http: //localhost/info.php ou à tout autre fichier php, j'obtiens le contenu du fichier au lieu de la page.

La plupart de l'aide en ligne concerne les anciennes versions d'Ubuntu et de PHP, donc je ne suis pas certain qu'elles soient fiables ou non.

MISE À JOUR: Apache ne démarre pas après l'installation de libapache2-mod-php7.0 et l'activation de php7.0. Voir la sortie:

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.

La sortie de 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'.

La sortie de 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) 

En ce qui concerne l'erreur, Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHPj'ai trouvé de l'aide dans https://wiki.archlinux.org/index.php/Apache_HTTP_Server concernant ce problème, mais les chemins de fichiers ne correspondent pas à ceux d'Ubuntu, donc je n'ai pas essayé d'appliquer le correctif recommandé.

machadoug
la source

Réponses:

27

La phpcommande est fournie par php7.0-clipackage sur Ubuntu 16.04. L'exécution de l'interface CLI est orthogonale à la configuration du serveur Web.

Vous devez installer et configurer l'un des SAPI Web - apache2, fpm ou cgi. Le plus simple est d'installer apache2 SAPI.

  1. Pour installer apache2 SAPI, exécutez apt-get install libapache2-mod-php(cela tirera la version PHP par défaut, actuellement libapache2-mod-php7.0). Le package devrait s'activer et passer à apache2 prefork MPM qui est le seul MPM pris en charge. Sinon, essayez d'exécuter a2enmod php7.0et recherchez les erreurs. L'installation doit basculer automatiquement de l'événement MPM vers prefork MPM, mais si ce n'est pas le cas, vous pouvez le commuter manuellement en faisant sudo a2dismod mpm_eventsuivi de sudo a2enmod mpm_prefork.

  2. Pour installer FPM SAPI, exécutez apt-get install php-fpmpuis activez FPM en exécutant a2enconf php7.0-fpm. Le FPM SAPI est plus sécurisé, mais plus difficile à configurer correctement.

  3. Pour installer CGI SAPI, exécutez apt-get install php-cgipuis activez CGI en exécutant a2enconf php7.0-cgi. Veuillez noter que CGI n'est pas recommandé pour exécuter PHP, mais cela peut être utile dans les déploiements spéciaux.

oerdnj
la source
J'ai édité ma question afin de fournir plus de détails.
machadoug
@machadoug a modifié la réponse pour inclure une description sur la façon de changer de
MPM
Avez-vous une idée sur la façon de le réparer?
machadoug
1
@machadoug Oui, j'ai ajouté "L'installation devrait passer automatiquement de l'événement MPM à Prefork MPM, mais si ce n'est pas le cas, vous pouvez le commuter manuellement en faisant sudo a2dismod mpm_event suivi de sudo a2enmod mpm_prefork."
oerdnj
1
Y a-t-il une étape manquante dans l'option 2? J'ai installé apache2 et php-fpm et exécuté la commande a2enconf. Tous ont réussi, et les deux services sont en cours d'exécution, mais mes fichiers PHP sont générés directement sans php les traiter. Aucune erreur dans les journaux pour Apache ou PHP-FPM.
Andrew Ensley
1

J'ai fait tourner le mien à nouveau en installant libapache2-mod-php7.0. J'espère que cela t'aides.

Tommy Holt
la source
0

J'ai également été mordu par ce problème d'une manière différente:

Par défaut, les scripts PHP ne s'exécuteront pas dans les répertoires utilisateur. Donc, si votre serveur prend en charge public_html dans le dossier de départ des utilisateurs et que vous souhaitez autoriser les utilisateurs à y exécuter php, vous devez supprimer la partie php7.0.confqui le désactive.

Calmarius
la source
0

Dans la dernière version d'Apache 2.0, pour Ubuntu 16.04.2, j'ai trouvé qu'Apache est préconfiguré avec les threads activés, mais le PHP 7 par défaut ne l'est pas. Si le PHP n'est pas compilé avec threadsafe, vous devrez passer au préfork MPM, qui n'utilise pas de threads.

Pour ce faire, désactivez d'abord:

sudo a2dismod mpm_event 

Activez ensuite:

sudo a2enmod mpm_prefork 

Vous devez le faire dans le bon ordre car ils s'excluent mutuellement.

Redémarrez ensuite Apache:

sudo service apache2 restart

Vous devriez être prêt à vous passer de problèmes maintenant.

Jeff Galbraith
la source