Un article sur comment installer facilement PHP 5 par PHP 7 sur Debian Jessie, installé avec le serveur web Nginx.

A ce jour, PHP 7 n’est pas dans les dépôts officiels de Debian et pour éviter la compilation à chaque mise à jour de PHP, il est préférable de passer par les dépôts mis à disposition et maintenue par Guillaume Plessis.

Attention, l’installation et la configuration a été validée pour un hébergement d’un site WordPress. Je ne suis pas développeur, il se peut que PHP 7 ne soit pas compatible avec vos applications.

Installer PHP 7 sur Debian

nb : toutes les commandes décrites dans le tutoriel sont exécutées en tant que root.
nb 2 : L’installation et les configurations expliquées pour Debian Jessie et Sid (nom de code : Stretch).

  • Ajout des dépôts dotdeb :
  • echo "deb http://packages.dotdeb.org jessie all" > /etc/apt/sources.list.d/dotdeb.list
    
  • Ajout de la clé :
  • wget https://www.dotdeb.org/dotdeb.gpg && apt-key add dotdeb.gpg
  • Mise à jour des paquets :
  • apt update
  • Vérification de la présence de php7 :
  • Debian Jessie :

    apt-cache policy php7.0

    Debian Sid :

    apt policy php7.0
    php7.0:
      Installed: (none)
      Candidate: 7.0.0-5~dotdeb+8.1
      Version table:
         7.0.0-5~dotdeb+8.1 500
            500 http://packages.dotdeb.org jessie/all amd64 Packages
         7.0.0-1~dotdeb+8.1 500
            500 http://packages.dotdeb.org jessie/all amd64 Packages
    
  • Purger tous les paquets liés à php5.x :
  • Debian Jessie :

    apt-get --purge remove php5*

    Debian Sid :

    apt purge php5*

    (Il y a peut être plus propre et moins barbare)

    exemple dans mon cas :

    The following packages were automatically installed and are no longer required:
      dh-php5 libqdbm14 shtool
    Use 'apt autoremove' to remove them.
    The following packages will be REMOVED:
      php-pear* php5-cli* php5-common* php5-dev* php5-geoip* php5-json* php5-readline* pkg-php-tools*
    0 upgraded, 0 newly installed, 8 to remove and 64 not upgraded.
    After this operation, 16.5 MB disk space will be freed.
    Do you want to continue? [Y/n]
    
  • Nettoyage des paquets dépendants à php5.x :
  • Debian Jessie :

    apt-get autoremove

    Debian Sid :

    apt autoremove

    exemple dans mon cas :

    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following packages will be REMOVED:
      dh-php5 libqdbm14 shtool
    0 upgraded, 0 newly installed, 3 to remove and 64 not upgraded.
    After this operation, 892 kB disk space will be freed.
    Do you want to continue? [Y/n]
    
  • Installation de php7.0 :
  • apt install php7.0
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following additional packages will be installed:
      apache2 apache2-bin apache2-data apache2-utils aspell aspell-en dictionaries-common emacsen-common enchant hunspell-en-us
      libapache2-mod-php7.0 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libaspell15 libenchant1c2a libhunspell-1.3-0
      liblua5.1-0 libqdbm14 php-common php7.0-cli php7.0-common php7.0-json php7.0-opcache ssl-cert
    Suggested packages:
      www-browser apache2-doc apache2-suexec-pristine | apache2-suexec-custom aspell-doc spellutils wordlist hunspell openoffice.org-hunspell
      | openoffice.org-core php-pear libenchant-voikko php-user-cache openssl-blacklist
    Recommended packages:
      php-readline
    The following NEW packages will be installed:
      apache2 apache2-bin apache2-data apache2-utils aspell aspell-en dictionaries-common emacsen-common enchant hunspell-en-us
      libapache2-mod-php7.0 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libaspell15 libenchant1c2a libhunspell-1.3-0
      liblua5.1-0 libqdbm14 php-common php7.0 php7.0-cli php7.0-common php7.0-json php7.0-opcache ssl-cert
    0 upgraded, 27 newly installed, 0 to remove and 64 not upgraded.
    Need to get 9208 kB of archives.
    After this operation, 37.2 MB of additional disk space will be used.
    Do you want to continue? [Y/n]
    

    Cependant, je ne veux pas installer tous les paquets liés à Apache2 ! voici une petite astuce qui permet de dire à Apt de n’installer que php7 :

    apt install php7.0-fpm php7.0

    ce qui donne :

    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following additional packages will be installed:
      aspell aspell-en dictionaries-common emacsen-common enchant hunspell-en-us libaspell15 libenchant1c2a libhunspell-1.3-0 libqdbm14
      php-common php7.0-cli php7.0-common php7.0-json php7.0-opcache
    Suggested packages:
      aspell-doc spellutils wordlist hunspell openoffice.org-hunspell | openoffice.org-core libenchant-voikko php-pear php-user-cache
    Recommended packages:
      php-readline
    The following NEW packages will be installed:
      aspell aspell-en dictionaries-common emacsen-common enchant hunspell-en-us libaspell15 libenchant1c2a libhunspell-1.3-0 libqdbm14
      php-common php7.0 php7.0-cli php7.0-common php7.0-fpm php7.0-json php7.0-opcache
    0 upgraded, 17 newly installed, 0 to remove and 64 not upgraded.
    Need to get 7188 kB of archives.
    After this operation, 29.7 MB of additional disk space will be used.
    Do you want to continue? [Y/n]
    

    Avec cette technique Apache2 ne fait plus partie des dépendances \o/

  • Une fois installé, on vérifie la version :
  • php -v
    PHP 7.0.0-5~dotdeb+8.1 (cli) NTS 
    Copyright (c) 1997-2015 The PHP Group
    Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
        with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
    
  • Pour un site qui dépend d’une base de données MariaDB ou Mysql, installer php7.0-mysql :
    apt install php7.0-mysql

