Le CMS Joomla revient au devant de la scène PHP avec une nouvelle version 1.6 alpha 2, ce qui annonce de bonne horizon.
Cette nouvelle version doit répondre aux attentes des utilisateurs de Joomla, qui sont :
Communiqué officiel : http://www.joomla.fr/les-news-joomla/13-news-officielles/972-joomla-16-alpha-2.html
Décidément la nouvelle mouture d’Ubuntu pose des problèmes aux produits Zend. Après Zend Server qui refuse de s’installer, voici que certains boutons sont inopérants dans la dernière version de Zend Studio.
Il existe là encore un contournement en attendant la correction du bug de GTK à l’origine du problème. Pour cela, il suffit de créer un script contenant les lignes suivantes et de l’utiliser pour lancer Zend Studio :
#!/bin/bash export GDK_NATIVE_WINDOWS=1 <CHEMIN>/ZendStudio
Remplacez <CHEMIN> par le chemin vers votre exécutable Zend Studio et le tour est joué.
Décidément la nouvelle mouture d’Ubuntu pose des problèmes aux produits Zend. Après Zend Server qui refuse de s’installer, voici que certains boutons sont inopérants dans la dernière version de Zend Studio.
Il existe là encore un contournement en attendant la correction du bug de GTK à l’origine du problème. Pour cela, il suffit de créer un script contenant les lignes suivantes et de l’utiliser pour lancer Zend Studio :
#!/bin/bash export GDK_NATIVE_WINDOWS=1 <CHEMIN>/ZendStudio
Remplacez <CHEMIN> par le chemin vers votre exécutable Zend Studio et le tour est joué.
Après une longue pause estivale (et un peu plus), voici le retour de la revue de presse hebdomadaire.
Le but est de vous faire découvrir ce qui se dit d’intéressant sur PHP. Il s’agit d’articles en français ou en anglais que j’aimerais partager avec vous. Et parce qu’il n’y a pas que PHP au monde, vous trouverez également un article important mais dans un domaine libre et n’ayant pas forcément de rapport avec PHP.
Et voici l’article bonus de la semaine :
Fake Rocks, Salami Commanders, and Just Enough to Start
On a probablement tous vécu un jour le syndrome de la feuille blanche. Cette peur de se lancer qui nous pousse souvent à choisir la facilité et à remettre au lendemain.
Lutter contre la procrastination, puisque c’est le nom de ce comportement, n’est pas facile et il n’y a pas de remède miracle. Cependant, un peu de méthode et beaucoup de courage peuvent en venir à bout.
Après une longue pause estivale (et un peu plus), voici le retour de la revue de presse hebdomadaire.
Le but est de vous faire découvrir ce qui se dit d’intéressant sur PHP. Il s’agit d’articles en français ou en anglais que j’aimerais partager avec vous. Et parce qu’il n’y a pas que PHP au monde, vous trouverez également un article important mais dans un domaine libre et n’ayant pas forcément de rapport avec PHP.
Et voici l’article bonus de la semaine :
Fake Rocks, Salami Commanders, and Just Enough to Start
On a probablement tous vécu un jour le syndrome de la feuille blanche. Cette peur de se lancer qui nous pousse souvent à choisir la facilité et à remettre au lendemain.
Lutter contre la procrastination, puisque c’est le nom de ce comportement, n’est pas facile et il n’y a pas de remède miracle. Cependant, un peu de méthode et beaucoup de courage peuvent en venir à bout.
Just found this nice project contributed by the Facebook team, phpsh. Basically, it’s an interactive and advanced command line interface to php, a kind of super-php -r similar to what you can find in Python or Ruby. Ironically enough, phpsh is mostly written in Python, by the way.
To install phpsh, just get it from github[1]:
$ git clone git://github.com/facebook/phpsh.git $ cd phpsh $ python setup.py build $ sudo python setup.py install
To run phpsh:
$ phpsh Starting php type 'h' or 'help' to see instructions & features php> ="hello world" hello world php> =2 + 2 4 php> $a = 8 php> =$a 8
Note that you don’t have to open or close <?php tags, you can print something just by prepending an = sign to the command, and no need to type semicolum at the end of a call. Easy[2].
You can access a function documentation by just prepending the d keyword to its name:
php> d strlen # strlen (PHP 4, PHP 5) strlen -- Get string length ### Description int strlen ( string $string ) Returns the length of the given string . ### Parameters string The [string][1] being measured for length. ### Return Values The length of the string on success, and 0 if the string is empty. ### [1]: #language.types.string
You can define your own classes and functions, and run them:
php> function foo($a){echo $a.'!';}
php> foo('bar')
bar!
Same goes for classes:
php> class Foo {public function bar($a){echo $a.'!';}}
php> $f = new Foo()
php> $f->bar('baz')
baz!
You can even execute shell command from there:
php> ! ls -la
Of course, you can import include and require files. As a concrete example, let’s roughly play with the symfony API:
php> ! symfony -V
symfony version 1.2.2-DEV (/Users/niko/Sites/vendor/symfony12/lib)
php> c /Users/niko/Sites/vendor/symfony12/lib/autoload/sfCoreAutoload.class.php
Extra includes are: ['/Users/niko/Sites/vendor/symfony12/lib/autoload/sfCoreAutoload.class.php']
php> sfCoreAutoload::register()
php> =sfYaml::load('foo: bar')
array(
"foo" => "bar",
)
php> =sfYaml::dump(array('foo' => array('bar' => 'baz')))
"foo:\n bar: baz\n"
Last but not least, when enough playing, type q or press ctrl + d to quit phpsh.
[1] So yeah, so you need git. And Python, of course.
[2] Anybody putting "rather use python then" will have serious troubles, even if I strongly agree.
Ce billet intitulé An Interactive PHP Shell: phpsh a été rédigé par Nicolas Perriault et publié sur le blog Prendre un Café sous licence Creative Commons BY-NC-SA.
J’ai dernièrement eu l’occasion de rencontrer Hank JANSSEN de Microsoft qui a participé, avec Pierre JOYE à la publication de PHP 5.3 sous Windows. On ne s’en rend pas compte car peu de communication a été faite autour mais PHP 5.3 en environnement Windows est un véritable reconstruction du projet. Un travail important de mise à jour et de modification a été accompli et est toujours en cours.
La branche PHP 5.3 a introduit un nombre important de nouvelles fonctionnalités. La plupart d’entre nous les connaissent maintenant et si ce n’est toujours pas le cas, vous pouvez les consulter sur le site http://php.net/releases/5_3_0.php.
Ce que l’on sait moins, c’est que que cette version a été l’occasion pour les développeurs travaillant sur la version Windows de refondre complétement le projet, reconstruire une plateforme de compilation industrialisée et facile à reproduire et surtout, faire de la version Windows une véritable distribution optimisée pour cet environnement et non plus un simple portage de la version Linux.
Commençons par regarder le travail effectué sur le code de PHP en lui-même et ses dépendances. Les distributions de PHP pour Windows jusqu’à PHP 5.2 étaient basées sur un socle monté dans les années 90 et ayant très peu évoluée depuis. On y retrouvait notamment :
Je ne vais rentrer dans les détails, mais tout cela a été repris, mis à jour, redéveloppé afin de le rendre plus efficace et profiter des particularités de Windows. Un long travail de plusieurs mois dont le résultat est une version optimisée pour cette plateforme, qui peut maintenant passer le PHP test suite (ce qui n’était plus le cas depuis un moment) et être considéré comme une véritable branche de PHP.
Côté plateforme de compilation, le travail effectué a été tout aussi important. La plateforme existante a tout simplement été complétement désassemblée pour être reconstruite à partir de zéro.
Autrefois basée sur un portage de la compilation Linux avec des processus adaptés pour aboutir à quelque chose qui fonctionne, la nouvelle plateforme profite elle d’une véritable industrialisation, facile à reproduire et permettant à chacun de faire des ‘build’ spécifiques à un environnement Windows donné. Les outils utilisés ont tous été actualisés et permettent de profiter de nombreuses optimisation qui n’étaient pas possibles auparavant offrant ainsi de meilleures performances à PHP.
Notons que la compilation est maintenant possible en VC9. Ok, cela ne nous sera pas d’une grande utilité tant que les binaires d’Apache ne seront pas construits également avec ce compilateur, mais il semblerait que ce soit en cours de réalisation.
Seul point noir, la nouvelle plateforme ne compile pas encore les extensions PECL. Mais le travail sur cette partie est en cours et j’espère bientôt voir réapparaître le pecl4win ou un site équivalent.
Enfin, notez qu’un site dédié à Windows existe maintenant dans les « php.net sites » :
Pour conclure PHP 5.3 dispose maintenant d’une véritable version pour Windows avec de bien meilleures performances et des possibilités d’utilisation plus vastes. Bien sûr, je ne m’aventurerais pas à la comparer à la version Linux (je crois que je viens de lancer un troll), que ce soit en terme de qualité ou de performances, mais cette évolution reste quelque chose de très positif. L’ouverture vers toutes les plateformes est un plus pour PHP et ne peut que lui être profitable.
Note : merci à Hank pour les slides qu’il m’a fait parvenir et qui m’ont permis d’écrire ce petite article.
J’ai dernièrement eu l’occasion de rencontrer Hank JANSSEN de Microsoft qui a participé, avec Pierre JOYE à la publication de PHP 5.3 sous Windows. On ne s’en rend pas compte car peu de communication a été faite autour mais PHP 5.3 en environnement Windows est un véritable reconstruction du projet. Un travail important de mise à jour et de modification a été accompli et est toujours en cours.
La branche PHP 5.3 a introduit un nombre important de nouvelles fonctionnalités. La plupart d’entre nous les connaissent maintenant et si ce n’est toujours pas le cas, vous pouvez les consulter sur le site http://php.net/releases/5_3_0.php.
Ce que l’on sait moins, c’est que que cette version a été l’occasion pour les développeurs travaillant sur la version Windows de refondre complétement le projet, reconstruire une plateforme de compilation industrialisée et facile à reproduire et surtout, faire de la version Windows une véritable distribution optimisée pour cet environnement et non plus un simple portage de la version Linux.
Commençons par regarder le travail effectué sur le code de PHP en lui-même et ses dépendances. Les distributions de PHP pour Windows jusqu’à PHP 5.2 étaient basées sur un socle monté dans les années 90 et ayant très peu évoluée depuis. On y retrouvait notamment :
Je ne vais rentrer dans les détails, mais tout cela a été repris, mis à jour, redéveloppé afin de le rendre plus efficace et profiter des particularités de Windows. Un long travail de plusieurs mois dont le résultat est une version optimisée pour cette plateforme, qui peut maintenant passer le PHP test suite (ce qui n’était plus le cas depuis un moment) et être considéré comme une véritable branche de PHP.
Côté plateforme de compilation, le travail effectué a été tout aussi important. La plateforme existante a tout simplement été complétement désassemblée pour être reconstruite à partir de zéro.
Autrefois basée sur un portage de la compilation Linux avec des processus adaptés pour aboutir à quelque chose qui fonctionne, la nouvelle plateforme profite elle d’une véritable industrialisation, facile à reproduire et permettant à chacun de faire des ‘build’ spécifiques à un environnement Windows donné. Les outils utilisés ont tous été actualisés et permettent de profiter de nombreuses optimisation qui n’étaient pas possibles auparavant offrant ainsi de meilleures performances à PHP.
Notons que la compilation est maintenant possible en VC9. Ok, cela ne nous sera pas d’une grande utilité tant que les binaires d’Apache ne seront pas construits également avec ce compilateur, mais il semblerait que ce soit en cours de réalisation.
Seul point noir, la nouvelle plateforme ne compile pas encore les extensions PECL. Mais le travail sur cette partie est en cours et j’espère bientôt voir réapparaître le pecl4win ou un site équivalent.
Enfin, notez qu’un site dédié à Windows existe maintenant dans les « php.net sites » :
Pour conclure PHP 5.3 dispose maintenant d’une véritable version pour Windows avec de bien meilleures performances et des possibilités d’utilisation plus vastes. Bien sûr, je ne m’aventurerais pas à la comparer à la version Linux (je crois que je viens de lancer un troll), que ce soit en terme de qualité ou de performances, mais cette évolution reste quelque chose de très positif. L’ouverture vers toutes les plateformes est un plus pour PHP et ne peut que lui être profitable.
Note : merci à Hank pour les slides qu’il m’a fait parvenir et qui m’ont permis d’écrire ce petite article.
Le 9 novembre prochain, Firefox fêtera ses 5 ans.
L'équipe de Mozilla Europe organisera une fête à Paris le lundi 9 novembre pour marquer cette date. L'événement aura lieu de 20h à 23h au Conseil Régional d’Île-de-France à l'adresse 33 rue Barbet-de-Jouy, 75007 Paris, métro Saint François Xavier (ligne 13).
L'inscription est possible ici. Attention, votre identité sera vérifiée à l'entrée, le nombre de place est limité.
Pour plus d'informations, visitez le site de Mozilla.
Je viens de migrer le Planet eZ Publish.fr vers eZ Publish 4.2. Probablement l'une des mises à jour eZ Publish les plus simples et les plus rapides (moins de 2 heures) que j'ai faite. Il faut dire que la procédure de mise à jour de la version 4.1 à la version 4.2 est plutôt plus simple que d'habitude et en plus le site est très simple, il n'utilise aucune des fonctionnalités dont le comportement a changé entre les versions 4.1 et 4.2 et finalement peu de fonctionnalités avancées.
Au passage, les nouveautés de la version 4.2 sont nombreuses mais l'amélioration des performances après un vidage complet des caches devrait ravir les développeurs au quotidien :-), en tout cas j'ai bien vu la différence pendant la migration.
Dans 4 jours commence le Forum PHP 2009 à Paris.
Voici une bonne raison de plus de venir et de rester un jour de plus ...
Le samedi 14 novembre, il risque d'y avoir de sacrées bousculades à Paris. Ce jour-là, un site Internet va jeter son argent par les fenêtres !
Si d'aventure vous vous trouvez sur le chemin d'un bus à l'anglaise siglé "Mailorama" le 14 novembre à Paris, ne le quittez pas d'une semelle et vous aurez la chance de vous trouver au bon endroit au bon moment.
En effet, c'est ce jour-là qu'aura lieu la grande opération de street marketing initiée par Mailorama. A l'initiative de Cyril Dubreau, fondateur et dirigeant du site, ce sont pas moins de 5000 bourses contenant de 5 à 500 euros qui vont ainsi se déverser dans les rues de la capitale et aller à ceux qui voudront bien les prendre.
Après de mois de travail et de préparation avec tous les membres du bureau et organisation de l'AFUP. Le Forum PHP 2009 pointe son nez.
L'évènement est le 12 et 13 novembre 2009 à la cité des sciences avec :
Mais il n'est pas trop tard de venir au forum et surtout vous inscrire le programme de cette année, vous ne le retrouverez que sur place.
Cette année sera différente de l'an passée et de l'année prochaine...
Le mieux c'est dans le vif du sujet et surplace pour avoir plein les yeux.
Alors à jeudi.... 12
… et ça ne se passe visiblement pas très bien. Après les problèmes avec Zend Server et Zend Studio, voilà maintenant que c’est PHP et par ricochet PEAR qui ont des problèmes avec la dernière version d’Ubuntu.
Le problème vient de la librarie zlib. Certaines de ses fonctionnalités ne sont plus disponibles dans PHP ce qui provoque l’échec silencieux du package PEAR Archive_Tar, empêchant toute installation de package PEAR.
Heureusement, il existe un contournement. Il suffit d’ajouter l’argument « -Z » afin de demander l’installation de packages non compressés :
pear install -Z phpdocumentor
… et ça ne se passe visiblement pas très bien. Après les problèmes avec Zend Server et Zend Studio, voilà maintenant que c’est PHP et par ricochet PEAR qui ont des problèmes avec la dernière version d’Ubuntu.
Le problème vient de la librarie zlib. Certaines de ses fonctionnalités ne sont plus disponibles dans PHP ce qui provoque l’échec silencieux du package PEAR Archive_Tar, empêchant toute installation de package PEAR.
Heureusement, il existe un contournement. Il suffit d’ajouter l’argument « -Z » afin de demander l’installation de packages non compressés :
pear install -Z phpdocumentor
Comme chaque semaine, voici la revue de presse hebdomadaire pour vous faire découvrir ce qui se dit d’intéressant sur PHP. Il s’agit d’articles en français ou en anglais que j’aimerais partager avec vous.
Et parce qu’il n’y a pas que PHP au monde, vous trouverez également un article important mais dans un domaine libre et n’ayant pas forcément de rapport avec PHP.
Et voici l’article bonus de la semaine :
Josianne et Robert sont dans un projet
Le blog d’Octo nous narre l’histoire de Josianne et Robert qui travaillent sur le même projet. Josianne est une analyste expérimentée et connaît bien la boutique. Robert connait bien l’environnement technique. Nous allons voir comment certaines méthodes de gestion même avec les bonnes personnes peuvent mener à des conflits et des échecs.
Comme chaque semaine, voici la revue de presse hebdomadaire pour vous faire découvrir ce qui se dit d’intéressant sur PHP. Il s’agit d’articles en français ou en anglais que j’aimerais partager avec vous.
Et parce qu’il n’y a pas que PHP au monde, vous trouverez également un article important mais dans un domaine libre et n’ayant pas forcément de rapport avec PHP.
Et voici l’article bonus de la semaine :
Josianne et Robert sont dans un projet
Le blog d’Octo nous narre l’histoire de Josianne et Robert qui travaillent sur le même projet. Josianne est une analyste expérimentée et connaît bien la boutique. Robert connait bien l’environnement technique. Nous allons voir comment certaines méthodes de gestion même avec les bonnes personnes peuvent mener à des conflits et des échecs.
mes notes au vol.
REST parti d'un thèse à lire : Roy Fielding 2000
GET et PUT devraient TOUJOURS retourner la même chose. POST jamais.
HEAD et OPTIONS HEAD -> comme GET mais on ne reçoit en retour que les header, pas le corp de réponse
OPTIONS url
retourne les commandes utilesable sur l'url
En retour, on a 404, 201, 303, 500 , .... 303 <- url de ce que post a créé
Dans la requete, on peut envoyer un "accept" avec les mime/type accepté en retour
Stateless
-> chaque requête contient TOUTES les infos (pas de sessions)
lire pour approfondir : connexité
Faites du bon REST sur GET -> énormément d'occasion d'avoir du cache. -> idéal dans les favoris. -> clients plus faciles.
Les faux REST : POX ou REST-RPC (Flickr, Upcomming.org,...) Twitter parce qu'il utilise que GET POST
M*rde il ne reste que 5 minutes
REST et php : pas de $_PUT
Zend_Server_Rest <- en fait c'est POX Zend_Rest_Route <- C'est nouveau.

