Toute l'actualité francophone sur PHP en un seul flux

Février 2007 – Digital Fashion: PHPMafia et OPML

Un petit billet pour dire deux chose: d'abord le site a été migré sur ma dedibox, d'où la coupure de service que certains ont pu constater. Deuxième chose, je suis à la recherche d'une appli de gestion d'OPML qui gère l'attribut htmlUrl (automatiquement à partir du noeud /channel/link d'un RSS). Voili voilou.

Février 2007 – PHP Québec: Ajax et PHP : conférence de Montréal, janvier 2007

La conférence de Janvier 2007, à Montréal, a été filmée. Elle est disponible sur le site de dailymotion, en intégral.

Nadine St-Amand nous présente a la programmation d'application avec PHP et Ajax. Elle insiste particulierement sur quelles aspect des applications devraient etre fait en Ajax, pourquoi et comment le faire.

Ajax et PHP

Février 2007 – tigrou/pwet.fr: Le développement d'eZ Publish 4.0 est lancé

Comme (presque) chaque fin de semaine, eZ Systems publie sa community newsletter . Celle-ci est un peu particulière puisqu'elle annonce le lancement du développement de la version 4.0 d'eZ Publish et sa sortie pour la fin de l'année ou plus probablement (soyons réaliste ;-)) le début de l'année prochaine. Cette version utilisera PHP5 et sera basée sur les eZ components . Serait ce la fin de l'histoire "tumultueuse" eZ Publish/PHP5 ? En tout cas, si eZ Publish 4.0 est aussi bien pensé, réalisé, et documenté qu'eZ components, ce sera un très bon cru ! J'espère deux choses de cette nouvelle version :

  1. Une amélioration des performances générales ;
  2. Une amélioration de l'interface.

Sur ce deuxième point, de petits trucs pourraient contribuer à rendre l'interface plus facile d'accès (un peu de javascript par ci, une réorganisation de quelques éléments par là, ...). C'est un vaste sujet, j'y reviendrai probablement dans un autre billet, copies d'écran à l'appui...

Une dernière chose au sujet de cette dernière community newsletter, elle liste aussi les dernières contributions ajoutées. Parmi celles ci, Plopix en a publié une complémentaire avec le système de tags que j'évoquais au début de ce blog où il a laissé un commentaire . Je ne l'ai pas (encore) testé, mais ça m'a l'air intéressant.

Février 2007 – tigrou/pwet.fr: Très en vrac

Février 2007 – PHP Québec: Conférence PHP Québec : Tarifs avantageux pour les membres d'associations

L'équipe de PHP Québec est fière d'annoncer la cinquième édition de la Conférence PHP Québec. La conférence aura lieu les 14-15-16 mars 2007 à l'hôtel Sofitel de Montréal, Québec, Canada. La conférence vous propose 2 jours de conférences techniques ainsi qu'une journée additionnelle d'ateliers avec les experts PHP tels que: Rasmus Lerdorf, Andrei Zmievski, Derick Rethans,
Ilia Alshanetsky, John Coggeshall, Damien Séguy et bien d'autres.



La conférence comportera trois pistes distinctes:
  • Technique Avancé avec PHP
  • Accessibilité des données
  • PHP: au de là de la théorie


Avec plus de 35 conférences et ateliers, la conférence PHP Québec est une excellente opportunité pour vous informer sur les dernières techniques de développement qui vous aideront à bâtir des applications robustes et sécuritaires.

Des tarifs avantageux sont disponibles pour les membres de communautés Open Source ainsi qu'aux contributeurs importants. Contactez nous à board@phpquebec.com pour avoir plus de détails.

Février 2007 – Dur Comme Faire: Kanopée recherche un stagiaire

Ma société, Kanopée, recherche un stagiaire pour une durée de 3 à 6 mois. Idéalement ce stage débuterait au mois de mars ou à défaut au plus tôt. Le stagiaire de profil bac+2 à bac+5 participera au développement de sites et d'applications web. Il sera encadré mais devra faire preuve...

Février 2007 – sahid.funraill.org: Modele MVC en PHP5 - Front Controller

Mise en place d’un Front Controller paramétré en PHP5

Front Controller ?

Dans les applications PHP5, la séparation de notre code en plusieurs couches est devenue primordiale, je me répÚte un peu, mais depuis PHP5, on ne parle plus de scrypt, mais d’application, donc qui dit application dit architecture solide et modulable, c’est pourquoi on recours au motif de conception comme ceux du GOF qui rescence plusieurs solutions des problÚmes particuliers. Dans cet article on se consacre la partie “moteur” de notre application, le Front Controller permettant de charger et d’executer un module. Le notre sera simple et parametré par “module”

Les interfaces en PHP5

