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.

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.


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.


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.