The PHPBenelux meeting will be tuesday 24 november at the office of Atos Origin in Rijswijk (near The Hague).
Bert Boerland (Drupal boardmember) will talk about performance issues with Drupal (and how to solve them).
Arnoud Engelfriet (internet lawyer) will talk about about the GPL license.
You are welcome to join this meeting.
Magento, la très populaire solution e-commerce de Varien, sera fournie avec
l’environnement PHP Zend Server Community Edition
BARGENTO 3, PARIS – Zend Technologies, Inc., the PHP company, et Varien, société qui développe Magento, la plateforme e-commerce la plus en croissance, annoncent ce jour qu’ils s’associent afin de faciliter l’évaluation, le développement et le déploiement d’une application e-commerce flexible pour les petites et moyennes entreprises. Le résultat de ce nouveau partenariat est que la version communautaire de Magento™, la plateforme e-commerce de Varien sera fournie avec l’édition communautaire de Zend Server, le serveur d’applications Web en PHP ultra-performant de Zend.
Les deux sociétés ont également annoncé que les équipes Zend et Varien et les communautés Open Source travailleront ensemble sur deux initiatives majeures. Varien contribuera à un nombre significatif de fonctionnalités e-commerce natives au sein du Zend Framework, framework PHP standard de l’industrie, partie intégrante de Zend Server. De plus, Zend et Varien optimiseront Magento, Zend Server et Zend Framework afin qu’ils délivrent des performances élevées pour les applications e-commerce.
« Magento est une solution e-commerce robuste qui bénéficie de la souplesse et de la flexibilité de l’Open Source – en fournissant des fonctionnalités e-commerce de qualité, virtuellement, à l’usage de tous » a déclaré Andi Gutmans, CEO et co-fondateur de Zend Technologies. « Grâce à ce nouveau package tout-en-un de Magento et Zend Server, il est dorénavant extrêmement facile pour toutes les sociétés d’installer, configurer et d’explorer toutes les fonctionnalités du commerce en ligne, parmi lesquelles : la gestion de catalogues et de commandes, l’analyse, le SEO, le merchandising, les comptes clients et la livraison, sur plateforme Linux ou Windows. Tout ceci en étant sûr que leur application fonctionnera avec de hautes performances, efficacement et avec fiabilité. Cette combinaison supprime virtuellement toutes les barrières pour développer des sites Web e-commerce de qualité en PHP. »
La plateforme e-commerce Open Source Magento, développée avec PHP 5 et Zend Framework, a déjà été adoptée par des milliers d’utilisateurs et implémentée par des entreprises qui gèrent chaque jour des dizaines de milliers de commandes via de multiples serveurs et clusters de serveurs. L’édition communautaire gratuite de Magento fournit une solution basique et puissante pour les petites sociétés à la recherche d’une plateforme e-commerce performante. Les utilisateurs peuvent upgrader vers Magento Enterprise Edition pour obtenir des fonctionnalités plus avancées ainsi que du support.
Zend Server Community Edition (CE) est un serveur d’applications Web rapide, gratuit et fiable. Que vous pouvez utiliser aussi bien en développement, en test qu’en production. Zend Server CE fonctionne sous Linux, Microsoft Windows et Mac OS X et est tout spécialement configuré pour répondre aux besoins des développeurs, sur leur machine ou pour des déploiements de petits serveurs. Zend Server est également disponible en version commerciale pour faire tourner, superviser et gérer des applications Web en PHP critiques qui nécessitent un haut niveau de fiabilité, de performance et de sécurité.
En utilisant Magento CE et Zend Server CE, les TPE/PME pourront rapidement installer, explorer et commencer à bâtir des boutiques en ligne avec Magento, puis les déployer facilement avec Zend Server. Les utilisateurs peuvent développer des applications Magento eCommerce sur leurs postes de travail sous Windows ou Linux et les déployer en production sur Windows et Linux. Pour étendre plus avant les fonctionnalités e-commerce disponibles pour les développeurs PHP, Varien modularise également Magento et contribue à un nombre significatif de fonctionnalités e-commerce dans le Zend Framework, incluant des interfaces de paiement, des modules de calcul de livraison et bien d’autres choses.
« Les solutions PHP de Zend ont joué un rôle essentiel dans le développement de Magento, nous sommes ravis de contribuer en retour à l’intégration de fonctionnalités e-commerce majeures dans le Zend Framework afin de promouvoir le développement de sites e-commerce basés sur PHP, » a déclaré Roy Rubin, CEO de Varien. « Zend continue à démontrer son expertise inégalée et son fort engagement pour PHP avec des produits tels que Zend Server, et nous pensons étendre plus encore notre partenariat avec eux. En particulier, nous sommes très excités par le fait que le support de Zend Server pour PHP sur Windows soit inégalé, ce qui rend le e-commerce disponible pour toutes les sociétés. »
Wonderbox est un fournisseur de coffrets-cadeaux qui vend d’énormes volumes pendant les fêtes de fin d’année et lors d’autres occasions, telles que la St Valentin et la Fête des Mères. Wonderbox est disponible en France, Italie, Allemagne, Espagne et Pologne et bientôt au Japon, en Belgique, au Portugal et dans bien d’autres pays encore. Les fonctionnalités d’internationalisation de Magento et Zend Framework étaient extrêmement importantes pour leurs plans produit, en plus de la flexibilité Open Source pour laquelle ils sont tous deux réputés.
« Notre site Wonderbox procède à quelque 150 000 transactions par jour et nous estimons que nous servirons plus de 3 millions de visites pendant les fêtes de fin d’années. Nous sommes partis de zéro pour obtenir un site en production totalement fonctionnel qui gère des commandes clients en moins de trois mois en fonctionnant sur Magento eCommerce et Zend Server, » a déclaré Fatih Gezen, Responsable informatique chez Wonderbox. « C’est un ROI impressionnant et une histoire technologique passionnante. En très peu de temps, nous avons maîtrisé la technologie et nous pouvons facilement créer des expériences utilisateurs intuitives que nos clients utilisent pour acheter chez nous. »
« Zend Server “out of the box” vous apporte un environnement PHP sécurisé et de haute performance. Avec l’outil de supervision de Server et les autres fonctionnalités de Magento, c’étaient tout ce dont nous avions besoin pour développer notre site e-commerce, » a commenté Chris Mann, Responsable informatique adjoint chez Wonderbox. « Nous avons bâti un module Magento dans le Zend Framework. Ce qui a été très facile au vu de l’excellent support et formation que nous avons reçu de nos partenaires consultants et la très grande communauté open-source disponible pour ces deux produits. »
En plus des consultants qui se spécialisent en installation Magento/Zend Server, Zend et Varien vont également coopérer sur un programme de formation, training, and d’autres activités pour promouvoir les applications e-commerce, y compris la promotion des bonnes pratiques dans le cycle de vie logiciel et la formation en e-commerce.
Disponibilité
L’environnement Tout-en-un Magento et Zend Server est déjà disponible en téléchargement via les sites Web des deux sociétés, ce qui signifie que les deux immenses communautés de Magento et de Zend auront à leur disposition un seul package pour la solution e-commerce PHP de référence et le plus performant des environnements PHP. Ces packages peuvent être téléchargés via : http://www.magentocommerce.com/product/magento-zend et http://www.zend.com/fr/solutions/packaged-php-applications/zend-server-magento Comme il a été annoncé, les composants eCommerce seront disponibles via le projet Zend Framework et feront également partie du Zend Framework de base embarqué dans chaque téléchargement Magento eCommerce. Cela sera disponible dès que les composants seront ajoutés au projet Zend Framework par les deux équipes.
A propos de Zend Technologies
Zend Technologies Inc., la PHP Company, est le leader des produits et services de développement, déploiement et gestion d’applications Web PHP critiques. PHP est utilisé par 35% des sites Internet dans le monde et est rapidement devenu le langage le plus répandu pour développer des applications stratégiques. Mondialement déployée dans plus de 30 000 entreprises, la gamme de produits Zend apporte une solution complète durant tout le cycle de vie d’une application PHP. Le siège de Zend est situé à Cupertino en Californie.
Pour de plus amples informations, rendez-vous sur http://www.zend.fr ou appelez le 01 48 55 02 00.
A propos de Magento
Magento est une plateforme e-commerce Open Source professionnelle et riche en fonctionnalités qui offre aux commerçants une flexibilité et un contrôle total de la présentation, du contenu et des fonctionnalités de leur canal Web. L’interface d’administration intuitive de Magento fournit de puissants outils marketing, un moteur de gestion de catalogue, et est optimisé pour le SEO afin de permettre aux Web commerçants de créer des sites qui apportent un confort d’achat à leurs clients, et sont taillés selon leurs besoins métiers spécifiques. Conçu pour être totalement scalable et supporté par un réseau important, Magento est la solution eCommerce de référence. Pour de plus amples informations, , rendez-vous sur http://www.MagentoCommerce.com
Contact presse :
Christophe Chervy
+ 33 1 48 55 02 02
christophe@zend.com
Zend, Zend Technologies, Zend Framework, Zend.com, Zend Server, and Zend Studio, and associated logos and icons, are trademarks of Zend Technologies, Inc. and may be registered in certain jurisdictions. All other trademarks are the property of their respective owners.
Proposé par Christophe Chervy
Un nouveau script pour protéger votre site web des attaques de hackers.
CrawlTrack, script de statistiques web qui déjà apportait une protection aux sites l'utilisant est heureux de vous présenter son petit frère CrawlProtect. CrawlProtect est lui uniquement dédié à la protection de votre site. Pas de base MySQL, pas de statistiques sophistiquées, pas de tags à mettre sur vos pages mais une protection très poussée de votre site à l'aide d'un .htaccess extrèmement complet. CrawlProtect vous propose une page de rapport qui vous donne le nombre d'attaques bloquées et les pays d'origine des hackers.
La version 1-1-0 est désormais disponible, vous trouverez plus d'informations et le lien de téléchargement sur www.crawlprotect.com/fr .
Proposé par Jean-Denis Brun
Je n'ai rien trouvé de mieux que memcache.php like apc.php pour monitorer un peu les serveurs memcache.
Je ne sais pas si quelqu'un a déjà trouvé mieux (je suis preneur).
Ca présente les serveurs disponibles, l'espace alloué, les variables stockées avec leur valeurs ...

