Comment mettre à niveau vers PHP 7 sur CentOS 7

introduction

PHP 7, publié le 3 décembre 2015, promet des améliorations substantielles de la vitesse par rapport aux versions précédentes du langage, ainsi que de nouvelles fonctionnalités telles que l’indication de type scalaire. Ce guide explique comment mettre à niveau rapidement un serveur Web Apache ou Nginx exécutant PHP 5.x (toute version) vers PHP 7, à l’aide de packages fournis par la communauté.

Si vous avez installé phpMyAdmin pour la gestion de la base de données, il est vivement recommandé d’attendre les packages officiels CentOS PHP 7 avant de procéder à la mise à niveau, car les packages phpMyAdmin ne prennent pas encore en charge la mise à niveau. Si vous exécutez d’autres services ou applications avec des utilisateurs actifs, il est plus sûr de commencer par tester ce processus dans un environnement intermédiaire.

Conditions préalables

Ce guide suppose que vous utilisez PHP 5.x sur CentOS 7, en utilisant soit + mod_php + en conjonction avec Apache, soit PHP-FPM en conjonction avec Nginx. Cela suppose également que vous avez un utilisateur non root configuré avec les privilèges + sudo + pour les tâches administratives.

Le processus d’installation de PHP 5 est documenté dans ces guides:

S’abonner au référentiel de projets de la communauté IUS

Comme PHP 7.x n’est pas encore empaqueté dans les référentiels officiels des principales distributions, nous devrons faire appel à une source tierce. Plusieurs référentiels proposent des fichiers PHP 7 RPM. Nous allons utiliser le https://ius.io [référentiel IUS].

IUS propose un script d’installation pour s’abonner à son référentiel et importer les clés GPG associées. Assurez-vous que vous êtes dans votre répertoire personnel et récupérez le script en utilisant + curl +:

cd ~
curl 'https://setup.ius.io/' -o setup-ius.sh

Exécutez le script:

sudo bash setup-ius.sh

Mettre à jour + mod_php + avec Apache

Cette section décrit le processus de mise à niveau pour un système utilisant Apache en tant que serveur Web et + mod_php + pour exécuter du code PHP. Si vous utilisez plutôt Nginx et PHP-FPM, passez à la section suivante.

Commencez par supprimer les paquets PHP existants. Appuyez sur * y * et appuyez sur * Entrée * pour continuer lorsque vous y êtes invité.

sudo yum remove php-cli mod_php php-common

Installez les nouveaux packages PHP 7 d’IUS. Encore une fois, appuyez sur * y * et * Entrée * lorsque vous y êtes invité.

sudo yum install mod_php70u php70u-cli php70u-mysqlnd

Enfin, redémarrez Apache pour charger la nouvelle version de + mod_php +:

sudo apachectl restart

Vous pouvez vérifier le statut d’Apache, qui est géré par l’unité + httpd + + systemd +, en utilisant + systemctl +:

systemctl status httpd

Mise à niveau de PHP-FPM avec Nginx

Cette section décrit le processus de mise à niveau pour un système utilisant Nginx en tant que serveur Web et PHP-FPM pour exécuter du code PHP. Si vous avez déjà mis à niveau un système Apache, passez directement à la section Tests PHP.

Commencez par supprimer les paquets PHP existants. Appuyez sur * y * et appuyez sur * Entrée * pour continuer lorsque vous y êtes invité.

sudo yum remove php-fpm php-cli php-common

Installez les nouveaux packages PHP 7 d’IUS. Encore une fois, appuyez sur * y * et * Entrée * lorsque vous y êtes invité.

sudo yum install php70u-fpm-nginx php70u-cli php70u-mysqlnd

Une fois l’installation terminée, vous devrez apporter quelques modifications à la configuration de PHP-FPM et de Nginx. Comme configuré, PHP-FPM écoute les connexions sur un socket TCP local, tandis que Nginx attend un Unix domain socket, qui mappe sur un chemin du système de fichiers.

PHP-FPM peut gérer plusieurs * pools * de processus enfants. Tel que configuré, il fournit un seul pool appelé * www *, défini dans + / etc / php-fpm.d / www.conf +. Ouvrez ce fichier avec + nano + (ou votre éditeur de texte préféré):

sudo nano /etc/php-fpm.d/www.conf

