Mettre à jour PHP Andreas Korthaus Nicolas Litchinko Ce document décrit la procédure que les utilisateurs devraient suivre pour mettre à jour leur installation de PHP en toute sécurité. 1.1 2006-03-19 Introduction

Il a été demandé de nombreuses fois pourquoi PHP5 n'était pas encore marqué comme stable dans portage. Le problème n'est pas le paquet PHP5 lui-même ; la principale raison pour laquelle PHP5 n'est pas encore marqué comme stable est qu'il y a beaucoup d'applications, d'extensions de PHP et de paquets dans portage qui ne fonctionnent pas avec PHP5 et il n'y a rien que nous ne puissions faire pour y remédier. PHP5 n'est pas compatible à 100% avec PHP4 et tous les programmes PHP4 ne peuvent être ou ne seront pas portés pour être utilisés avec PHP5. Beaucoup d'utilisateurs vont encore avoir besoin du support de PHP4 pour un bon moment.

La solution à ces problèmes est de fournir un environnement comportant à la fois PHP4 et PHP5. Ce n'était toutefois pas possible avec la configuration actuelle des paquets et eclasses de PHP ; il a donc été nécessaire de mettre beaucoup d'efforts dans la mise en place d'une nouvelle configuration, de nouvelles eclasses et de nouveaux ebuilds.

Ce document explique comment mettre à jour sans détériorer votre système.

Les nouveaux paquets PHP nécessitent la nouvelle configuration d'Apache. Lisez donc le guide Mettre à Jour Apache si vous ne l'avez pas déjà fait.
Changements
La consolidation des paquets PHP de base

Tous les ebuilds de PHP dev-php/php, dev-php/php-cgi et dev-php/mod_php ont été rassemblés en un seul ebuild : dev-lang/php.

Pour choisir la SAPI que vous désirez, utilisez les USE flags suivants :

  • cgi - compile & installe /usr/bin/php-cgi
  • cli - compile & installe /usr/bin/php
  • apache - compile & installe mod_php pour Apache 1.3 (nouvelle configuration)
  • apache2 - compile & installe mod_php pour Apache 2.0 (nouvelle configuration)

Vous pouvez mélangez ces USE flags à ceci près que vous ne pouvez pas activer apache et apache2 en même temps.

Le principal objectif de ces ebuilds est de vous permettre d'avoir PHP4 et PHP5 installés en parallèle :

(installer la dernière version de PHP avec les modules CLI et Apache2)
USE="cli apache2" emerge 'dev-lang/php'

(installer uniquement PHP4)
USE="cli apache2" emerge '=dev-lang/php-4*'

(installer les deux, PHP4 et PHP5)
USE="cli apache2" emerge '=dev-lang/php-4*' '=dev-lang/php-5*'
Les USE flags ne devraient pas être configurés de cette façon. Référez vous au fichier /etc/portage/package.use comme expliqué plus loin.
Nouvelles Catégories Dans Portage

Les nouveaux ebuilds de PHP ont été déplacés de dev-php vers dev-lang/php. Pour permettre d'installer les paquets indépendamment pour PHP4 et PHP5, deux nouvelles catégories ont été introduites dans portage : dev-php4 et dev-php5. Ces catégories sont principalement utilisées par les paquets PECL comme pecl-pdo, pecl-apc, php-java-bridge ou xdebug.

Pour installer pecl-apc :

(installer APC pour PHP4 uniquement)
emerge dev-php4/pecl-apc

(installer APC pour PHP5 uniquement)
emerge dev-php5/pecl-apc

(installer APC pour PHP4 et PHP5)
emerge dev-php4/pecl-apc dev-php5/pecl-apc
Nouveaux Dossiers
  • Ces nouveaux ebuils installent leur content dans /usr/lib/php4 et /usr/lib/php5 (les modules Apache sont placés au bon endroit pour Apache).
  • Les paquets PEAR et les autres librairies PHP sont installés dans /usr/share/php (au lieu de /usr/lib/php auparavant).
  • Les paquets PECL n'ajouteront plus d'instructions de configuration dans le fichier de configuration php.ini, mais ajouteront un fichier [PAQUET].ini dans le répertoire /etc/php/[SAPI]/ext.