Edit : Une liste
Symfony 1.3 and 1.4 have been released some days ago in RC2 and you should really take a look at it, because they improve a lot the way you work with the framework, especially the forms one. It’s been a couple of days I started to implement a new bookmarks management feature on a project I’m working on currently, and the new model relationship embedding feature of 1.3’s forms framework just saved me a lot of days.
Here’s a quick and dirty example on how to setup a willingly simplistic bookmarks management system using it
Here’s the naive Doctrine schema I’ll use for this example:
# in config/doctrine/schema.yml
User:
columns:
id:
type: integer(4)
primary: true
autoincrement: true
name:
type: string(255)
notnull: true
relations:
Bookmarks:
type: many
class: Bookmark
local: id
foreign: user_id
onDelete: CASCADE
Bookmark:
columns:
id:
type: integer(4)
primary: true
autoincrement: true
name:
type: string(255)
notnull: true
url:
type: string(255)
notnull: true
user_id:
type: integer(4)
notnull: true
relations:
User:
type: one
local: user_id
foreign: id
As you can see, it’s really naive. Anyway.
What would be a Doctrine schema without fixtures? Quite nothing I guess, so here we go:
# in data/fixtures/fixtures.yml
User:
niko:
name: niko
Bookmark:
niko_bookmark1:
User: niko
name: Slashdot
url: http://slashdot.org/
niko_bookmark2:
User: niko
name: Delicious
url: http://delicious.com/
niko_bookmark3:
User: niko
name: Digg
url: http://digg.com/
You guessed it, after having suited the config/databases.yml file to set up a database of our choice, we can now build the database, all the classes we need and load the previously defined fixtures:
$ ./symfony doctrine:build --all --and-load
What we want do do now is to manage one User’s bookmarks in a single form. Let’s do it now in a new UserBookmarksForm.class.php file where we’ll build a form extending the autogenerated UserForm one:
<?php // lib/form/doctrine/UserBookmarksForm.class.php class UserBookmarksForm extends UserForm { public function configure() { // We don't want to edit the User object unset($this['name']); // Existing bookmark forms $this->embedRelation('Bookmarks'); $this->widgetSchema->setNameFormat('user_bookmarks[%s]'); } }
All the magic is done by calling the embedRelation() method here: all BookmarkForm instances will be embedded and managed automatically in and by our form.
Let’s use a simple controller to manage the form[1]:
<?php class testActions extends sfActions { public function executeBookmarks(sfWebRequest $request) { $this->form = new UserBookmarksForm($user = Doctrine::getTable('User')->findOneByName('niko')); if ($request->isMethod('post') && $this->form->bindAndSave($request->getParameter('user_bookmarks'))) { $this->getUser()->setFlash('notice', 'Bookmarks list updated'); $this->redirect('test/index'); } } }
And a basic template:
You should see something like this:

The form is functional, you can edit several bookmarks at one. Neat? But wait, we can’t add a new one!
Let’s enhance our form by embedding an empty BookmarkForm form instance in order to add a new bookmark:
<?php // lib/form/doctrine/UserBookmarksForm.class.php class UserBookmarksForm extends UserForm { public function configure() { unset($this['name']); // Bookmark creation form $newBookmarkForm = new BookmarkForm(); $newBookmarkForm->setDefault('user_id', $this->object->id); $this->embedForm('new', $newBookmarkForm); // Existing bookmark forms $this->embedRelation('Bookmarks'); $this->widgetSchema->setNameFormat('user_bookmarks[%s]'); } protected function doBind(array $values) { if ('' === trim($values['new']['name']) && '' === trim($values['new']['url'])) { unset($values['new'], $this['new']); } parent::doBind($values); } }
Here I just override the doBind() method to remove the bookmark creation embedded form if nothing has been submitted by the user in its fields; that’s probably because he just wants to edit existing bookmarks[2].
By refreshing the page you should now be able to see the new form:

So now you’re able to add a new Bookmark and/or edit existing instances within the same simple form. Neat? Wait, we can’t delete existing bookmarks!
So you would like to have a checkbox next to every existing bookmark embedded form to schedule its deletion on saving the form? Wow, that’s getting tricky, I like that.
The Symfony forms framework has evolved a lot, but what we’re trying to achieve here will involve some fine-tunning. Don’t be too much afraid seeing the code 
First, we’ll have to add the checkbox widget to the BookmarkForm form, but only if an existing Bookmark object has been bound to it:
<?php // lib/form/doctrine/BookmarkForm.class.php class BookmarkForm extends BaseBookmarkForm { public function configure() { $this->widgetSchema['user_id'] = new sfWidgetFormInputHidden(); $this->validatorSchema['url'] = new sfValidatorAnd(array( new sfValidatorString(array('max_length' => 255)), new sfValidatorUrl(), )); if ($this->object->exists()) { $this->widgetSchema['delete'] = new sfWidgetFormInputCheckbox(); $this->validatorSchema['delete'] = new sfValidatorPass(); } } }
Refreshing the form page should display something like that:

The UserBookmarksForm now holds this code:
<?php // lib/form/doctrine/UserBookmarksForm.class.php class UserBookmarksForm extends UserForm { /** * Bookmarks scheduled for deletion * @var array */ protected $scheduledForDeletion = array(); /** * Configures the form * */ public function configure() { unset($this['name']); // Bookmark creation form $newBookmarkForm = new BookmarkForm(); $newBookmarkForm->setDefault('user_id', $this->object->id); $this->embedForm('new', $newBookmarkForm); // Existing bookmark forms $this->embedRelation('Bookmarks'); $this->widgetSchema->setNameFormat('user_bookmarks[%s]'); } /** * Here we just drop the bookmark embedded creation form if no value has been * provided for it (it somewhat simulates a non-required embedded form) * * @see sfForm::doBind() */ protected function doBind(array $values) { if ('' === trim($values['new']['name']) && '' === trim($values['new']['url'])) { unset($values['new'], $this['new']); } if (isset($values['Bookmarks'])) { foreach ($values['Bookmarks'] as $i => $bookmarkValues) { if (isset($bookmarkValues['delete']) && $bookmarkValues['id']) { $this->scheduledForDeletion[$i] = $bookmarkValues['id']; } } } parent::doBind($values); } /** * Updates object with provided values, dealing with evantual relation deletion * * @see sfFormDoctrine::doUpdateObject() */ protected function doUpdateObject($values) { if (count($this->scheduledForDeletion)) { foreach ($this->scheduledForDeletion as $index => $id) { unset($values['Bookmarks'][$index]); unset($this->object['Bookmarks'][$index]); Doctrine::getTable('Bookmark')->findOneById($id)->delete(); } } $this->getObject()->fromArray($values); } /** * Saves embedded form objects. * * @param mixed $con An optional connection object * @param array $forms An array of forms */ public function saveEmbeddedForms($con = null, $forms = null) { if (null === $con) { $con = $this->getConnection(); } if (null === $forms) { $forms = $this->embeddedForms; } foreach ($forms as $form) { if ($form instanceof sfFormObject) { if (!in_array($form->getObject()->getId(), $this->scheduledForDeletion)) { $form->saveEmbeddedForms($con); $form->getObject()->save($con); } } else { $this->saveEmbeddedForms($con, $form->getEmbeddedForms()); } } } }
The code should be self-explanatory… or not. But anyway, you should now be able to add a new bookmark and delete existing ones as well, in a single form and process, and we’re still using the very same controller from the beginning!
Okay, let’s admit it, we’re reaching the limits of Symfony and probably those of my knowledge of it as well, but… IT WORKS.
As of now we’ve used the convenient <?php echo $form ?> trick, but we now want to have full fine-grained control over the way our embedded form fields will look like.
Let’s update the form template accordingly:
Now you can really control the semantics of the HTML code of the form, field by field.
As always, if you have better solutions in mind, feel free to post them in the comments.
[1] I’ll leave you to create an app, module and route, okay?
[2] Of course this can be a lot improved, but the example is kept as simple as possible to ease understanding.
Ce billet intitulé Embedding Relations in Forms with Symfony 1.3 and Doctrine a été rédigé par Nicolas Perriault et publié sur le blog Prendre un Café sous licence Creative Commons BY-NC-SA.
Le numéro du magazine Programmez de décembre 2009 vient de paraître. Ce numéro est un numéro spécial PHP, avec de nombreux articles parlant de ce sujet. Vous y découvrirez 2 articles de ma part :
Bien sur, vous découvrir d'autres sujets traitant de la sécurité et de l'industrialisation PHP.