Le travail commence, on va définir une interface que nos modules devront implémenter, pourquoi définir cette interface ? tout simplement parce qu’on cherche créer une application solide modulable et portable.

  1. <?php
  2. interface Module {
  3.         public function execModule (HttpRequest $request);
  4. }

La classe HttpRequest

Comme on le voit, notre interface “Module” demande une méthode, celle-ci prend en paramÚtre la classe HttpRequest. Cette classe permet la récupération de toutes les requetes passées notre application et pouvant etre utile notre module donc on récupérera les tableaux $_POST et $_GET qu’on transmettra notre méthode par l’intermédiaire de HttpRequest

  1. <?php
  2. class HttpRequest {
  3.         private $_request;
  4.        
  5.         public function __construct () {
  6.                 $this->_request = array_merge ($_POST, $_GET);   
  7.         }
  8.         public function getParam ($key) {
  9.                 return $this->_request[$key];
  10.         }
  11. }

Le Front Controller

un peu la maniÚre de nos modules, on va définir ici une nouvelle interface front controller que notre moteur devra implémenter, le principe est le suivant. Dans notre MVC notre Front Controller impose la méthode LoadModule, celle-ci chargera un module implémenté par l’interface Module, donc possédant une méthode execModule, qu’il initialisera ! Voyons un peu le code…

  1. <?php
  2. interface FrontController {
  3.         public function loadModule (HttpRequest $request);
  4. }

On passe maintenant l’écriture du la classe Engine, qui implementera Front Controller. Celui-ci traitera donc les requêtes passées l’application via la classe HttpRequest, notre classe Engine recuperera le paramÚtre module et chargera la classe en rapport celui-ci…

  1. class Engine implements FrontController {
  2.         public function loadModule (HttpRequest $request) {
  3.                 // récupération du nom du module   charger
  4.                 $moduleName = $request->getParam(“module”);
  5.                 if ($moduleName != ) {
  6.                         // fichier php intégrant le module
  7.                         $fileName = “~/module.{$moduleName}.php”; // pensez au chemin
  8.                         if (!class_exists ($fileName)) {
  9.                                 if (file_exists ($fileName)) {
  10.                                         require_once ($fileName);
  11.                                 } else {
  12.                                         // génération d’une exception
  13.                                         throw new Exception (“Impossible de trouver le module”);
  14.                                 }
  15.                         }
  16.                         // instance du module
  17.                         $o = new $moduleName ();
  18.                         // execution du module
  19.                         $o->execModule ($request);
  20.                 } else {
  21.                         throw new Exception (“Le module   executé est invalide”);
  22.                 }
  23.         }
  24. }

Creation d’un simple module

Pour illustrer notre exemple de Front Controller, on va créer un simple module affichant l’écran le mythique “Hello World !”, On se souvient qu’il devra implémenter l’interface Module et donc disposer d’une action execModule ()

  1. class SayHelloWorld implements Module {
  2.         public function execModule (HttpRequest $request) {
  3.                 echo “Hello World en PHP5 !”;
  4.         }
  5. }

Donc on accede au module via : “http://monsite.com?module=SayHelloWorld” …hum, il serait peut etre interessent de mettre en plus, l’url rewriting, non ? (;

Conclution

Voila un simple Front controller paramétré, il se veut assez simple et modulable, et devra sans doute être modifié afin d’etre integré dans une application plus poussée. on pourra aussi utiliser la classe View vue dans un article précédent pour commencer avoir une petite approche d’application PHP légÚrement evoluée. De plus une modification du Modele pourrait être d’ajouter une classe i18n permettant l’internationalisation de l’application.

Février 2007 – Prendre un Café: Symfonique !

La version 1.0 stable du framework de développement PHP Symfony est sortie hier.

