PHP representado como texto después de la actualización de Ubuntu 16.04

20

Apache está renderizando archivos PHP como texto después de la actualización de Ubuntu 16.04.

Apache está instalado y ejecutándose. PHP7 se está ejecutando. Cuando ejecuto el siguiente comando obtengo el resultado correcto:

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

Sin embargo, cuando accedo a http: //localhost/info.php o cualquier otro archivo php obtengo el contenido del archivo en lugar de la página.

La mayor parte de la ayuda en línea es para versiones anteriores de Ubuntu y PHP, por lo que no estoy seguro de que sean confiables o no.

ACTUALIZACIÓN: Apache no se iniciará después de instalar libapache2-mod-php7.0 y habilitar php7.0. Ver salida:

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 salida 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 salida 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) 

Con respecto al error Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP, encontré ayuda en https://wiki.archlinux.org/index.php/Apache_HTTP_Server con respecto a este problema, sin embargo, las rutas de los archivos no coincidían con las de Ubuntu, así que no intenté aplicar el Solución recomendada.

machadoug
fuente

Respuestas:

27

El phpcomando lo proporciona el php7.0-clipaquete en Ubuntu 16.04. La ejecución de la CLI es ortogonal a la configuración del servidor web.

Debe instalar y configurar uno de los SAPI web: apache2, fpm o cgi. Lo más fácil es instalar apache2 SAPI.

  1. Para instalar apache2 SAPI, ejecute apt-get install libapache2-mod-php(esto extraerá la versión predeterminada de PHP, actualmente libapache2-mod-php7.0). El paquete debería habilitarse y cambiar a apache2 prefork MPM, que es el único MPM admitido. Si no, intente ejecutar a2enmod php7.0y buscar errores. La instalación debe cambiar de MPM de evento a MPM prefork automáticamente, pero si no lo hace, puede cambiarlo manualmente haciendo lo sudo a2dismod mpm_eventsiguiente sudo a2enmod mpm_prefork.

  2. Para instalar FPM SAPI, ejecute apt-get install php-fpmy luego habilite FPM ejecutando a2enconf php7.0-fpm. El FPM SAPI es más seguro, pero más difícil de configurar correctamente.

  3. Para instalar CGI SAPI, ejecute apt-get install php-cgiy luego habilite CGI ejecutando a2enconf php7.0-cgi. Tenga en cuenta que CGI no es una forma recomendada de cómo ejecutar PHP, pero puede ser útil en implementaciones especiales.

oerdnj
fuente
He editado mi pregunta para proporcionar más detalles.
machadoug
@machadoug editó la respuesta para incluir una descripción de cómo cambiar MPMs
oerdnj
¿Tienes alguna idea sobre cómo solucionarlo?
machadoug
1
@machadoug Sí, agregué "La instalación debería cambiar del evento MPM a prefork MPM automáticamente, pero si no lo hace, puede cambiarlo manualmente haciendo sudo a2dismod mpm_event seguido de sudo a2enmod mpm_prefork".
oerdnj
1
¿Falta un paso en la opción 2? He instalado apache2 y php-fpm, y ejecuto el comando a2enconf. Todos tuvieron éxito y ambos servicios se están ejecutando, pero mis archivos PHP se generan directamente sin que PHP los procese. No hay errores en ningún registro para Apache o PHP-FPM.
Andrew Ensley
1

Hice que el mío vuelva a funcionar instalando libapache2-mod-php7.0. Espero que esto ayude.

Tommy Holt
fuente
0

También me mordió este problema de una manera diferente:

Por defecto, los scripts PHP no se ejecutarán en los directorios de los usuarios. Entonces, si su servidor admite public_html en la carpeta de inicio de los usuarios y desea permitir que los usuarios ejecuten php en él, debe eliminar la parte php7.0.confque lo deshabilita.

Calmarius
fuente
0

En el último Apache 2.0, para Ubuntu 16.04.2, descubrí que Apache está preconfigurado con hilos habilitados, pero el PHP 7 predeterminado no lo está. Si el PHP no está compilado con threadsafe, deberá cambiar al prefork MPM, que no usa hilos.

Para hacer esto, primero deshabilite:

sudo a2dismod mpm_event 

Luego habilite:

sudo a2enmod mpm_prefork 

Debe hacer esto en el orden correcto, ya que son mutuamente excluyentes.

Luego reinicie Apache:

sudo service apache2 restart

Debería ser bueno para ir sin problemas ahora.

Jeff Galbraith
fuente