web-dev-qa-db-fra.com

Comment puis-je faire en sorte qu'Apache utilise PHP 7.0 (pas 7.1)?

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.

6
Free Radical

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.

La description

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 phpest 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, apta 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.

Réponse

Il existe deux méthodes pour résoudre vos problèmes.

  1. 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
    
  2. 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 aptname__, 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).

8
Dan

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
1
waltinator