Cerise sur le gâteau, l'intégralité du livre officiel est également publiée sur le site. Croyez-moi, vous pouvez vous ruer dessus sans risque, c'est une énorme tuerie (et c'est un type qui entame son 5ème projet Symfony qui vous le dit !)

Février 2007 – PHP Québec: Annuaire PHP Québec 2007

L'association PHP Québec, dont le but est de promouvoir l'utilisation du PHP au Québec au sein des entreprises, du gouvernement, des centres éducatifs et des indépendants, met à jour son annuaire des services PHP au Québec.

La version papier de l'annuaire sera distribué gratuitement pendant les rencontres mensuelles de Québec et Montréal, aux visiteurs de la
prochaine Conférence PHP Québec les 14, 15 et 16 mars 2007 à Montréal ainsi qu'à toutes autres activitées auxquelles PHP Québec participera.

L'annuaire se présente en 4 chapitres:
  • Les membres corporatifs 2006-2007;
  • Formation;
  • Hébergement;
  • Services conseils.


* Si votre entreprise est déjà présente dans l'annuaire en ligne et que vous souhaitez y apporter des modifications ou des ajouts,
veuillez contacter à board@phpquebec.com

* Si votre entreprise n'est pas présente dans l'annuaire et que vous
souhaitez l'ajouter, veuillez nous contacter à board@phpquebec.com
avec les informations suivantes:
Nom de l'entreprise:
Adresse:
Ville:
Téléphone:
Fax: (facultatif)
e-Mail:
Site web:
Categorie: (Formation, Hébergement, Services conseils)
Description: (max 300 caractères).


* Les fiches ne comptenant pas suffisament d'informations de contact et/ou de description pourront être supprimées ou ne pas être ajoutées à l'annuaire.


* Les organismes désirant montrer leur soutient à PHP Québec peuvent devenir membre Corporatif

Les membres corporatifs seront affichés au début de l'annuaire.


Les informations doivent être confirmées ou mises à jour par email d'ici au 1er mars 2007. Passé ce délais, nous ne pouvons garantir votre présence dans l'annuaire car il partira en montage et impressionafin d'être distribué aux visiteurs de la Conférence PHP Québec dans
2 semaines.

Février 2007 – Digital Fashion: Zend Framework 0.8

Les beaux jours reviennent, le Zend Framework est de sortie, dans sa version 0.8, qui apporte son lot de belles choses, comme par exemple le passage Zend_Auth, Zend_Mail_Read et Zend_Rest_Server dans le core.

Youpi.

Février 2007 – tigrou/pwet.fr: eAccelerator avec eZ Publish

L'optimisation et les performances d'eZ Publish sont des sujets qui reviennent assez régulièrement sur les forums et pas mal d'articles ont été publiés sur ces sujets dont une série récemment sur le site ez.no car Il faut avouer qu'eZ Publish est plutôt gourmand en ressources et qu'il faut une (des) machine(s) robustes pour en tirer parti sur des sites à fort trafic.

L'installation d'un cache d'opcode est probablement l'optimisation la plus efficace, la plus simple à mettre en oeuvre et celle qui impactera quasiment tous les secteurs d'utilisation d'eZ Publish puisqu'elle intervient au niveau de l'interprétation du code PHP. Personnellement, j'utilise eAccelerator qui semble un peu plus efficace qu'APC . Il faut veiller à bien le configurer pour qu'il ait suffisamment de mémoire partagée sous peine de voir apparaître des pages blanches sans explication. Ma configuration d'eAccelerator est la suivante :

extension=eaccelerator.so
eaccelerator.shm_size="48"
eaccelerator.cache_dir="/var/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="0" 

Les outils pour webmaster de Google fournissent quelques graphiques indiquant comment Googlebot indexe un site. Ci-contre voici le graphique remanié par mes soins pour mon site donnant les temps de téléchargement des pages. Ce n'est certe pas très précis et plusieurs facteurs interviennent dans les temps de réponses comme l'horaire et les interventions que je peux réaliser sur le site mais ça donne une bonne idée de la tendance.

Le trait orange correspond au moment ou mes photos ont été référencées dans Google Image multipliant le nombre de pages vues sur mon site par 1.5 (6500 le 15 janvier, 10400 le 12 février)! Le trait vert correspond à l'installation d'eAccelerator. Je crois que le graphique parle de lui-même. Je n'ai pas de graphique de la charge de la machine, mais là aussi c'est flagrant lors de l'utilisation du shell...

J'ai récemment, fait quelques autres optimisations dans les templates en ajoutant quelques cache-block pour avoir une gestion plus fine du cache et je compte aussi aussi regarder du côté de l'optimisation de MySQL en lecture pour voir si je peux améliorer encore un peu les performances.

Février 2007 – tigrou/pwet.fr: Les scripts CLI fournis avec eZ Publish

eZ Publish est fourni avec un certain nombres de scripts à lancer en ligne de commandes. À ma connaissance, il n'y a aucune documentation sur ces outils pourtant très utiles et qui peuvent faciliter la vie du développeur que ce soit en phase de développement ou en maintenance. Tous ces scripts sont à lancer à partir de la racine du site eZ Publish. Pour connaitre les options disponibles de chacun de ces script, il suffit de les lancer avec l'option --help. Les scripts détaillés ici sont dans le répertoire bin/php sauf clearcache.sh et cleanup.php.

Vider les caches : bin/shell/clearcache.sh

clearcache.sh est un script shell qui permet de vider les différents cache. Il est utile lorsque PHP4 version CLI n'est pas installé, puisqu'il utilise uniquement des commandes shell pour effectuer les différentes tâches. Pour la même raison, il est très rapide. Je l'utilise principalement lors du développement pour supprimer tous les caches d'un site en utilisant un alias bash correspondant à :

$ bin/shell/clearcache.sh --clear-all
$ bin/shell/clearcache.sh --clear-all --var-subdir=XXX

où XXX est le répertoire du cache pour le siteaccess visé, par exemple plain.

Vider le cache de contenu d'un noeud ou d'une arborescence : ezcontentcache.php

ezcontentcache.php permet de vider le cache de contenu d'un noeud ou d'une sous arborescence. Il peut être utile par exemple, si dans un site vous n'avez pas configuré les options SmartCacheClear permettant de vider les caches des noeuds dépendants de ceux qui ont été mis à jour.

Vider des caches de manière fine : ezcache.php

ezcache.php permet de vider certains caches assez finement en spécifiant uniquement un cache particulier pour un siteaccess donné. Par exemple, si vous ajouter un Custom tag comme comme dans mon billet sur l'inclusion de vidéos , il est possible de vider uniquement le cache template-override. Pratique sur un site en production, surtout si le site est très visité et si le(s) serveur(s) sont un peu justes...

Manipuler les données : ezsubtreeremove.php et ezsubtreecopy.php

Comme leur nom l'indique, ces scripts permettent de supprimer ou copier (donc déplacer...) des données dans l'arborescence. Ils sont utiles pour manipuler de gros volumes de données, là où l'interface web est limitée par le timeout PHP.

Compiler les templates : eztc.php

La compilation des templates est probablement l'opération la plus gourmande lors de la regénération des caches après un vidage complet. Une utilisation typique de ce script est lors de la mise en production d'un site. On vide tous les caches, mais avant d'activer le site, on compile l'ensemble des templates pour éviter une trop forte montée en charge. Une autre utilisation est la mise à jour des templates, on force la compilation des templates et ensuite, il suffit de vider les caches de contenu pour avoir la nouvelle version sans avoir vider complètement les caches.

Vérifier syntaxiquement les templates : eztemplatecheck.php

Utile lors du développement, celui-ci permet de vérifier simplement la syntaxe des templates sans avoir à parcourir l'ensemble du site avec les options de debug.

Faire le ménage dans la base de données : flatten.php et update/common/scripts/cleanup.php

Ces scripts permettent de faire le ménage dans la base de données en supprimant les données temporaires ou plus utilisées. flatten.php permet de supprimer par exemple toutes les versions non publiées d'objet. À manipuler avec précautions donc. cleanup.php permet de supprimer des données inutilisées. Je l'utilise par exemple pour supprimer les données des sessions expirées qui encombrent la table ezsessions .

Février 2007 – Apprendre-PHP.com: Apprendre-PHP.com vous ouvre ses portes !

Bonjour à tous,C'est en ce dimanche 25 février 2007 (et sous un ciel pluvieux ^^) que le site Apprendre-PHP.com ouvre ses portes. Bien que la communauté francophone de PHP soit bien représentée aujourd'hui (PHPDebutant.org, PHPFrance.com, Afup.org, Nexen.net, PHPScripts-fr.net, Expreg.com...), j'avais envie de réaliser un site dédié à PHP. Pourquoi ? Tout simplement par passion pour ce langage de programmation et par envie de la faire partager au plus grand nombre. Ce site est destiné avant tout aux débutants désireux de se lancer dans la programmation mais il convient aussi aux plus d'expérimentés qui souhaitent améliorer leur niveau et leurs connaissances.

Février 2007 – Digital Fashion: Channel PEAR PHPMafia, package Zend Framework

Au lieu de partir faire du vélo ce soir, j'ai livré bataille avec PEAR. Livré bataille c'est le mot, vu le manque flagrant de documentation sur la création de serveur et packages PEAR, mais j'ai finalement réussi, grâce au tutorial de Tobias Schlitt (un peu modifié) à Arnaud Limbourg. Bref, j'ai le plaisir de vous annoncer la disponibilité immédiate du Channel PEAR PHPMafia, qui héberge pour l'instant un unique package: Zend-0.8.0. Pour l'installer, vous devez d'abord présenter le channel à votre installeur pear:

pear channel-discover pear.phpmafia.net

Puis vous devriez être en mesure d'installer le Zend Framework via un pear install classique:

pear install phpmafia/Zend-0.8.0

On spécifie la version vu que le package est en stabilité devel, pour coller au status preview du Zend Framework.

Vu comment j'ai galéré pour en arriver là, j'ai certains doutes sur le caractère 100% komifo de l'installation, donc j'apprécierais tout retour de bug et anomalies diverses que vous pourriez rencontrer à l'utilisation de ce channel, à pear@phpmafia.net par exemple, ou dans les commentaires de ce billet :-)