La première version bêta de PHP 7 est maintenant disponible pour le téléchargement et est jusqu’à 2 fois plus rapide que PHP 5.6 et 14 fois plus rapide que PHP 5.0 selon les journaux de version. Cette nouvelle version est de plus 100% compatible avec PHP 5.x. Cependant, certaines API obsolètes ont été retirées. Cela peut donc être une bonne idée de tester la compatibilité de vos sites avec cette nouvelle version. Vous pouvez le faire facilement et sans affecter les sites actuellement installés sur votre serveur en utilisant la fonction multi-version PHP d’ISPConfig 3. Cette version peut ensuite être sélectionnée dans les paramètres de vos sites web d’ISPConfig 3 individuellement pour chaque site. Elle fonctionne avec les modes PHP-FPM et FastCGI. Ce tutoriel explique comment compiler PHP 7 (Beta) avec le mode PHP-FPM ainsi que la version FastCGI sur un serveur Debian Jessie. Ces builds incluent Zend OPcache.
Note préliminaire
Je vais installer PHP 7 qui est actuellement en version bêta au moment où j’écris ces lignes. Veuillez noter que PHP-FPM peut-être utilisé à la fois sur un serveur web Apache2 et nginx tandis que FastCGI n’est disponible que pour le serveur web Apache2.
Avec les anciennes versions de PHP, PHP-FPM et FastCGI avaient été mutuellement réservés en mode binaire de sorte qu’ils pouvaient être compilés séparément. Avec PHP 7, les deux binaires peuvent être compilés ensemble et donc nous ne devrons faire qu’une seule compilation PHP.
Compiler PHP 7 avec PHP-FPM et FastCGI
Téléchargez et extrayez PHP 7 :
mkdir -p /opt/php-7.0.0 mkdir /usr/local/src/php5-build cd /usr/local/src/php5-build wget https://downloads.php.net/~ab/php-7.0.0beta1.tar.bz2 -O php-7.0.0.tar.bz2 tar jxf php-7.0.0.tar.bz2 cd php-7.0.0beta1/
Installez les pré-requis pour compiler PHP 7 et un éditeur en ligne de commande pour éditer les fichiers de configuration :
apt-get install build-essential vim
apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-turbo-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libxml2-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng12-dev libfreetype6-dev libkrb5-dev libpq-dev libxml2-dev libxslt1-dev
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
Cette dernière commande est requise si vous compilez PHP avec –with-imap, sinon l’exécution de ./configure s’arrêtera avec l’erreur suivante :
checking for crypt in -lcrypt... yes configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation. root@server1:/usr/local/src/php5-build/php-7.0.0#
Configurez et compilez PHP 7.0.0 comme suit (vous pouvez ajuster la commande ./configure en fonction de vos besoins, jeter un coup d’œil à la commande ./configure –help pour voir toutes les options disponibles ; si vous utilisez une commande ./configure différente, il est possible que vous ayez besoin de bibliothèques additionnelles sinon le processus de compilation pourrait être en échec) :
./configure --prefix=/opt/php-7.0.0 --with-pdo-pgsql --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-zlib --with-gd --with-pgsql --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-mysqli --with-pdo-mysql --with-mysqli --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu --enable-ftp --with-imap --with-imap-ssl --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm
Le dernier argument (–enable-fpm) permet d’assurer le fonctionnement de PHP avec le mode PHP-FPM.
make make install
Copiez php.ini et php-fpm.conf aux bons endroits :
cp /usr/local/src/php5-build/php-7.0.0beta1/php.ini-production /opt/php-7.0.0/lib/php.ini
cp /opt/php-7.0.0/etc/php-fpm.conf.default /opt/php-7.0.0/etc/php-fpm.conf cp /opt/php-7.0.0/etc/php-fpm.d/www.conf.default /opt/php-7.0.0/etc/php-fpm.d/www.conf
Ouvrez /opt/php-7.0.0/etc/php-fpm.conf et ajustez le paramètre suivant (supprimez le # devant la ligne de pid) :
vim /opt/php-7.0.0/etc/php-fpm.conf
[...] pid = run/php-fpm.pid [...]
Puis ouvrez /opt/php-7.0.0/etc/php-fpm.conf et ajustez la ligne d’écoute listen, vous devez utiliser un port non utilisé (par exemple le port 8999; le port 9000 pourrait être utilisé par défaut pour le PHP-FPM de Debian) :
vim /opt/php-7.0.0/etc/php-fpm.d/www.conf
[...] listen = 127.0.0.1:8999 [...]
La nouvelle version de Debian supporte Systemd ainsi que les scripts d’initialisation traditionnels. On va d’abord créer un script d’initiation pour le service PHP-FPM puis nous créerons une unité pour Systemd. Donc, créez le script d’initialisation pour PHP-FPM :
nano /etc/init.d/php-7.0.0-fpm
#! /bin/sh ### BEGIN INIT INFO # Provides: php-7.0.0-fpm # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts php-7.0.0-fpm # Description: starts the PHP FastCGI Process Manager daemon ### END INIT INFO php_fpm_BIN=/opt/php-7.0.0/sbin/php-fpm php_fpm_CONF=/opt/php-7.0.0/etc/php-fpm.conf php_fpm_PID=/opt/php-7.0.0/var/run/php-fpm.pid php_opts="--fpm-config $php_fpm_CONF" wait_for_pid () { try=0 while test $try -lt 35 ; do case "$1" in 'created') if [ -f "$2" ] ; then try='' break fi ;; 'removed') if [ ! -f "$2" ] ; then try='' break fi ;; esac echo -n . try=`expr $try + 1` sleep 1 done } case "$1" in start) echo -n "Starting php-fpm " $php_fpm_BIN $php_opts if [ "$?" != 0 ] ; then echo " failed" exit 1 fi wait_for_pid created $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; stop) echo -n "Gracefully shutting down php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -QUIT `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed. Use force-exit" exit 1 else echo " done" echo " done" fi ;; force-quit) echo -n "Terminating php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -TERM `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; restart) $0 stop $0 start ;; reload) echo -n "Reload service php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -USR2 `cat $php_fpm_PID` echo " done" ;; *) echo "Usage: $0 {start|stop|force-quit|restart|reload}" exit 1 ;; esac
Créez le script d’initialisation exécutable et ajoutez les liens au démarrage du système :
chmod 755 /etc/init.d/php-7.0.0-fpm insserv php-7.0.0-fpm
Et créez maintenant le fichier d’unité pour Systemd (si vous utilisez une version antérieure à Debian Jessie, passez cette étape) :
nano /lib/systemd/system/php-7.0.0-fpm.service
[Unit] Description=The PHP 7 FastCGI Process Manager After=network.target [Service] Type=simple PIDFile=/opt/php-7.0.0/var/run/php-fpm.pid ExecStart=/opt/php-7.0.0/sbin/php-fpm --nodaemonize --fpm-config /opt/php-7.0.0/etc/php-fpm.conf ExecReload=/bin/kill -USR2 $MAINPID [Install] WantedBy=multi-user.target
systemctl daemon-reload
Finalement, lancez PHP-FPM …
Pour les serveurs utilisant le système d’initialisation traditionnel, exécutez :
/etc/init.d/php-7.0.0-fpm start
Le résultat devrait être :
/etc/init.d/php-7.0.0-fpm start Starting php-fpm done
Sur les serveurs utilisant Systemd, utilisez plutôt cette ligne de commande :
systemctl start php-7.0.0-fpm.service
Pour activer l’option Zend OPcache, ouvrez /opt/php-7.0.0/lib/php.ini …
vim /opt/php-7.0.0/lib/php.ini
… et ajoutez la ligne suivante à la fin du fichier :
[...] zend_extension=opcache.so
Le memcache et l’extension APCu ne peuvent pas encore être installés sur PHP 7, nous allons donc sauter leur installation pour le moment.
Activer PHP 7 sur ISPConfig
Sur ISPConfig 3, vous pouvez configurer une nouvelle version de PHP dans « Système > Additional PHP Versions« . Sous l’onglet « Name« , il vous suffit de remplir un nom pour la version PHP (exemple : PHP 7.0.0). Cette version PHP sera répertoriée sous ce nom dans les paramètres du site ISPConfig :
Allez sur l’onglet « FastCGI Settings » et remplissez les champs comme suit :
Path to the PHP FastCGI binary : /opt/php-7.0.0/bin/php-cgi
Path to the php.ini directory : /opt/php-7.0.0/lib
Puis allez sur l’onglet « PHP-FPM Settings » et remplissez les champs comme suit :
Path to the PHP-FPM init script : /etc/init.d/php-7.0.0-fpm
Path to the php.ini directory : /opt/php-7.0.0/lib
Path to the PHP-FPM pool directory : /opt/php-7.0.0/etc/php-fpm.d
Liens
- PHP : http://www.php.net/
- ISPConfig : http://www.ispconfig.org/
- Debian : http://www.debian.org/
Source en anglais : howtoforge.com