LOGICIELS LIBRES ET DEVELOPPEMENT

LOGICIELS LIBRES ET DEVELOPPEMENT

Les nouveautés de PHP 6

La nouvelle mouture de la plateforme star du Web est en cours de préparation : PHP 6 est en vue ! Pourquoi, comment, quelles seront les nouveautés ? Découvrez avec nous ce que le PHPGroup, mené par Rasmus LERDORF et Andrei ZMIEVSKI nous préparent !

A l'heure de la mondialisation il n'est pas rare pour des grosses entreprises d'avoir des équipes de développement partout dans le monde. C'est notamment le cas du célèbre portail Yahoo ! qui utilise massivement PHP (99% du site est en PHP). Au niveau de la diversité des équipes technique cela implique une grande diversité dans la gestion des langues. C'est dans ce cadre que Rasmus Lerdorf, le créateur de PHP, qui travaille chez Yahoo! a été interpellé par ses équipes chinoises sur le support d'unicode. Ce support leur permettrait de mettre en place des solutions compatibles avec leur langue. C'est suite à cette demande que les principaux responsables du PHP Group se sont réunis pour planifier les différentes évolutions de PHP 6. Au niveau des évolutions on compte :

  • Support d'Unicode,
  • Amélioration de la Programmation Orienté Objet,
  • Amélioration et sécurisation des fonctionnalités,
  • Evolution du dépot PECL,
  • Améliorations diverses.

Le support UNICODE

Grâce à sa compatibilité avec UNICODE, PHP 6 pourra être utilisé partout dans le monde et permettra à vos applications de supporter n'importe quel alphabet international. PHP n'ayant pas été prévu pour fonctionner en respectant la norme UNICODE il est nécessaire de réaliser un gros travail de fond sur les différentes strates de PHP :

  • le moteur de PHP,
  • la couche SAPI,
  • les extensions.

Utiliser UNICODE

L'exemple ci-après utilise les fonctions des manipulations de chaînes de caractères printf() et strlen() . Sans le support UNICODE, ces fonctions considèrent qu'un caractère est stocké sur un seul octet, ce qui pose problème lorsque l'on manipule des caractères spéciaux ou accentués en UTF-8.


Amélioration et sécurisation des fonctionnalités

Register globals

Avant la version PHP 4.2, la valeur par défaut de la directive de configuration register_globals, dans le fichier de php.ini, était à On. On pouvait alors référencer la valeur login reçue par un formulaire avec la variable globale $login.
Mal employée, cette fonctionnalité facilitait l’apparition de problèmes de sécurité, puisque le visiteur pouvait injecter directement des variables dans l’espace du développeur.

Depuis PHP 4.2, cette fonctionnalité est désactivée par défaut. Avec register_globals désactivé, une variable envoyée par un formulaire sous le nom login ne sera plus accessible directement avec $login. Pour relire ce champ, il faudra alors utiliser la variable $_REQUEST['login'] ($_GET['login'] ou $_POST['login'] renverra le même résultat suivant la méthode employée pour envoyer le formulaire).

Avec PHP 5 il était possible de réactiver register_globals, avec PHP 6 ce ne sera plus possible.

Magic quotes

Les anciennes versions de PHP embarquaient par défaut un mécanisme destiné à protéger l’utilisateur des injections SQL. PHP filtrait alors toutes les entrées utilisateur (paramètres HTTP reçus en GET, en POST ou via les cookies) et ajoutait une barre oblique inverse (caractère \) devant les apostrophes, les guillemets et le caractère nul.

Ce comportement a été supprimé car il rendait complexe la gestion des données (il faut les gérer différemment selon qu’elles viennent de l’utilisateur ou d’autres sources) et entraînait une baisse légère de performances pour ceux qui n’en ont pas besoin.

Avec PHP 5 il était possible de réactiver les magic_quotes, avec PHP 6 ce ne sera plus possible.

Safe Mode

La directive de configuration safe_mode influe beaucoup sur les accès aux fichiers. À chaque accès, PHP vérifie que le propriétaire du fichier auquel vous voulez accéder est bien le même que l’utilisateur en cours.

Bien que cette directive de configuration apporte certains plus en terme de sécurité il ne faut pas croire qu'elle soit totalement fiable. Pour cette raison le PHP Group a décidé de la supprimer. On conseillera l'utilisation de la directive de configuration open_basedir pour optimiser la sécurité de ses applications.

PECL

PECL est un dépot d'extension PHP. A la différence du dépot PEAR, PECL ne contient que des extensions PHP écrites en C (par opposition à PEAR qui contient des bibliothèques PHP écrites en PHP).