Configurer php7.0-fpm

A ce stade, php7.0-fpm n’est pas configuré pour être opérationnel et il se peut qu’ion se retrouve avec l’erreur 502 Bad Gateway dans le navigateur.

  • Modification de php.ini :
  • nano /etc/php/7.0/fpm/php.ini

    Modifier la ligne 768 :

    cgi.fix_pathinfo=0
  • Mdification de www.conf :
  • nano /etc/php/7.0/fpm/pool.d/www.conf

    Mofifier la ligne 36
    Debian Jessie :

    listen = /run/php/php7.0-fpm.sock

    Debian Sid :

    listen = /var/run/php/php7.0-fpm.sock

    par

    listen = 127.0.0.1:9000
  • Modifier ou ajouter au block server nginx :
  • fastcgi_pass 127.0.0.1:9000;
  • Relancer php7.0-fpm et nginx :
  • systemctl restart php7.0-fpm
    systemctl restart nginx
  • Test dans le navigateur internet http://domaine.tld/info.php :
  • Ajouter un fichier info.php à la racine du serveur web :

    echo "<?php phpinfo(); ?>" > /var/www/info.php

    debian-php7

4 Comments

  1. Les commandes apt policy et apt autoremove n’existent pas…
    apt policy peut être remplacé par apt search et « autoremove » ne peut être utilisé qu’avec l’ancien apt-get
    Tu peut raccourcir en : apt-get autoremove –purge php5*
    Ah et le socket de PHP 7 c’est /run/php/php7.0-fpm.sock :)

  2. Salut Angristan,
    exact, j’ai fais un mixte de Jessie et de Sid…
    Article corrigé, merci :-)

  3. Salut,
    Sympa le tuto. Merci.
    Je l’ai suivi sur un serveur de recette pour tester un peu et ça fonctionne.
    Par contre, j’ai une tache qui doit faire de la compression bz2 et ça fonctionne pas. J’ai trouvé sur le net qu’il fallait recompiler PHP7 avec un paramètre du genre « compress:bz2 ».
    N’aurais-tu pas une autre solution ?
    Merci
    ++

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.