OnLy GoD caN JuDgE
13 Apr
J’ai mis ce post à jour, n’hésitez pas à me faire des retours dessus si j’ai oublié des choses.
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 :
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 :
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.
<?php
// Déclarations (ce fichier PHP est édité en utf-8)
$names = array();
$names[] = ‘le bien être’;
$names[] = ‘le bien etre’;
$str = “Texte : %s (%d caractères)”;
// PHP5 : Décalage du au ê
// PHP6 : Gère l’utf8
foreach ($names as $name) {
printf($str, $name, strlen($name));
}
/*
PHP 5 :
Texte : le bien être (13 caractères)
Texte : le bien etre (12 caractères)
PHP 6 :
Texte : le bien être (12 caractères)
Texte : le bien etre (12 caractères)
*/
Dans notre exemple le ‘ê’ de être est encodé sur deux octets. Nous pouvons remarquer qu’en PHP5, ce caractère compte pour deux la fonction strlen() renvoie 13 caractères au lieu de 12 pour la chaîne contenant le caractère ‘ê’, encodé sur deux octets. Avec PHP6 et son support UNICODE, ce caractère est bien considéré comme un seul caractère dans les deux cas.
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.
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.
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 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.
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.
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.
<?php
try {
$dbh = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
die( “Erreur ! : ” . $e->getMessage() );
}
// Insertion d’un enregistrement
$sql = “INSERT INTO auteur (login) VALUES (’roms’)”;
$dbh->exec($sql);
// Lecture d’enregistrements
$sql = “SELECT login FROM auteur”;
$resultat = $dbh->query($sql);
while ($row = $resultat->fetch()) {
print_r($row);
}
// Fermeture de la connexion
$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.
Prévu pour PHP5.0 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.
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.
Voici quelques conseils en vrac pour mieux anticiper la migration de PHP5 à PHP6 :
Source :Cyruss Blog
Leave a reply