Atualize para 16.04. php7 não funciona no navegador

69

Acabei de atualizar de 14.10 para 16.04 e não sei como configurar o PHP 7 no apache. Modifiquei o arquivo php7.0.conf para descomentar as últimas linhas, reiniciei o apache2 e não alterei.

Preciso alterar a configuração do apache2 para permitir o php?

O PHP funciona a partir da linha de comando, por isso tenho certeza de que o php está instalado corretamente.

Além disso, recebo um erro no phpadmin dizendo que o mbstring está ausente.

David Wright
fonte
11
A CLI de trabalho SAPI (o phpcomando) é ortogonal às outras SAPIs do PHP (apache2, FPM, CGI, ...); portanto, o PHP de linha de comando do trabalho não diz nada sobre o trabalho do PHP no servidor HTTP.
oerdnj
2
Para mbstring faltando fazer: sudo apt-get install php-mbstring(quem teria pensado, certo?)
oerdnj
O que significa "php7 não funciona no navegador" significa? Você está falando sobre o Apache não iniciar? PHP não é uma linguagem do lado do cliente.
Andrea Lazzarotto
É realmente deprimente ver todas essas respostas direcionando os usuários a habilitar o mpm-prefork e o mod-php. Este é um grande passo para trás.
Andrew Ensley 06/06

Respostas:

81

Assim como antes, você precisa instalar o PHP para Apache.

No Guia do servidor :

sudo apt install php libapache2-mod-php

Esse comando instalará o PHP e o módulo PHP do Apache 2. Simplesmente configure o Apache como antes ( sudo a2enmod php7.0acho que ligará o módulo).


Seu mbstringproblema é semelhante - você precisa instalar essa extensão:

sudo apt install php7.0-mbstring

Para outros módulos ausentes, haverá coisas semelhantes a serem instaladas também.

Thomas Ward
fonte
O módulo php deve ser ativado por padrão na instalação. Caso contrário, tem que ser interessante sudo a2enmod php7.0(ou pelo menos eu determinei desativando e Considering conflict php5 for php7.0: Enabling module php7.0.
reativando
@DougSmythies eu suponho que você não leu onde eu disse que você tem que ativar o módulo ...
Thomas Ward
11
Sim, foi por isso que fiz o comentário. sudo a2enmod phpnão vai funcionar, eu tentei. No entanto sudo a2enmod php7.0vai funcionar.
Doug Smythies
11
Isso deve ser marcado como a resposta correta. A nova instalação do Ubuntu 16.04 não inclui esse módulo apache2 por padrão.
Selosindis 27/04
@Selosindis Absolutamente concordado! Ainda irritante, porém, que, com o Ubuntu 16.04, o processo de instalação padrão mudou em comparação com as versões mais antigas.
Sócrates
40

Para configurar o php7 para rodar com o servidor, você precisa fazer algumas configurações:

1. Certifique-se de remover quaisquer vestígios de php/php5

Abra um terminal Ctrl+ Alt+ Te:

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

A saída deve não conter qualquer php5.confou php5.load, mas se isso acontecer, faça o seguinte:

# 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

Agora adicione o php7.0.confe em php7.0.loadvez disso:

# 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

A saída de ls -la php*deve ficar assim:

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

Depois de lidar com os módulos, chegamos agora ao /etc/apache2/conf-enableddiretório Remova todos os vestígios de php / php5 aqui também,sudo rm <name>

Então, se necessário, faça:

# 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

A saída de ls -la php*deve ficar assim:

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. Reiniciando o Apache2

Antes de reiniciar o Apache, limpe o Apache error.loge reinicie:

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

Agora, verifique a error.logemissão cat /var/log/apache2/error.log | less(canalizar menos permite que você role facilmente para cima e para baixo, qsai da saída).

Se o seu error.logcontém muitos (e eu literalmente quero dizer um monte ) de alguns, MIBS not foundfaça o seguinte:

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

Marque novamente a opção error.logagora deve conter apenas 3 linhas:

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

Seu Apache com php7.0 agora deve estar configurado corretamente.

Videonauth
fonte
2
Use os comandos a2enmode em a2dismodvez de mexer manualmente com os links em mods-available/ mods-enabled(da mesma forma a2enconfe a2disconfpara conf-{available,enabled}).
Muru
11
Revisei minha resposta de acordo com a sua opinião.
Videonauth 23/04/16
A manipulação de links é prejudicial a2enmode a2dismodlembre-se do estado dos módulos no registro interno do pacote apache2, portanto, a criação / remoção manual de links pode danificar o sistema para futuras atualizações, pois os scripts de atualização examinam o estado desse banco de dados interno.
oerdnj
@oerdnj: fazer uma omelete pode quebrar ovos ... ;-)
Fabby
11
@ David Wright - Talvez você esteja tentando executar o script PHP a partir do diretório do usuário - estes estão desativados por padrão. Nesse caso, você precisa abrir o php7.0.conf e comentar a última parte. Mais aqui devplant.net/2010/05/04/…
xcxc 3/16/16
12