Liens vers les binaires de PHP

Si vous installez plus d'une version de PHP, par exemple :

USE="cgi cli apache2" emerge '=dev-lang/php-4*' '=dev-lang/php-5*'

Ces ebuilds vont créer des liens symboliques dans /usr/bin vers la dernière version de PHP que vous avez installé, et dans ce cas c'est PHP5 car il a été installé après PHP4. Si vous voulez que /usr/bin/php ou /usr/bin/php-cgi pointe vers PHP4 ou alors l'un vers PHP4 et l'autre vers PHP5, etc., vous pouvez utilisez l'outil php-select fourni par app-admin/php-toolkit. php-select rend très simple la modification des liens vers les binaires de votre choix.

Instructions de Mise à Jour
Trouvez les paquets à mettre à jour

Tout d'abord, vous devez déterminer quels paquets additionnels vous devez mettre à jour. Vous pouvez faire cela en utilisant l'outil equery, fourni par le paquet app-portage/gentoolkit :

$ equery list 'dev-php/'
[ Searching for all packages in 'dev-php' among: ]
 * installed packages
[I--] [  ] dev-php/php-4.4.0 (0)
[I--] [  ] dev-php/mod_php-4.4.0 (1)
[I--] [  ] dev-php/smarty-2.6.10 (0)
[I--] [  ] dev-php/PEAR-PEAR-1.3.5-r1 (0)
[I--] [  ] dev-php/PEAR-Mail-1.1.6 (0)
[I--] [  ] dev-php/PEAR-MDB-1.3.0 (0)
[I--] [  ] dev-php/PECL-apc-3.0.6 (0)
[I--] [  ] dev-php/PECL-imagick-0.9.11 (0)
[I--] [  ] dev-php/xdebug-2.0.0_beta3 (0)
Les paquets que vous avez installé peuvent être complètement différents, assurez vous que vous utilisez cette commande en personne. Vous devriez sauvegarder la liste générée pour vous assurer de mettre à jour tous les paquets. De nombreuses applications web ne sont pas affectées du tout car elles utilisent pour la plupart l'eclass webapp qui se charge de les installer correctement. Vous pourriez vérifier qu'il n'existe pas de nouvelle révision.

Les extensions de PHP comme

  • PECL-apc
  • PECL-imagick
  • xdebug

ont été séparées en 2 catégories dans portage : dev-php4 et dev-php5. Cela permet de les utiliser indépendemment avec les deux versions de PHP. De plus, la plupart de ces paquets ont été renommés :

Exemples de nouveaux dossiers et de changements de noms :

APCdev-php/PECL-apcdev-php4/pecl-apcdev-php5/pecl-apcImagickdev-php/PECL-imagickdev-php4/pecl-imagickdev-php5/pecl-imagickXdebugdev-php/xdebugdev-php4/xdebugdev-php5/xdebug
Extension PHP ancien nouveau pour PHP4 nouveau pour PHP5
Avant d'installer à nouveau ces extensions, vous devez trouvez dans /usr/portage comment ces paquets ont été renommés.
Supprimer les Anciens Paquets

Nous avons effectués de nombreux changements dans le fonctionnement de PHP sous Gentoo. Vous devez supprimer complètement vos anciens paquets PHP avant d'installer les nouveaux paquets :

(supprimer les paquets PHP)
emerge --unmerge php mod_php

(supprimer les extensions de PHP)
emerge --unmerge PECL-apc PECL-imagick xdebug

(suprimer les bibliothèques/applications PHP)
emerge --unmerge PEAR-PEAR PEAR-Mail PEAR-MDB smarty
Configurer les USE flags

