RSS Feed

Articles associés au tag ‘php’

Supprimer les accents UTF8 avec PHP

8 April 2008 par SeB 9 commentaires »

Il est souvent utile de supprimer les accents des caractères accentués dans une chaîne. Cette action est utilisée par exemple pour générer une URL propre ou bien un nom de fichier qui ne posera pas de problème.

En PHP, le développeur retrouve souvent la solution  suivante :

$str = strtr($str, ‘ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝ’, ‘AAAAAACEEEEEIIIINOOOOOUUUUY’);
$str = strtr($str, ‘áàâäãåçéèêëíìîïñóòôöõúùûüýÿ’, ‘aaaaaaceeeeiiiinooooouuuuyy’);

Ce bout de code fonctionne très bien en IS0-8859-1. Cependant, avec une chaîne en UTF8, des caractères étranges vont s’immiscer. Cela vient du fait que les caractères sont encodés sur 8 bits.

Après maintes essais avec iconv() et autres strtr(), je n’ai pas trouvé de solution à ce problème. Heureusement, Olivier Laviale a trouvé une astuce. Je ne suis pas convaincu que ce soit la méthode la plus performante, mais elle a le mérite de fonctionner :

$str = htmlentities($str, ENT_NOQUOTES, ‘utf-8′);
$str = preg_replace(‘#\&([A-za-z])(?:uml|circ|tilde|acute|grave|cedil|ring)\;#’, ‘\1′, $str);
$str = preg_replace(‘#\&([A-za-z]{2})(?:lig)\;#’, ‘\1′, $str);
$str = preg_replace(‘#\&[^;]+\;#’, ”, $str);

Je vous laisser consulter le billet original d’Olivier sur le sujet si vous souhaitez avoir plus d’informations.

Ah ! Les joies de l’encodage… :-)

 

eZ Components – la – boite à outils du développeur PHP

7 September 2006 par SeB 2 commentaires »

La société ez System propose depuis peu une suite de composants PHP très utile distribuée sous la nouvelle licence BSD : eZ components.

Ces composants sont très bien fait et permettent d’augmenter la productivité des développeurs. La liste contient plus de vingt composants des plus variés possibles : du moteur de template, à l’outil de manipulation d’image, en passant par le générateur de code PHP ou le moniteur système !

En version 1.1.1 actuellement, le carnet de route laisse présager de nouvelles fonctionnalités très intéressantes pour la fin de l’année.

Le générateur d’icône d’email, Email 2 icon 1.3.0, a été réécrit avec certain de ces composants comme :

  • Mail : pour la génération et l’émission de mail.
  • Template : pour le moteur de rendu à partir de template.
  • Translation : pour l’internationnalisation de l’application.

J’ai été très décu par Template. L’écriture des templates est beaucoup moins simple qu’avec Smarty. Par contre, les composants Mail et Translation sont très simples à utiliser et très efficaces (même si perfectible pour le second).

J’aurais bien aimé utiliser UserInput mais sa dépendance avec l’extension PHP filter me pose des problème avec mon hébergeur[1].

Je suis actuellement en train de tester :

  • Database : une API de communication avec les bases de données basée sur PDO.
  • PersistentObject : un outil de persistance des objets basé sur le composant précédent.

J’aimerai par la suite tester :

  • Dans un premier temps :
    • EventLog : pour générer des traces applicatives.
    • Feed : pour la gestion des flux RSS (pas encore disponible).
    • Url : pour manipuler des URLs.
  • Puis dans un second temps :
    • Archive : pour manipuler des fichiers d’archives dans différents format de compression.
    • Cache : pour la gestion d’un cache.
    • ImageConvertion : pour manipuler des images.

Ces composants sont très utiles car ce sont le type de service que l’on retrouve dans la plupart des applications web[2].

Notes

[1] Impossible d’installer des extensions PEAR, et le programme autoconf non disponible.

[2] Notez que certain de ces composants sont dédiés à l’utilisation de PHP en mode console.

 

Smarty – postfilter ou output filter ?

21 April 2006 par SeB Pas de commentaire »

Quelle est la différence entre les filtres de post-compilation et les filtres de sortie ?

Smarty est un excellent moteur de templates PHP. Ce framework compile les templates écris par les développeurs pour exécuter par la suite la version compilée[1].

Parfois, il est nécessaire très pratique d’automatiser des traitements sur les templates. Par exemple pour modifier les URLs, appliquer des filtres sur les adresses emails, … C’est pourquoi Smarty propose les systèmes de postfilters et output filters. Mais lesquels utiliser ?

Les postfilters sont appliqués après la phase de compilation et juste avant que le template compilé ne soit enregistré dans le cache. Alors que les output filters sont appliqués à l’exécution du template compilé. Qu’est-ce que cela change dans la pratique ? Dans le premier cas, les modifications sur le template sont réalisées une seule fois et enregistrées dans le cache. Dans le second cas, les modifications sont réalisées à chaque appel au template.

Les postfilters semblent être une solution plus performante que les output filters. Pourtant lorsque les traitements à appliquer sur un template doivent être dynamiques à l’exécution[2], les output filters sont obligatoires.

Après ces quelques précisions, vous pouvez retourner à vos filtres[3]

Notes

[1] Par souci d’optimisation des performances.

[2] Par exemple si les modifications dépendent du contexte utilisateur.

[3] N’oubliez pas qu’il existe aussi les prefilters qui sont appliqués avant l’étape de compilation de templates.

 

EasyPHP et PHP5

19 April 2006 par SeB Pas de commentaire »

Comment mettre à jour EasyPHP pour obtenir les fonctionnalités de PHP5 ?

EasyPHP est une solution logicielle qui installe et configure sous MS Windows : Apache, PHP, MySQL ainsi de quelques outils de configuration et d’administration. La dernière version stable est la 1.8 qui correspond à :

  • Apache 1.3.33
  • PHP 4.3.10
  • MySQL 4.1.9
  • phpMyAdmin 2.6.1

De plus en plus d’hébergeurs proposent PHP5, mais EasyPHP ne propose pas cette version de PHP. Bien sur, il existe d’autres solutions telles que WAMP5 ou Mov’AMP supportent PHP5. Mais cet article propose de mettre à jour la version courante de EasyPHP pour PHP5.

Il faut disposer d’un EasyPHP installé dans un répertoire nommé EASYPHP_HOME. Il est nécessaire de télécharger le binaire MS Windows sous forme de package zip de PHP5, puis de décompresser cette archive dans le répertoire EASYPHP_HOME/php5.

Renommer le répertoire EASYPHP_HOME/php en EASYPHP_HOME/php4, puis EASYPHP_HOME/php5 en EASYPHP_HOME/php.

Editer le fichier EASYPHP_HOME/apache/conf/httpd.conf :

  • Remplacer la ligne LoadModule php4_module "EASYPHP_HOME/php/php4apache.dll" par LoadModule php4_module "EASYPHP_HOME/php/php5apache.dll".
  • Remplacer la ligne AddModule mod_php4.c par AddModule mod_php5.c.

Ces manipulations permettent d’utiliser PHP5. Cependant le module MySQL pour PHP ne fonctionne plus.

Editer le fichier EASYPHP_HOME/apache/php.ini :

  • Ajouter en fin de fichier la ligne extension=php_mysql.dll.
  • Modifier la ligne extension_dir = "EASYPHP_HOME\php\extensions\" pour obtenir extension_dir = "EASYPHP_HOME\php\ext\".

Maintenant l’installation d’EasyPHP est fonctionnelle et permet l’exécution de scripts PHP en version 5.

 

Page erreur 404 personnalisée en PHP

3 April 2006 par SeB 4 commentaires »

Lors de la réalisation d’un site web, il peut être intéressant d’implémenter sa propre page d’erreur 404.

Lorsqu’un utilisateur demande une page inexistante sur un site, le serveur HTTP retourne une erreur 404 dont le message est page non trouvée. Soit pour un aspect esthétique, soit dans un but statistique[1], on peut être amené à créer sa page d’erreur HTTP personnalisée.

En prenant l’exemple de page écrites en PHP et exécutées sur le serveur HTTP Apache, il faut paramétrer le fichier .htaccess et d’écrire une page nommée erreur.php[2].

Il faut ajouter cette ligne dans le fichier .htaccess :

ErrorDocument 404 http://www.mondomaine.com/erreur.php?code=404

La page erreur.php doit contenir le code suivant[3] :

<html>
 	<head>
 		<title>Page d'erreur HTTP <?=code?></title>
 	</head>
 	<body>
 		Vous venez de rencontrer une erreur HTTP <?=code?> pour la page <?=$REQUEST_URI?>.
 	</body>
 </html>

Si l’utilisateur demande une page qui n’existe pas, il sera redirigé vers cette page. Par contre, la variable $REQUEST_URI retourne la valeur /erreur.php. Pour corriger ce problème et afficher correctement la page demandée et qui a provoqué l’erreur 404, il faut rectifier le fichier .htaccess ainsi :

ErrorDocument 404 /erreur.php?code=404

Maintenant la page d’erreur affiche correctement le nom de page source de l’erreur 404.

Pour finir, on peut estimer qu’il n’est pas très propre de véhiculer le code d’erreur HTTP dans l’URL de la page d’erreur. Heureusement, une variable PHP permet de connaître le code d’erreur HTTP. En reprenant l’exemple depuis le début, il faut implémenter la gestion des erreurs de la façon suivante.

Le fichier .htaccess se simplifie :

ErrorDocument 404 /erreur.php

Le fichier erreur.php doit être modifié pour utiliser la variable $_SERVER["REDIRECT_STATUS"] :

<html>
 	<head>
 		<title>Page d'erreur HTTP <?=$_SERVER["REDIRECT_STATUS"]?></title>
	</head>
<body>
Vous venez de rencontrer une erreur HTTP <?=$_SERVER["REDIRECT_STATUS"]?> pour la page <?=$REQUEST_URI?>.
</body>

</html>

Voici donc une méthode simple et efficace pour gérer les erreurs HTTP en PHP. Cet exemple n’est pas seulement valable pour les erreurs 404, mais pour toutes les erreurs HTTP telles que 401, 403, 500, …

Notes

[1] Ou pour surveiller ce qu’il se passe sur le site.

[2] Le nom choisi pour cette page est libre.

[3] Le code HTML est non-exhaustif car ce n’est pas le sujet de l’article.