Par défaut PHP intègre un certain nombre d'extensions dans son packaging natif. Pour des raisons de performances et de volume toutes ne sont pas dans le package par défaut. Il conviendra donc d'aller chercher celles dont vous aurez besoin. Bien que peu connu le dépot PECL offre un grand nombre d'extensions intéressantes pour des besoins spécifiques.

A ce titre certaines extensions de PHP moins utilisées migrent vers PECL et d'autres viennent de PECL pour se greffer dans le package de base.

Intégration native de XMLReader / XMLWriter

XML Reader offre un parseur XML simple à utiliser basé sur SAX et XML Writer offre une API pour écrire des fichiers XML. Ces deux extensions permettent de manipuler des fichiers XML bien plus facilement. Elles seront intégrées à la distribution native de PHP 6.

Déplacement des extensions de bases de données non PDO vers PECL

PDO (PHP Data Object) est la principale nouveauté de PHP 5.1. Cette extension vous apportera un confort d’utilisation et une abstraction plus importants que les anciennes fonctions natives propres à chaque SGBD. L’approche objet de PDO vous permettra de plus d’étendre les fonctions d’accès à votre base facilement et de manière transparente.

  1. <?php
  2.  
  3. try {
  4.     $dbh = new PDO($dsn, $user, $pass);
  5. } catch (PDOException $e) {
  6.     die( "Erreur ! : " . $e->getMessage() );
  7. }
  8.  
  9.  
  10. // Insertion d’un enregistrement
  11. $sql = "INSERT INTO auteur (login) VALUES ('roms')";
  12. $dbh->exec($sql);
  13.  
  14. // Lecture d’enregistrements
  15. $sql = "SELECT login FROM auteur";
  16. $resultat = $dbh->query($sql);
  17. while ($row = $resultat->fetch()) {
  18.     print_r($row);
  19. }
  20.  
  21. // Fermeture de la connexion
  22. $dbh = NULL;

Afin de pousser à l'utilisation de cette interface commune les vieilles extensions PHP seront déplacées vers PECL. Ainsi il ne sera plus possible de faire appel à mysql_connect() avec le paquet d'installation par défaut.

Les espaces de noms en PHP

Prévu pour PHP5 et finalement retiré, les espaces de noms arrivent en PHP6 ! Cette approche montre bien le souhait du PHPGroup de rendre PHP 6 encore plus ouvert aux applications de grande envergure ou aux applications qui sont montées sur plusieurs briques indépendantes.

Souvent, le développeur est confronté à des problèmes de recouvrement : deux variables, deux fonctions ou deux classes ayant le même nom, qui entrent en conflit. Les espaces de noms permettent d'éviter ce problème en proposant une séparation de chaque brique en paquetage dont l'environnement sera protégé. Ainsi, la sécurité et l'intégrité des applications seront améliorées.

Intégration native d'un accélérateur

Le cache d'op-codes est un moyen immédiat d'optimiser les performances globales d'une application. Il est adapté à la plupart des développements PHP et intervient dans la couche "basse" de PHP, c'est à dire entre la lecture du code PHP et son exécution.

Conseils pour anticiper votre migration

Voici quelques conseils en vrac pour mieux anticiper la migration de PHP5 à PHP6 :

  • Ne pas utiliser register_globals, toujours utiliser $_POST, $_GET et $_COOKIE en remplacement. L'utilisation de la fonction import_request_variables() sera toujours possible pour faciliter la migration.
  • Ne pas utiliser $HTTP_POST_VARS et $HTTP_SERVER_VARS, préférez $_POST et $_SERVER.
  • Mettre toutes les directives magic_quotes_* à off, celles-ci seront supprimées.
  • Désactiver la directive safe_mode, qui sera supprimée dans PHP 6. Cette directive tente de sécuriser PHP par diverses actions (fonctions retirées, limitation des accès aux fichiers, etc.). Elle ne doit pas être un moyen expéditif de sécuriser une application.
  • Préférer la librairie GD2 à GD1 pour les traitements d'images.
  • Prendre l'habitude de travailler avec UTF-8 ou UTF-16. Le format natif de gestion des données dans le noyau de PHP sera l'UTF-16. Ce noyau utilise la librairie ICU (International Components for Unicode), projet initié par IBM.

Auteur : Cyril PIERRE de GEYER

Cyril Pierre De Geyer est responsable technique de la société Anaska spécialisée dans les formations relatives aux technologies Open Source. Il est co auteur du livre PHP 5 avancé aux éditions Eyrolles, est co-fondateur de l'Association française des utilisateurs de PHP et participe aux sites PHPteam.net et PHPfrance. Il a à son actif professionnel des références d'audit, de développement et de formation (Canal +, France 3, EPITA, Urssaf.,.). Son expertise l'a amené à intervenir lors de nombreuses conférences nationales et internationales.




16/03/2009
0 Poster un commentaire

A découvrir aussi


Inscrivez-vous au blog

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 14 autres membres