GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment faire en sorte qu'Apache utilise Php 7.0 (pas 7.1) ?

Lors de la configuration d'un vhost Ubuntu 16.04, Apache utilisera
PHP 7.0.22-2+ubuntu16.04.1+deb.sury.org+4 .

Cependant, après avoir essayé de résoudre certains conflits en faisant apt-get dist-upgrade (et à défaut), je me suis retrouvé avec un système gravement endommagé. Depuis, j'ai réussi à restaurer la plupart des versions de packages par défaut, mais Apache utilise
PHP 7.1.8-2+ubuntu16.04.1+deb.sury.org+4 , qui est 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 casse Apache et il 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 faire en sorte qu'Apache exécute à nouveau la version PHP par défaut (PHP 7.0) ?

Modifier :Un commentaire à mon auto-réponse [maintenant expurgé] ci-dessous par Dan m'a fait réaliser qu'après avoir ajouté le PPA tiers suivant ppa:ondrej/php peut avoir quelque chose à voir avec le problème.

Donc :
J'ai ajouté le PPA ppa:ondrej/php sur mon site.

Réponse acceptée :

Je diviserai ma réponse en deux parties. La première partie décrit comment votre problème s'est produit, la deuxième partie est la réponse réelle à votre problème.

Description

D'après le problème que vous décrivez, il semble que vous ayez installé un PPA tiers qui a installé 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 php package n'est qu'un méta-paquet et ne contient pas les binaires nécessaires. Cela dépend de la dernière version du package PHP disponible (par défaut 7.0). Ainsi, lorsque vous l'installez, le php7.0 le paquet est installé avec php7.0 les dépendances (et libapache2-mod-php7.0 si vous avez apache2 ) et toutes ces dépendances sont marquées dans le gestionnaire de packages comme "installées automatiquement".

$ apt show php
Package: php
Version: 1:7.0+35ubuntu6
Priority: optional
Section: php
Source: php-defaults (35ubuntu6)
Origin: Ubuntu
Maintainer: Ubuntu Developers 
Original-Maintainer: Debian PHP Maintainers 
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 11.3 kB
Depends: php7.0
Supported: 5y
Download-Size: 2,832 B
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Description: server-side, HTML-embedded scripting language (default)
 PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
 open source general-purpose scripting language that is especially suited
 for web development and can be embedded into HTML.
 .
 This package is a dependency package, which depends on Debian's default
 PHP version (currently 7.0).

J'ai mis en gras les parties du résultat de la commande, ce qui explique ce que je viens de mentionner.

En relation:Connexion à distance avec le gestionnaire d'affichage graphique (Gdm, Lightdm) dans Ubuntu ?

Le PHP PPA d'Ondrej propose plusieurs versions de PHP qui peuvent être installées les unes à côté des autres. Ainsi, lorsque vous l'avez ajouté à votre système, apt trouvé une version plus récente de PHP donc il a remplacé php7.0 * avec php7.1 ainsi que tous les packages associés qui ont été installés automatiquement.

Répondre

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

  1. Supprimez complètement le PPA tiers et revenez aux packages PHP par défaut

    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'activerez que le php7.0 Module Apache.

    sudo apt install php7.0 libapache2-mod-php7.0
    sudo a2dismod php7.1
    sudo a2enmod php7.0
    sudo apache2ctl restart
    

    Les installer de la manière précédente définirait le php7.0 package comme "installé manuellement" dans apt , afin qu'ils ne soient pas supprimés automatiquement sans que vous les supprimiez vous-même. N'oubliez pas de vous assurer d'installer également tous les modules PHP dont vous avez besoin pour php7.0 (comme sudo apt install php7.0-mysql )

* php7.0 peut avoir été conservé dans votre système installé si vous aviez installé manuellement un module spécifiquement pour php7.0 (par exemple php7.0-mysql ).


Ubuntu
  1. Comment utiliser l'API E2E Networks ?

  2. Comment installer Apache, MySQL, PHP (LAMP) sur Ubuntu 16.04 LTS

  3. Comment forcer Apache à utiliser HTTPS

  4. Apache 2 n'a pas pu se lier, adresse déjà utilisée ?

  5. Comment installer Php sans serveur Web Apache ?

Comment installer Apache 2.4 et PHP 7.4 sur Amazon Linux

Comment installer Apache, MySQL et PHP sur Ubuntu 20.04

Comment installer Apache et PHP sur OpenSUSE 15.1

Comment faire en sorte que le programme d'installation de Wubi utilise un iso pré-téléchargé ?

Comment utiliser PHP 4.4.9 (FastCGI) avec Apache et ISPConfig 3 (Debian Wheezy)

Comment utiliser Apache SpamAssassin dans cPanel ?