Aggiornamento a 16.04. php7 non funziona nel browser


69

Ho appena aggiornato da 14.10 a 16.04 e non sono sicuro di come configurare PHP 7 in apache. Ho modificato il file php7.0.conf per decommentare le ultime righe, ho riavviato apache2 e nessuna modifica.

Devo cambiare la configurazione di apache2 per consentire php?

PHP funziona dalla riga di comando, quindi sono sicuro che php sia installato correttamente.

Inoltre, ricevo un errore su phpadmin dicendo che manca il file mbstring.


1
Il CLI SAPI di lavoro (il phpcomando) è ortogonale agli altri SAPP PHP (apache2, FPM, CGI, ...), quindi PHP dalla riga di comando funzionante non dice nulla sul funzionamento di PHP nel server HTTP.
oerdnj,

2
Per mancare mbstring fare: sudo apt-get install php-mbstring(chi avrebbe mai pensato, giusto?)
oerdnj

Che cosa significa "php7 non funziona nel browser"? Stai parlando di Apache che non si avvia? PHP non è una lingua lato client.
Andrea Lazzarotto,

È davvero deprimente vedere tutte queste risposte che indirizzano gli utenti ad abilitare mpm-prefork e mod-php. Questo è un enorme passo indietro.
Andrew Ensley,

Risposte:


81

Proprio come prima, devi installare PHP per Apache.

Dalla guida del server :

sudo apt install php libapache2-mod-php

Tale comando installerà PHP e il modulo PHP di Apache 2. Configura semplicemente Apache come prima ( sudo a2enmod php7.0, credo, accenderà il modulo).


Il tuo mbstringproblema è simile: devi installare l'estensione:

sudo apt install php7.0-mbstring

Per altri moduli mancanti ci saranno anche cose simili da installare.


Il modulo php dovrebbe essere abilitato di default al momento dell'installazione. In caso contrario, deve essere completo sudo a2enmod php7.0(o almeno così ho determinato disabilitando e riattivando sul mio computer.) Interessante, ho ricevuto questo messaggio:Considering conflict php5 for php7.0: Enabling module php7.0.
Doug Smythies,

@DougSmythies Suppongo che non hai letto dove ho detto che devi abilitare il modulo ...
Thomas Ward

1
Sì, l'ho fatto, motivo per cui ho fatto il commento. sudo a2enmod phpnon funzionerà, l'ho provato. Comunque sudo a2enmod php7.0funzionerà.
Doug Smythies,

1
Questo dovrebbe essere contrassegnato come la risposta corretta. Ubuntu 16.04 nuova installazione non include questo modulo apache2 per impostazione predefinita.
Selosindis,

@Selosindis Assolutamente d'accordo! Ancora fastidioso, tuttavia, che con Ubuntu 16.04 il processo di installazione standard sia cambiato rispetto alle versioni precedenti.
Socrate,

40

Per configurare php7 per l'esecuzione con il tuo server devi fare alcune configurazioni:

1.Assicurati di rimuovere eventuali tracce di php/php5

Apri un terminale Ctrl+ Alt+ Te:

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

L'output non deve contenere alcuno php5.confo php5.load, in tal caso, effettuare le seguenti operazioni:

# 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

Ora aggiungi il php7.0.confe php7.0.loadinvece:

# 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

L'output di ls -la php*dovrebbe apparire così:

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

Dopo aver affrontato i moduli, arriviamo ora alla /etc/apache2/conf-enableddirectory. Rimuovere anche qui eventuali tracce di php / php5sudo rm <name>

Quindi, se necessario, fare:

# 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

L'output di ls -la php*dovrebbe apparire così:

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. Riavvio di Apache2

Prima di riavviare Apache, assicurati di ripulire Apache, error.logquindi riavvia:

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

