Mise à niveau vers 16.04. php7 ne fonctionne pas dans le navigateur

69

Je viens de mettre à jour de 14.10 à 16.04 et je ne suis pas sûr de savoir comment configurer PHP 7 dans Apache. J'ai modifié le fichier php7.0.conf pour commenter les dernières lignes, redémarrer apache2 et aucune modification.

Dois-je modifier la configuration de apache2 pour autoriser php?

PHP fonctionne à partir de la ligne de commande, donc je suis sûr que le php est correctement installé.

De plus, j'obtiens une erreur sur phpadmin disant que la chaîne de caractères est manquante.

David Wright
la source
1
La CLI de travail SAPI (la phpcommande) est orthogonale aux autres SAPI de PHP (apache2, FPM, CGI, ...), de sorte que la ligne de commande de travail PHP ne dit rien sur le travail de PHP sur le serveur HTTP.
mardi
2
Pour mbstring manquant faire: sudo apt-get install php-mbstring(qui aurait pensé, non?)
mardi
Que signifie "php7 ne fonctionne pas dans le navigateur"? Parlez-vous d'Apache ne commence pas? PHP n'est pas un langage côté client.
Andrea Lazzarotto
Il est vraiment déprimant de voir toutes ces réponses inciter les utilisateurs à activer mpm-prefork et mod-php. C'est un énorme pas en arrière.
Andrew Ensley

Réponses:

81

Comme avant, vous devez installer PHP pour Apache.

Dans le Guide du serveur :

sudo apt install php libapache2-mod-php

Cette commande installera PHP et le module PHP Apache 2. Configurez simplement Apache comme avant ( sudo a2enmod php7.0je pense que le module sera activé).


Votre mbstringproblème est similaire - vous devez installer cette extension:

sudo apt install php7.0-mbstring

Pour les autres modules manquants, des tâches similaires devront également être installées.

Thomas Ward
la source
Le module php devrait être activé par défaut lors de l'installation. Sinon, il doit être complet sudo a2enmod php7.0(ou alors déterminé par désactivation et réactivation sur mon ordinateur.) Intéressant, j'ai reçu ce message:Considering conflict php5 for php7.0: Enabling module php7.0.
Doug Smythies
@DougSmythies Je suppose que vous n'avez pas lu où j'avais dit que vous deviez activer le module ...
Thomas Ward
1
Oui, c’est pourquoi j’ai fait ce commentaire. sudo a2enmod phpne fonctionnera pas, je l'ai essayé. Cependant sudo a2enmod php7.0fonctionnera.
Doug Smythies
1
Cela devrait être marqué comme la bonne réponse. La nouvelle installation d’Ubuntu 16.04 n’inclut pas ce module apache2 par défaut.
Selosindis
@Selosindis Absolument d'accord! Encore ennuyeux, avec Ubuntu 16.04, le processus d’installation standard a changé par rapport aux versions précédentes.
Socrates
40

Pour configurer php7 avec votre serveur, vous devez effectuer certaines configurations:

1. Assurez-vous de supprimer toute trace de php/php5

Ouvrir un terminal Ctrl+ Alt+ Tet:

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

La sortie ne doit contenir ni php5.confni php5.load, mais si c'est le cas, procédez comme suit:

# 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

Maintenant, ajoutez le php7.0.confet à la php7.0.loadplace:

# 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

Le résultat de ls -la php*devrait ressembler à ceci:

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

Après avoir traité avec les modules, nous arrivons maintenant au /etc/apache2/conf-enabledrépertoire. Supprimez toutes les traces de php / php5 ici aussi parsudo rm <name>

Ensuite, si nécessaire, faites:

# 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

Le résultat de ls -la php*devrait ressembler à ceci:

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. Redémarrer Apache2

Avant de redémarrer Apache, assurez-vous de nettoyer Apache, error.logpuis redémarrez:

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

Maintenant, vérifiez le error.logpar émission cat /var/log/apache2/error.log | less(le passage par moins vous permet de faire défiler facilement vers le haut et vers le bas, qquitte la sortie).

Si vous en avez error.logbeaucoup (et je parle littéralement de tas ), MIBS not foundprocédez comme suit:

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

Le contrôle à nouveau le error.logit now ne devrait contenir que 3 lignes:

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

Votre Apache avec php7.0 devrait maintenant être correctement configuré.

