Lors de la configuration d’un hôte Ubuntu 16.04, Apache utilisera PHP 7.0.22-2 + ubuntu16.04.1 + deb.sury.org + 4.
Cependant, après avoir tenté de résoudre certains conflits en utilisant apt-get dist-upgrade
(et en échouant), je me suis retrouvé avec un système gravement défectueux. J'ai depuis réussi à ramener la plupart des versions de paquetages à celles par défaut, mais Apache utilise PHP 7.1.8-2 + ubuntu16.04.1 + deb.sury.org + 4, incompatible avec certaines bibliothèques PHP dont j'ai besoin.
Jusqu'à présent, j'ai essayé:
Sudo a2dismod php7.1
Sudo a2enmod php7.0
Sudo service Apache2 restart
Cependant, cela rompt Apache et refuse de redémarrer:
Syntax error on line 140 of /etc/Apache2/Apache2.conf: Syntax error on line 3 of /etc/Apache2/mods-enabled/php7.0.load: Cannot load /usr/lib/Apache2/modules/libphp7.0.so
Comment puis-je obliger Apache à exécuter à nouveau la version par défaut de PHP (PHP 7.0)?
Edit: Un commentaire sur mon auto-réponse [maintenant expurgée] ci-dessous par Dan m'a fait comprendre qu'avoir ajouté le tiers suivant party PPA ppa:ondrej/php
peut avoir quelque chose à faire avec le problème.
Alors:
J'ai ajouté le PPA ppa:ondrej/php
à mon site.
Je vais scinder ma réponse en deux parties. La première partie décrit comment votre problème est survenu, la deuxième partie est la réponse réelle à votre problème.
Disclaimer: La plupart de mes descriptions sont essentiellement de la spéculation, car je ne peux pas vraiment savoir ce que vous avez fait. Mais c'est le scénario le plus probable, car je ne vois pas d'autre moyen de vous donner le problème que vous avez décrit.
D'après le problème que vous décrivez, il semble que vous ayez installé un PPA tiers qui installait PHP 7.1 sur votre système. Le PPA le plus probable est le PPA d'Ondrej .
Lorsque vous avez installé PHP pour la première fois, vous avez installé la méthode suivante:
Sudo apt install php
Le package php
est uniquement un méta-package et ne contient pas les fichiers binaires nécessaires. Cela dépend de la dernière version du paquet PHP disponible (par défaut 7.0). Ainsi, lorsque vous l'installez, le package php7.0
est installé avec les dépendances de php7.0
(et libapache2-mod-php7.0
si vous avez Apache2
) et toutes ces dépendances sont marquées comme "installées automatiquement".
$ apt show php Paquet: php Version: 1: 7.0 + 35ubuntu6 Priorité: optionnel Section: php Source: php-defaults (35ubuntu6) Origine: Ubuntu Mainteneur: Ubuntu Developers Original-Mainteneur: Debian PHP Mainteneurs Bugs: https: // bugs .launchpad.net/ubuntu/+ filebug Taille installée: 11.3 ko Dépend: php7.0 Prise en charge: 5a Taille du téléchargement: 2 832 B APT installé manuellement: oui Sources APT: http://archive.ubuntu.com/ ubuntu xenial/packages principaux AMD64 Description: langage de script côté serveur intégré au langage HTML (par défaut) PHP (acronyme récursif de PHP: Hypertext Preprocessor) est un code source largement répandu Open source langage de script particulièrement adapté au développement Web et pouvant être intégré au format HTML. . Ce paquet est un paquet de dépendances, qui dépend du par défaut de Debian PHP version (actuellement 7.0).
J'ai mis en gras les parties du résultat de la commande, ce qui explique ce que je viens de mentionner.
PHP PPA d'Ondrej propose plusieurs versions de PHP pouvant être installées côte à côte. Ainsi, lorsque vous l'avez ajouté à votre système, apt
a trouvé une version plus récente de PHP. Il a donc remplacé php7.0
* par php7.1
ainsi que tous les packages associés installés automatiquement.
Il existe deux méthodes pour résoudre vos problèmes.
Supprimez complètement le PPA tiers et revenez aux packages par défaut PHP
Sudo apt install ppa-purge
Sudo ppa-purge ppa:ondrej/php
Le PPA d'Ondrej propose plusieurs versions de PHP, vous pouvez donc installer plusieurs versions côte à côte. Mais vous n'activeriez que le module php7.0
Apache.
Sudo apt install php7.0 libapache2-mod-php7.0
Sudo a2dismod php7.1
Sudo a2enmod php7.0
Sudo Apache2ctl restart
En les installant de la manière précédente, le package php7.0
sera défini comme "installé manuellement" dans apt
name__, de sorte qu'ils ne seront pas supprimés automatiquement sans que vous les supprimiez vous-même. N'oubliez pas d'installer tous les modules PHP dont vous avez besoin pour php7.0 (comme Sudo apt install php7.0-mysql
)
* php7.0
peut avoir été conservé sur votre système installé si vous aviez manuellement installé un module spécifique à php7.0 (par exemple php7.0-mysql
).
En cherchant packages.ubuntu.com pour le fichier libphp7.0
, j'ai trouvé deux paquets contenant ce fichier. Est-ce que l'un ou les deux sont installés? libapache2-mod-php7.0
et/ou libphp7.0-embed
?
Réinstallation de libapache2-mod-php7.0
avec
Sudo apt install --reinstall libapache2-mod-php7.0
puis voir ce qu'il y a à lire dans le paquet. Lister le contenu avec
dpkg -L libapache2-mod-php7.0
Les résultats de la recherche:
» Ubuntu » Packages » Package Contents Search Results
Search for libphp7.0.so within filenames
Search for paths ending with libphp7.0.so
Search in other suite: [trusty] [xenial] [yakkety] [zesty] [artful]
Limit search to a specific architecture: [AMD64] [arm64] [armhf] [i386] [powerpc] [ppc64el] [s390x]
You have searched for files named libphp7.0.so in suite yakkety, all sections, and all architectures. Found 2 results.
File Packages
/usr/lib/Apache2/modules/libphp7.0.so libapache2-mod-php7.0
/usr/lib/libphp7.0.so libphp7.0-embed