Comme nous avons ajouté de nouveaux USE flags, vous désirez probablement les passer en revue et ajouter les lignes appropriées à /etc/portage/package.use (ce fichier doit être créé s'il n'existe pas).

/etc/portage/package.use va configurer les USE flags pour votre installation de PHP et s'en souvenir sans que vous n'ayez à éditer make.conf.

Veuillez configurer les USE flags en fonction des fonctionnalités que vous désirez intégrer à votre installation de PHP (il est recommandé de définir au moins l'USE flag cli) :

dev-lang/php -* cli apache2 ctype expat fastbuild ftp gd hash iconv memlimit mysql nls pcre pic pdo reflection session simplexml sockets spl ssl tokenizer truetype unicode xml xsl zlib
-* désactivera tous les USE flags (ceci désactivera également les plus basiques des fonctionnalités de PHP comme le support de Session, PCRE, gd ou MySQL !) et vous devez donc préciser tous les USE flags relatifs aux extensions/fonctions que vous désirez utiliser. Référez vous au guide Managing Extensions pour de plus amples détails. Vous devez définir les USE flag pour les fonctions par défaut comme pcre si vous voulez utiliser les fonctions preg_* ou session si vous voulez utiliser les fonctions de gestion de session.

Si vous désirez installer PHP4 et PHP5 en parallèle, vous pouvez définir différents USE flags pour chaque version :

=dev-lang/php-4* -* cli cgi apache2 ctype expat fastbuild force-cgi-redirect ftp gd iconv ipv6 memlimit mysql nls pcre pic posix session sockets ssl tokenizer truetype unicode xml xsl zlib
=dev-lang/php-5* -* cli cgi apache2 ctype fastbuild force-cgi-redirect ftp gd hash iconv ipv6 memlimit mysql nls pcre pic posix pdo reflection session simplexml soap sockets spl sqlite ssl tokenizer truetype unicode xml xmlreader xmlwriter xsl zlib
Pour une liste d'USE flags recommandés, vous pouvez consulter la liste des USE flags recommandés. Pour la liste des USE flags disponibles, vous pouvez consulter la table des USE flags sur le wiki de l'overlay.
Installer PHP

Maintenant vous avez le choix d'installer uniquement PHP4, uniquement PHP5 ou les deux en parallèle. Pour installer PHP4, vous n'avez qu'à installer =dev-lang/php-4* ; pour installer PHP5 (la dernière version), vous pouvez utiliser dev-lang/php ; et pour installer les deux en parallèle, vous devez installer =dev-lang/php-4* et =dev-lang/php-5*.

Vérifier les USE flag :

(vérifier le paquet PHP4)
emerge --pretend --verbose '=dev-lang/php-4*'

(vérifier le paquet PHP5)
emerge --pretend --verbose '=dev-lang/php-5*'

(vérifier les extensions pour PHP4)
emerge --pretend --verbose dev-php4/pecl-apc dev-php4/pecl-imagick dev-php4/xdebug

(vérifier les extensions pour PHP5)
emerge --pretend --verbose dev-php5/pecl-apc dev-php5/pecl-imagick

(vérifier les bibliothèques/applicaions PHP)
emerge --pretend --verbose PEAR-PEAR PEAR-Mail PEAR-MDB smarty

Installez PHP si tout est correct :

(installer le paquet PHP4)
emerge '=dev-lang/php-4*'

(installer le paquet PHP5)
emerge '=dev-lang/php-5*'

(installer les extensions pour PHP4)
emerge dev-php4/pecl-apc dev-php4/pecl-imagick dev-php4/xdebug

(installer les extensions pour PHP5)
emerge dev-php5/pecl-apc dev-php5/pecl-imagick

(installer les bibliothèques/applications PHP)
emerge PEAR-PEAR PEAR-Mail PEAR-MDB smarty
PHP4 et PHP5 en parallèle : sélectionner l'application utilisée par cli/cgi

Une fois l'installation terminée, vous aurez des applications pour cli (N.d.t. ligne de commande) et/ou cgi dans /usr/lib/php4/bin et/ou /usr/lib/php5/bin. Si vous avez installé PHP4 et PHP5, portage ne peut pas décider pour vous lequel doit être utilisé par défaut et crée toujour un lien symbolique vers la dernière version de PHP que vous avez installé dans /usr/bin. Par conséquent, si vous avez installé PHP5 en dernier, /usr/bin/php pointera vers /usr/lib/php5/bin/php. Par conséquent, des liens symboliques (dans /usr/bin) doivent pointer vers les applications cli et/ou cgi ainsi que php-devel (responsable de la creéation des extensions PHP à l'aide de phpize et php-config). Ceci peut être effectué facilement en utilisant php-select qui fait partie du paquet app-admin/php-toolkit.

