web-dev-qa-db-fra.com

Comment puis-je rétrograder de PHP 7 à PHP 5.6 sur Ubuntu 16.04?

J'essaie de rétablir ma version PHP vers la version 7 de la version 5.6 et, bien que j'aie supprimé PHP 7, puis installé PHP 5.6, il semble que j'utilise toujours la version 7.

Existe-t-il une méthode simple pour se déplacer dans PHP versions où Apache, phpMyAdmin et co sont configurés de manière appropriée?

Un moyen simple de changer la version actuelle de PHP à la volée et même site par site serait formidable.

164
dibs

Mettre à jour
Aujourd'hui, j'ai de nouveau un problème avec PHP 7 en cours d'exécution malgré le fait que j'ai désactivé php7.0 module Apache: phpinfo montrait php 7 à l'aide de fastCGI ...
... Donc, si après avoir suivi les instructions ci-dessous, vous faites face à cette situation, vous devrez peut-être désactiver le module Apache proxy_fcgi:

Sudo a2dismod proxy_fcgi proxy; Sudo service Apache2 restart

1. Réinstallez PHP 5.6

Ce qui a fonctionné pour moi a été ce guide: http://www.lornajane.net/posts/2016/php-7-0-and-5-6-on-ubunt

En fait, il n'est pas nécessaire de supprimer php7.0, vous pouvez installer php5.6 ensemble (également parce que vous aurez un problème de dépendance avec le paquet phpmyadmin qui nécessitait php7.0)

En supposant que libapache2-mod-php soit un moyen approprié d'activer PHP dans Apache, vous pouvez procéder comme suit:

Sudo add-apt-repository ppa:ondrej/php
Sudo apt-get update
Sudo apt-get install php7.0 php5.6 php5.6-mysql php-gettext php5.6-mbstring php-mbstring php7.0-mbstring php-xdebug libapache2-mod-php5.6 libapache2-mod-php7.0

2. Basculez PHP version :

  • De PHP5.6 à PHP7.0:

    • Apache:

      Sudo a2dismod php5.6 ; Sudo a2enmod php7.0 ; Sudo service Apache2 restart
      
    • CLI:

      Sudo update-alternatives --set php /usr/bin/php7.0
      
  • De php7.0 à php5.6:

    • Apache:

      Sudo a2dismod php7.0 ; Sudo a2enmod php5.6 ; Sudo service Apache2 restart
      
    • CLI:

      Sudo update-alternatives --set php /usr/bin/php5.6
      
312
Postadelmaga

Ubuntu 16.04 est livré avec php 7.0, et certaines applications php peuvent toujours échouer avec php 7.0. Par conséquent, dans certains cas, il peut être judicieux d’avoir à la fois php 7.0 et php 5.x, de sorte que vous puissiez choisir la version à utiliser à tout moment.

Vous pouvez le faire avec:

xavi@computer# Sudo su
root@computer# add-apt-repository ppa:ondrej/php
root@computer# apt-get update
root@computer# apt-get install php7.0 php5.6 php5.6-mysql php-gettext php5.6-mbstring php-xdebug libapache2-mod-php5.6 libapache2-mod-php7.0 php5.6-curl php5.6-Gd php5.6-mcrypt php5.6-xml php5.6-xmlrpc

L'installation des deux php5.6 & php7.0 était propre dans mon cas: rien à redire, etc.

Pour passer de php 5.6 à php 7.0, vous devez faire deux choses:

# For php in web apps
Sudo a2dismod php5.6 && Sudo a2enmod php7.0 && Sudo service Apache2 restart
# For php-cli in the command line
Sudo ln -sfn /usr/bin/php7.0 /etc/alternatives/php

ou de php7.0 à php5.6:

# For php in web apps
Sudo a2dismod php7.0 && Sudo a2enmod php5.6 && Sudo service Apache2 restart
# For php-cli in the command line
Sudo ln -sfn /usr/bin/php5.6 /etc/alternatives/php

Vous pouvez également vérifier rapidement lequel vous utilisez en exécutant php -v.

Votre question manque de détails importants, je vais donc répondre plus largement.

En supposant que vous utilisez des paquets, il y a quelques détails importants:

  1. Apache2 peut être configuré pour utiliser Apache2 SAPI à l'aide du package libapache2-mod-php7.0 ou FPM SAPI à l'aide de php7.0-fpm avec mod_proxy_fcgi.

  2. Ubuntu 16.04 n'a que PHP 7.0 dans les référentiels, vous pouvez utiliser ppa:ondrej/php pour ajouter la prise en charge de PHP 5.6 en utilisant un schéma de nommage similaire (par exemple, libapache2-mod-php5.6 ou php5.6-fpm).

  3. Si vous utilisez Apache2 SAPI (libapache2-mod-php*), vous devez désactiver PHP 7.0 après avoir installé libapache2-mod-php5.6 en exécutant a2dismod php7.0 et en activer PHP 5.6 en exécutant a2enmod php5.6.

  4. Si vous utilisez FPM SAPI (php*-fpm), vous devez remplacer le socket unix FPM de /run/php/php7.0-fpm.sock par /run/php/php5.6-fpm.sock.

  5. Rappelez-vous que pour les modules fournis avec PHP (comme MySQL), la convention de nommage est phpX.Y-<ext> (fe php7.0-mysql et php5.6-mysql), mais pour les modules externes PECL (par exemple, APCu, mongodb, ...), c'est tout simplement php-<ext> (fe). php-apcu, php-mongodb). Je recommande d'exécuter apt-cache search php <ext> sur votre système pour rechercher le nom de package correct avant de poser une question sur Internet.

11
oerdnj

Je pense que vous devriez supprimer vos paquets php et installer php5.6. Vous pouvez procéder comme suit:

Sudo apt-get purge php7.*
Sudo add-apt-repository ppa:ondrej/php
Sudo apt-get update
Sudo apt-get install php5.6

Vous pouvez ensuite vérifier la version de votre php pour en être sûr. C'est fait comme on le voit ci-dessous:

php -v
5