Eu também tenho esse problema.

Isso me ajudou a excluir todo o PHP e reinstalar o php7.

Tudo o que era necessário era:

sudo apt-get purge php*

O php7 será excluído depois apenas 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
fonte
11
Eu tentei várias coisas antes e esse método funciona para mim. Obrigado!!!
Srikanth Ponnapalli
11
AMD. Você me salvou.
plhn
esta é a única solução que funcionou para mim. Felicidades!
geevee
Isso me ajudou, porque após a atualização do Ubuntu, não encontrei o php7.0-cgi no conf-available. MAS lembre-se de que isso sudo apt-get purge php*também removerá o seu phpMyAdmin, se você tiver um.
Artur Czyżewski 27/03
8

Eu sou o meu caso, não só o php não estava funcionando, mas phpmyadmin também fiz passo a passo assim

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

E então para:

gksu gedit /etc/apache2/apache2.conf

Na última linha eu adiciono Include /etc/phpmyadmin/apache.conf

Que fazem um acordo com todos os problemas

Maciej
fonte
7

A solução que encontrei para esse problema foi a configuração padrão do PHP.INI para short_open_tag. Por padrão, isso está definido como 'Desligado'. Meu código PHP começou com

   <?

ao invés de

   <?php

Se ativado, o short_open_tag (alterando 'Off' para 'On' no meu php.ini) e redefina o servidor apache ( sudo service apache2 restart) e o PHP retornará vivo.

patrick
fonte
OMMFG! Claro que seria o último comentário com upvotes que finalmente funcionou para mim! Muito obrigado mf, @patrick !!!
Hypergeometric
0

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

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

Nota: O acima é necessário, porque libphp7.soincluído com php-apachenão funciona mod_mpm_event, mas apenas funcionará mod_mpm_prefork . ( FS # 39218 )

Caso contrário, você receberá o seguinte erro:

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, você pode usar mod_proxy_fcgi(consulte Usando php-fpm e mod_proxy_fcgi abaixo ).

user539644
fonte
0

Eu também poderia executar scripts php com sucesso a partir da linha de comando no Ubuntu 16.04, mas não em qualquer navegador. Na tentativa de resolver o problema, limpei minhas cópias existentes do php7.0 e do apache2. Posteriormente, reinstalei ambos a partir da linha de comando, incluindo a biblioteca php do apache2. A frustração se seguiu quando tentei executar o "a2enmod php7.0", que me informou que o módulo php7.0 não existia, apesar do fato de que mais uma vez eu era capaz de executar scripts php na linha de comando. O instinto começou. Ao abrir o Synaptic, descobri que quando instalei a biblioteca apache2 php a partir da linha de comando, instalei apenas libapache2-mod-php7.0 e também me esqueci de instalar o "wrapper", libapache2-mod- php, sem o qual o primeiro não funcionará.

Bill Wilken
fonte
11
Qual é o nome do "wrapper"?
EKons