Les paquets dev-lang/php dépendent d'app-admin/php-toolkit. Par conséquent php-select devrait être disponible automatiquement après avoir installé les nouveaux paquets PHP.

Considérant que vous avez installé =dev-lang/php-4* et =dev-lang/php-5*, utilisez php-select et les commandes suivantes pour afficher les versions de PHP actuellement sélectionnées :

(pour cli)
php-select php

(pour cgi)
php-select php-cgi

(pour phpize, php-config)
php-select php-devel

Le résultat devrait ressembler à ceci :

# php-select php
/usr/bin/php is set to /usr/lib/php5/bin/php

Ceci signifie que /usr/bin/php, chemin par défaut vers l'application cli de PHP pointe sur l'application PHP5 /usr/lib/php5/bin/php. Par conséquent les scripts PHP utilisant /usr/bin/php seront exécutés par PHP5.

Utiliser php-select pour modifier les versions de PHP par défaut

Si vous n'êtes pas satisfait de la configuration que vous avez découverte au chapitre précédent, vous pouvez utiliser php-select à nouveau pour séléctioner la version que vous voulez :

(pour cli)
php-select php php4

(pour cgi)
php-select php-cgi php5

(pour phpize, php-config)
php-select php-devel php5
Vous pouvez utiliser php-select -h pour obtenir plus de détails sur les possibilités de php-select.

Vérifier les liaisons :

 # stat /usr/bin/php /usr/bin/php-cgi /usr/bin/phpize /usr/bin/php-config | grep File
 File: `/usr/bin/php' -> `/usr/lib/php4/bin/php'
 File: `/usr/bin/php-cgi' -> `/usr/lib/php5/bin/php-cgi'
 File: `/usr/bin/phpize' -> `/usr/lib/php5/bin/phpize'
 File: `/usr/bin/php-config' -> `/usr/lib/php5/bin/php-config'
Veuillez noter que php-select ne modifie que les versions par défaut. Si vous avez installé PHP4 et PHP5 cgi/cli, vous pouvez toujours utiliser les chemins directs que sont /usr/lib/php4/bin/php et /usr/lib/php5/bin/php pour exécuter des scripts PHP à l'aide d'une version spécifique. Vous pouvez utiliser PHP4 et PHP5 cgi dans la même instance d'Apache, mais vous ne pouvez pas utiliser deux modules PHP pour Apache différents dans une seule instance d'Apache ; référez vous au Guide de Configuration de PHP4 et PHP5 pour plus de détails.
Migration des fichiers de configuration

Le paquet PHP pour Gentoo place la configuration dans /etc/php, qui contient un sous-dossier pour chaque SAPI pour chaque version de PHP :

$ ls -1 /etc/php
apache2-php4
apache2-php5
cli-php4
cli-php5

Chaque sous-dossier contient son propre php.ini, comme les anciens paquets.

Modifications dans php.ini

Vous devriez utiliser etc-update ou dispatch-conf et vérifier les différences entre vos anciens et vos nouveaux paramètres dans php.ini. Les deux directives que vous devez absolument vérifier sont include_path et extension_dir. Toutefois, soyez prudent, extension_dir est modifié entre les différentes versions de PHP (y compris entre les versions 5.0 et 5.1 !).