Videonauth
la source
2
Utilisez les commandes a2enmodet a2dismodau lieu de bricoler manuellement les liens dans mods-available/ mods-enabled(de la même manière a2enconfet a2disconfpour conf-{available,enabled}).
Muru
1
Révisé ma réponse en fonction de votre contribution.
Videonauth
Il est préjudiciable de manipuler les liens car a2enmod, a2dismodrappelez-vous de l’état des modules dans le registre interne des paquets apache2. Par conséquent, la création / suppression manuelle des liens peut endommager votre système lors de futures mises à niveau, car les scripts de mise à niveau examinent l’état de cette base de données interne.
mardi
@oerdnj: faire une omelette peut casser des œufs ... ;-)
Fabby
1
@ David Wright - Peut-être que vous essayez d'exécuter un script PHP à partir du répertoire de l'utilisateur - ceux-ci sont désactivés par défaut. Si c'est le cas, vous devez ouvrir php7.0.conf et commenter la dernière partie. Plus ici devplant.net/2010/05/04/…
xcxc
12

J'ai aussi ce problème.

Cela m'a aidé à supprimer tout PHP et à réinstaller php7.

Tout ce qui était nécessaire était:

sudo apt-get purge php*

php7 sera supprimé, juste après pour réinstaller:

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
la source
1
J'ai essayé plusieurs choses auparavant et cette méthode fonctionne pour moi. Je vous remercie!!!
Srikanth Ponnapalli
1
OMG. Tu m'as sauvé.
Plhn
c'est la seule solution qui a fonctionné pour moi. à votre santé!
Geevee
Cela m'a aidé, car après la mise à niveau Ubuntu, je n'ai pas trouvé php7.0-cgi dans conf-disponible. MAIS gardez à l’esprit que cela sudo apt-get purge php*supprimera également votre phpMyAdmin, si vous en avez un.
Artur Czyżewski
8

Im mon cas, non seulement le php ne fonctionnait pas, mais phpmyadmin aussi je l'ai fait étape par étape comme ça

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

Et ensuite:

gksu gedit /etc/apache2/apache2.conf

Dans la dernière ligne, j'ajoute Include /etc/phpmyadmin/apache.conf

Cela fait face à tous les problèmes

Maciej
la source
7

La solution que j'ai trouvée pour résoudre ce problème était le paramètre PHP.INI par défaut pour short_open_tag. Par défaut, cette option est définie sur 'Off'. Mon code PHP a commencé avec

   <?

au lieu de

   <?php

Si activé, short_open_tag (en changeant 'Off' sur 'On' dans mon php.ini) et réinitialise le serveur Apache ( sudo service apache2 restart) et PHP est revenu vivant.

Patrick
la source
OMMFG! Bien sûr, ce serait le dernier commentaire avec des votes positifs qui a finalement fonctionné pour moi! Merci beaucoup, @patrick !!!
hyperGeoMetric
0

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

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

Remarque: La procédure ci-dessus est obligatoire, car libphp7.soinclus avec php-apachene fonctionne pas avec mod_mpm_event, mais fonctionnera uniquement à la mod_mpm_prefork place. ( FS # 39218 )

Sinon, vous obtiendrez l'erreur suivante:

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

Alternativement, vous pouvez utiliser mod_proxy_fcgi(voir Utilisation de php-fpm et mod_proxy_fcgi ci-dessous ).

utilisateur539644
la source
0

Moi aussi, je pouvais exécuter des scripts php avec succès à partir de la ligne de commande sous Ubuntu 16.04, mais dans aucun navigateur. Pour tenter de résoudre le problème, j'ai purgé mes copies existantes de php7.0 et d'apache2. Par la suite, j'ai réinstallé les deux à partir de la ligne de commande, y compris de la bibliothèque php d'apache2. La frustration a suivi lorsque j'ai tenté d'exécuter "a2enmod php7.0", qui m'a informé que le module php7.0 n'existait pas malgré le fait qu'une fois encore j'ai pu exécuter des scripts php à partir de la ligne de commande. L’instinct a commencé. En ouvrant Synaptic, j’ai découvert que lorsque j’ai installé la bibliothèque apache2 php à partir de la ligne de commande, j’installais uniquement libapache2-mod-php7.0, et que j’avais oublié d’installer le "wrapper" libapache2-mod- php, sans quoi l'ancien ne fonctionnerait pas.

Bill Wilken
la source
1
Quel est le nom du "wrapper"?
EKons