Actualiza a 16.04. php7 no funciona en el navegador

69

Acabo de actualizar de 14.10 a 16.04 y no estoy seguro de cómo configurar PHP 7 en apache. Modifiqué el archivo php7.0.conf para descomentar esas últimas líneas, reinicié apache2 y no cambié.

¿Necesito cambiar la configuración de apache2 para permitir php?

PHP funciona desde la línea de comandos, así que estoy seguro de que el php está instalado correctamente.

Además, recibo un error en phpadmin que dice que falta el mbstring.

David Wright
fuente
1
El CLI de trabajo SAPI (el phpcomando) es ortogonal a los otros SAPI de PHP (apache2, FPM, CGI, ...), por lo que la línea de comando de trabajo PHP no dice nada acerca de trabajar PHP en el servidor HTTP.
oerdnj
2
Por falta MBStrings hacer: sudo apt-get install php-mbstring(¿quién habría pensado, ¿verdad?)
oerdnj
¿Qué significa "php7 no funciona en el navegador"? ¿Estás hablando de que Apache no está comenzando? PHP no es un lenguaje del lado del cliente.
Andrea Lazzarotto
Es realmente deprimente ver todas estas respuestas dirigiendo a los usuarios a habilitar mpm-prefork y mod-php. Este es un gran paso atrás.
Andrew Ensley

Respuestas:

81

Al igual que antes, debe instalar PHP para Apache.

De la Guía del servidor :

sudo apt install php libapache2-mod-php

Ese comando instalará PHP y el módulo PHP Apache 2. Simplemente configure Apache como antes ( sudo a2enmod php7.0creo que activará el módulo).


Su mbstringproblema es similar: necesita instalar esa extensión:

sudo apt install php7.0-mbstring

Para otros módulos faltantes, también habrá que instalar cosas similares.

Thomas Ward
fuente
El módulo php debe habilitarse de manera predeterminada en la instalación. Si no, tiene que ser completo sudo a2enmod php7.0(o eso determiné al deshabilitar y volver a habilitar en mi computadora). Interesante, recibí este mensaje:Considering conflict php5 for php7.0: Enabling module php7.0.
Doug Smythies
@DougSmythies Supongo que no leíste donde dije que tienes que habilitar el módulo ...
Thomas Ward
1
Sí, lo hice, por eso hice el comentario. sudo a2enmod phpno funcionará, lo probé. Sin embargo sudo a2enmod php7.0funcionará.
Doug Smythies
1
Esto debe marcarse como la respuesta correcta. La instalación nueva de Ubuntu 16.04 no incluye este módulo apache2 de forma predeterminada.
Selosindis
@Selosindis ¡Absolutamente de acuerdo! Sin embargo, sigue siendo molesto que con Ubuntu 16.04 el proceso de instalación estándar haya cambiado en comparación con las versiones anteriores.
Sócrates
40

Para configurar php7 para que se ejecute con su servidor, necesita hacer alguna configuración:

1. Asegúrese de eliminar cualquier rastro de php/php5

Abra una terminal Ctrl+ Alt+ Ty:

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

La salida no debe contener ninguno php5.confo php5.load, pero si lo hace, haga lo siguiente:

# 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

Ahora agregue el php7.0.confy en su php7.0.loadlugar:

# 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

La salida de ls -la php*debería verse así:

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

Después de ocuparnos de los módulos, ahora llegamos al /etc/apache2/conf-enableddirectorio. Elimine cualquier rastro de php / php5 aquí también porsudo rm <name>

Entonces, si es necesario, haga lo siguiente:

# 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

La salida de ls -la php*debería verse así:

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. Reiniciar Apache2

Antes de reiniciar Apache, asegúrese de limpiar Apache y error.logluego reinicie:

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

Ahora verifique error.logemitiendo cat /var/log/apache2/error.log | less(canalizar menos le permite desplazarse fácilmente hacia arriba y hacia abajo, qsale de la salida).

Si su error.logcontiene muchos (y quiero decir literalmente un montón de) algunos MIBS not foundhacen lo siguiente:

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

La comprobación de nuevo error.logahora solo debe contener 3 líneas:

[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'

Su Apache con php7.0 ahora debería estar configurado correctamente.

Videonauth
fuente
2
Use los comandos a2enmody en a2dismodlugar de jugar manualmente con enlaces en mods-available/ mods-enabled(de manera similar a2enconfy a2disconfpara conf-{available,enabled}).
muru
1
Revisé mi respuesta de acuerdo a su aporte.
Videonauth
La jugando con enlaces es perjudicial como el a2enmody a2dismodrecordar el estado de los módulos en el registro de paquete apache2 interna, por lo que hacer / eliminación de los enlaces manualmente podrían hacer que su sistema roto para futuras actualizaciones como los scripts de actualización examina el estado de esta base de datos interna.
oerdnj
@oerdnj: hacer una tortilla puede romper los huevos ... ;-)
Fabby
1
@David Wright: quizás esté intentando ejecutar un script PHP desde el directorio de usuarios; estos están deshabilitados de forma predeterminada. Si es así, debe abrir php7.0.conf y comentar la última parte. Más aquí devplant.net/2010/05/04/…
xcxc
12

Tengo este problema también.

Me ayudó a eliminar todo PHP y reinstalar php7.

Todo lo que se necesitaba era:

sudo apt-get purge php*

php7 se eliminará, luego solo para reinstalar:

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
fuente
1
He intentado varias cosas antes y este método funciona para mí. ¡¡¡Gracias!!!
Srikanth Ponnapalli
1
DIOS MIO. Me salvaste.
plhn
Esta es la única solución que funcionó para mí. ¡salud!
Geevee
Esto me ayudó, porque después de la actualización de Ubuntu no encontré php7.0-cgi en conf-avaliable. PERO tenga en cuenta que al hacerlo sudo apt-get purge php*también eliminará su phpMyAdmin, si tiene uno.
Artur Czyżewski
8

En mi caso, no solo el php no estaba funcionando, sino también phpmyadmin, lo hice paso a paso así

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

Y luego a:

gksu gedit /etc/apache2/apache2.conf

En la última línea agrego Include /etc/phpmyadmin/apache.conf

Eso hace un trato con todos los problemas

Maciej
fuente
7

La solución que encontré para este problema fue la configuración predeterminada de PHP.INI para short_open_tag. Por defecto, esto está configurado en 'Off'. Mi código PHP comenzó con

   <?

en lugar de

   <?php

Si se habilita short_open_tag (cambiando 'Off' a 'On' en mi php.ini) y restablece el servidor apache ( sudo service apache2 restart) y PHP vuelve a aparecer vivo.

Patricio
fuente
OMMFG! ¡Por supuesto que sería el último comentario con votos a favor que finalmente funcionó para mí! ¡Muchas gracias, @patrick!
hyperGeoMetric
0

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

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

Nota: Se requiere lo anterior, porque libphp7.soincluido con php-apacheno funciona mod_mpm_event, pero solo funcionará en su mod_mpm_prefork lugar. ( FS # 39218 )

De lo contrario, obtendrá el siguiente error:

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

Como alternativa, puede usar mod_proxy_fcgi(consulte Uso de php-fpm y mod_proxy_fcgi a continuación ).

usuario539644
fuente
0

Yo también podría ejecutar scripts php con éxito desde la línea de comandos en Ubuntu 16.04, pero no en ningún navegador. En un intento por resolver el problema, purgué mis copias existentes de php7.0 y apache2. Posteriormente reinstalé tanto desde la línea de comandos como desde la biblioteca php de apache2. La frustración siguió cuando intenté ejecutar "a2enmod php7.0", que me informó que el módulo php7.0 no existía a pesar de que una vez más pude ejecutar scripts php desde la línea de comandos. El instinto comenzó. Al abrir Synaptic, descubrí que cuando instalé la biblioteca apache2 php desde la línea de comandos, instalé solo libapache2-mod-php7.0, y me había olvidado de instalar también el "envoltorio", libapache2-mod- php, sin el cual el primero no funcionará.

Bill Wilken
fuente
1
¿Cuál es el nombre de la "envoltura"?
EKons