Ora controlla error.logemettendo cat /var/log/apache2/error.log | less(il piping con less ti consente di scorrere facilmente su e giù, quscire dall'output).

Se il tuo error.logcontiene molti (e intendo letteralmente un mucchio di) alcuni MIBS not foundfanno quanto segue:

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

Il check di nuovo error.logora dovrebbe contenere solo 3 righe:

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

Apache con php7.0 ora dovrebbe essere configurato correttamente.


2
Utilizzare i comandi a2enmode a2dismodinvece di armeggiare manualmente con i collegamenti in mods-available/ mods-enabled(in modo simile a2enconfe a2disconfper conf-{available,enabled}).
muru,

1
Ho rivisto la mia risposta in base al tuo contributo.
Videonauth,

La manipolazione dei collegamenti è dannosa in quanto a2enmode a2dismodricorda lo stato dei moduli nel registro interno del pacchetto apache2, quindi creare / rimuovere i collegamenti manualmente potrebbe rendere il sistema rotto per futuri aggiornamenti poiché gli script di aggiornamento esaminano lo stato di questo database interno.
oerdnj,

@oerdnj: fare una frittata può rompere le uova ... ;-)
Fabby

1
@David Wright - Forse stai cercando di eseguire lo script PHP dalla directory dell'utente - questi sono disabilitati di default. In tal caso, devi aprire php7.0.conf e commentare l'ultima parte. Altro qui devplant.net/2010/05/04/…
xcxc

12

Ho anche questo problema.

Mi ha aiutato a eliminare tutto PHP e reinstallare php7.

Tutto ciò che serviva era:

sudo apt-get purge php*

php7 verrà eliminato, successivamente solo per reinstallare:

sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi  php7.0 libapache2-mod-php7.0

1
Ho provato diverse cose prima e questo metodo funziona per me. Grazie!!!
Srikanth Ponnapalli,

1
OH MIO DIO. Mi hai salvato.
plhn,

questa è l'unica soluzione che ha funzionato per me. Saluti!
Geevee,

Questo mi ha aiutato, perché dopo l'aggiornamento di Ubuntu non ho trovato php7.0-cgi in conf-avaliable. MA tieni presente che fare sudo apt-get purge php*rimuoverà anche phpMyAdmin, se ne hai uno.
Artur Czyżewski,

8

Nel mio caso non solo il php non funzionava, ma anche phpmyadmin l'ho fatto passo dopo passo in quel modo

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 poi a:

gksu gedit /etc/apache2/apache2.conf

Nell'ultima riga aggiungo Include /etc/phpmyadmin/apache.conf

Che fanno un patto con tutti i problemi


7

La soluzione che ho trovato per questo problema era l'impostazione PHP.INI predefinita per short_open_tag. Per impostazione predefinita, questo è impostato su "Off". Il mio codice PHP è iniziato con

   <?

invece di

   <?php

Se abilitato short_open_tag (cambiando 'Off' in 'On' nel mio php.ini) e resettando il server apache ( sudo service apache2 restart) e PHP è tornato in vita.


OMMFG! Naturalmente sarebbe l'ultimo commento con voti positivi che alla fine ha funzionato per me! Grazie mille, @patrick !!!
hyperGeoMetric

0

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

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

Nota: è necessario quanto sopra, perché libphp7.soincluso in php-apachenon funziona mod_mpm_event, ma funzionerà solo mod_mpm_prefork . ( FS # 39218 )

Altrimenti otterrai il seguente errore:

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

In alternativa, è possibile utilizzare mod_proxy_fcgi(vedere Utilizzo di php-fpm e mod_proxy_fcgi di seguito ).


0

Anch'io potrei eseguire correttamente gli script php dalla riga di comando su Ubuntu 16.04, ma non in nessun browser. Nel tentativo di risolvere il problema ho eliminato le mie copie esistenti di php7.0 e apache2. Successivamente ho reinstallato sia dalla riga di comando che dalla libreria php di apache2. La frustrazione seguì quando tentai di eseguire "a2enmod php7.0", il che mi informò che il modulo php7.0 non esisteva nonostante il fatto che ancora una volta ero in grado di eseguire script php dalla riga di comando. L'istinto è entrato. Aprendo Synaptic, ho scoperto che quando ho installato la libreria php apache2 dalla riga di comando, ho installato solo libapache2-mod-php7.0 e avevo dimenticato anche di installare il "wrapper", libapache2-mod- php, senza il quale il primo non funzionerà.


1
Qual è il nome del "wrapper"?
EKons,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.