Exemple pour PHP 5.1 dans /etc/php/apache2-php5/php.ini et /etc/php/cli-php5/php.ini :

include_path = ".:/usr/lib/php"
extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20050617/"
include_path = ".:/usr/share/php"
extension_dir = "/usr/lib/php5/lib/php/extensions/no-debug-non-zts-20050617/"
Assurez vous d'utiliser etc-update ou dispatch-conf pour visualiser les paramètres corrects pour chaque fichier.
Changements dans la configuration des extensions de PHP

Le nouveau paquet PHP ne stoque plus les directives de configuration des extensions externes (partagées) de PHP dans php.ini. Ces directives sont maintenant stoquées dans des fichiers de configuration spécifiques à l'extension dans les dossiers /etc/php/*/ext. Pour activer/désactiver les extensions partagées, les liens symboliques situés dans /etc/php/*/ext-active sont utilisés. Si vous voulez activer une extension, créez un lien symbolique dans /etc/php/*/ext-active pointant vers le fichier [EXTENSION].ini correspondant dans /etc/php/*/ext/. Si vous voulez désactiver une extension, supprimer le lien symbolique.

Si vous avez installé dev-php/PECL-apc auparavant, la configuration d'APC est stoquée dans votre php.ini. Si vous réinstallez le nouveau paquet dev-php5/pecl-apc, la configuration par défaut d'APC sera placée dans /etc/php/*5/ext/apc.ini.

Vous devez donc déplacer les directives de configuration d'APC de /etc/php/*5/php.ini vers /etc/php/*5/ext/apc.ini et créer un lien symbolique depuis /etc/php/*5/ext-active/apc.ini vers /etc/php/*5/ext/apc.ini.

Si vous installez PHP en tant que module d'Apache, assurez vous de redémarrer Apache après l'installation et la configuration.
Configurer Apache pour utiliser PHP4 et/ou PHP5

Pour configurer Apache pour charger le module PHP4 ou PHP5 (mod_php), vous devez ajouter la directive -D PHP4 ou -D PHP5 à la variable APACHE2_OPTS dans /etc/conf.d/apache2.

(options pour PHP4)
APACHE2_OPTS="-D PHP4"

(ou options pour PHP5)
APACHE2_OPTS="-D PHP5"

Il y a de nombreuses façons de configurer Apache pour utiliser les deux versions de PHP en parallèle. La plus simple est d'utiliser PHP4 et PHP5 en tant qu'application cgi, ou bien PHP4 en tant que cgi et PHP5 en tant que module (ou bien l'inverse). Il n'est pas possible d'utiliser le module PHP4 et le module PHP5 dans une seule instance d'Apache.

Nous avons créé un Guide de Configuration de PHP4 et PHP5 qui explique certaines des solutions envisageables.

Support / Obtenir de l'Aide

Si vous rencontrez des problèmes avec les nouveaux paquets PHP de Gentoo, voici les moyens que vous avez d'obtenir de l'aide :

  • Questions Courantes à propos de PHP sous Gentoo
  • Page de Development de l'Overlay PHP
  • #gentoo-php sur irc.freenode.net ; c'est le salon de discussion où les auteurs réguliers de l'overlay se retrouvent. Votre visite nous fera plaisir !
  • Les Forums Gentoo sont un endroit populaire où vous pouvez demander de l'aide. Il y a de nombreux autres utilisateurs de Gentoo qui lisent les Forums tout au long de la journée, ce qui en fait un excellent endroit pour demander de l'aide en urgence.

Pour des détails à propos de l'implémentation des nouveaux paquets, vous pouvez consulter les e-mails de Stuart sur gentoo-dev et les entrées dans le Blog de Stuart à partir de 'Radical Changes for PHP5 Support' (N.d.t. 'Changements Radicaux pour le Support de PHP5').

Sur la Page de Development vous trouverez beaucoup de documentation et des ebuilds plus récents qui seront intégrés dans l'arbre de portage officiel plus tard.