Recherchez le bloc contenant + listen = 127.0.0.1: 9000 +, qui indique à PHP-FPM d’écouter l’adresse de bouclage située sur le port 9000. Commentez cette ligne avec un point-virgule et décommentez + listen = / run / php-fpm / www.sock + quelques lignes ci-dessous.

/etc/php-fpm.d/www.conf

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000
; WARNING: If you switch to a unix socket, you have to grant your webserver user
;          access to that socket by setting listen.acl_users to the webserver user.

Ensuite, recherchez le bloc contenant les valeurs + listen.acl_users + et décommentez + listen.acl_users = nginx +:

/etc/php-fpm.d/www.conf

; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
;listen.acl_users = apache,nginx
;listen.acl_users = apache

;listen.acl_groups =

Quittez et enregistrez le fichier. Dans + nano +, vous pouvez y parvenir en appuyant sur * Ctrl-X * pour quitter, * y * pour confirmer et * Entrée * pour confirmer le nom du fichier à écraser.

Ensuite, assurez-vous que Nginx utilise le bon chemin de socket pour gérer les fichiers PHP. Commencez par ouvrir + / etc / nginx / conf.d / default.conf +:

sudo nano /etc/nginx/conf.d/php-fpm.conf

+ php-fpm.conf + définit un upstream, qui peut être référencé par d’autres directives de configuration Nginx. À l’intérieur du bloc amont, utilisez un + # + pour commenter + serveur 127.0.0.1: 9000; +, et décommenter + serveur unix: /run/php-fpm/www.sock; +:

/etc/nginx/conf.d/php-fpm.conf

# PHP-FPM FastCGI server
# network or unix domain socket configuration

upstream php-fpm {
       server 127.0.0.1:9000;

}

Quittez et enregistrez le fichier, puis ouvrez + / etc / nginx / conf.d / default.conf +:

sudo nano /etc/nginx/conf.d/default.conf

Recherchez un bloc commençant par + location ~ \ .php $ {+. Dans ce bloc, recherchez la directive + fastcgi_pass. Mettez en commentaire ou supprimez cette ligne et remplacez-la par + fastcgi_pass php-fpm +, qui référencera l’amont défini dans + php-fpm.conf +:

/etc/nginx/conf.d/default.conf

 location ~ \.php$ {
     try_files $uri =404;
     fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
     fastcgi_pass php-fpm;
     fastcgi_index index.php;
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     include fastcgi_params;
 }

Quittez et enregistrez le fichier, puis redémarrez PHP-FPM et Nginx pour que les nouvelles directives de configuration prennent effet:

sudo systemctl restart php-fpm
sudo systemctl restart nginx

Vous pouvez vérifier le statut de chaque service en utilisant + systemctl +:

systemctl status php-fpm
systemctl status nginx

Tester PHP

Avec un serveur Web configuré et les nouveaux packages installés, nous devrions être en mesure de vérifier que PHP est opérationnel. Commencez par vérifier la version de PHP installée sur la ligne de commande:

php -v

Sortie

PHP 7.0.1 (cli) (built: Dec 18 2015 16:35:26) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies

Vous pouvez également créer un fichier de test dans la racine du document du serveur Web. Bien que son emplacement dépend de la configuration de votre serveur, la racine du document est généralement définie sur l’un des répertoires suivants:

  • + / var / www / html

  • + / var / www / +

  • + / usr / share / nginx / html

En utilisant + nano +, ouvrez un nouveau fichier nommé + info.php + dans la racine du document. Par défaut, sur Apache, ce serait:

sudo nano /var/www/html/info.php

Sur Nginx, vous pourriez plutôt utiliser:

sudo nano /usr/share/nginx/html/info.php

Collez le code suivant:

info.php

<?php
phpinfo();

Quittez l’éditeur en sauvegardant + info.php. Maintenant, chargez l’adresse suivante dans votre navigateur:

http:///info.php

Vous devriez voir la page d’informations PHP 7, qui répertorie la version et la configuration en cours. Une fois cette vérification effectuée, il est plus sûr de supprimer + info.php:

sudo rm /var/www/html/info.php

Vous avez maintenant une installation de PHP 7 qui fonctionne. À partir de là, vous pouvez consulter le blog de Erika Heidi sur Getting Ready for PHP 7 et examiner le https : //secure.php.net/manual/fr/migration70.php [guide officiel de la migration].