La nouvelle version de ce webmail écrit en PHP est disponible depuis samedi.
Cette version vient corriger quelques bugs, et améliore la stabilité de l'application. Cette release vient notamment améliorer le traitement des emails mal-formés, et la communication avec certains serveurs de mail qui posaient problème jusqu'à maintenant.
Téléchargement
Site officiel
Le webmail Internet Messaging Program est disponible en version stable 4.1.5.
Cette nouvelle release, en plus de corriger quelques bugs, vient avec de nouvelles traductions pour certaines langues comme le chinois, le tchèque, ou le polonais.
Rappelons que ce webmail écrit en PHP est scindé en deux branches: la branche 4.1.x du projet IMP s'appuie sur la version 3 du framework Horde (d'où le nom IMP H3), tandis que la branche 3.8.x fonctionne à l'aide de Horde en version 2.
Téléchargement
Site officiel
La version 5.1.22-rc de MySQL est disponible pour le téléchargement.
Parmi les changements disponibles sur cette version, une fonctionnalité a été modifiée :
Parmi les bugs corrigés, quelques exemples :
For those caring, I just posted some quick documentation for the pagination component at my assembla space. More docs will follow (including extensive phpdoc docblocks I hope).
For those caring, I just posted some quick documentation for the pagination component at my assembla space. More docs will follow (including extensive phpdoc docblocks I hope).
Un article vient de paraître sur le site de Zend concernant Standard PHP Library (SPL).
Cette librairie d'interfaces et de classes PHP standard, permet aux développeurs de profiter pleinement de la programmation orientée objet avec PHP5. Quelques explications sont données sur le fonctionnement de cette librairie ainsi que des exemples d'applications.
SPL, directement intégré avec php5, peut être utile pour le développement d'application orientée objet, car elle propose notament des classes pour la gestion de fichiers, la gestion de tableaux, la connexion aux bases de données, simplexml, etc.
L'articleDepuis début 2006, Microsot et Zend travaillent ensemble sur un projet visant a augmenter la fiabilité de PHP sur Windows Server 2003 et 2008.
Une partie de cette collaboration vise à produire un nouveau composant pour IIS 6 et IIS 7 nommé FastCGI permmettant d'utiliser, de manière stable, des applications PHP avec IIS.
Une première version beta de FastCGI pour ISS 5.1/6.0 est disponible gratuitement.
Télécharger FastCGI pour ISS 5.1/6.0
Site officiel
Today I ran into an issue that I already ran into a few weeks ago when I did not have time to dig up, but today I had this time (this plus it's a really annoying issue as you'll see). The main symptom is that PDO does not throws exceptions when you'd expect it to. It's very annoying. The reason, in my case, seems to be that I am querying an old mysql (3.23.x in my case but any 4.x will do according to this bug report). I was not able to find any info from google, so I'm posting this here so that people know :-)
Today I ran into an issue that I already ran into a few weeks ago when I did not have time to dig up, but today I had this time (this plus it's a really annoying issue as you'll see). The main symptom is that PDO does not throws exceptions when you'd expect it to. It's very annoying. The reason, in my case, seems to be that I am querying an old mysql (3.23.x in my case but any 4.x will do according to this bug report). I was not able to find any info from google, so I'm posting this here so that people know :-)
Yesterday, I released the first version of eZVideoFLV , a new extension providing a datatype to store, handle and convert to FLV video files. It's based on the default ezmedia datatype . It mainly adds three features :
The extension is bundled with FLV Player which is released under the MPL 1.1 license. The rest of the extension is released under the GNU GPL licence 2. All information (requirements, installation, screenshots ,...) can be found in the project page on projects.ez.no and I put an example on this site .
Alors ça c'est du lourd : Symfony propulse del.icio.us preview.
Il parait que Symfony rame, sauf chez Yahoo!. Poltergheist ? 
Alors ça c'est du lourd : Symfony propulse del.icio.us preview.
Il parait que Symfony rame, sauf chez Yahoo!. Poltergheist ? 
Pour un projet, je suis en train d'utiliser la librairie javascript jQuery dans Symfony, en lieu et place du couple prototype et scripaculous dont je vous avait déjà parlé.
L'idée est ici de ne pas avoir à utiliser les helpers fournis par Symfony (qui mettent en oeuvre exclusivement Scriptaculous) et ainsi d'éviter d'utiliser les deux librairies simultanément sur le projet, mais aussi de décoreller le code javascript des templates et de favoriser une meilleure dégradabilité de ce dernier.
Par exemple, au lieu d'utiliser la fonction link_to_remote() dans notre template, on peut tout à fait imaginer d'employer un bon vieux link_to() des familles et de lui appliquer une classe css qu'on va pouvoir cibler depuis jQuery afin d'effectuer un appel AJAX pointant vers l'url présente dans l'attribut href du lien. Avec un exemple, c'est un peu plus clair :
<?php echo link_to('Mon lien', '@maroute?monparam=mavaleur', array('class' => 'ajax_link')) ?>
Dans un fichier javascript (jQuery doit bien entendu être chargé) :
$(document).ready(function() { $('a.ajax_link').click(function() { $.ajax( { type: 'post', url: $(this).attr('href'), success: function(msg) { alert("Résultat: " + msg); } }); return false; } ); });
Avantage supplémentaire, vous continuez à bénéficier du système de routing Symfony (pas d'urls en dur dans les fichiers javascripts externalisés.)
Là où Symfony va également nous aider, c'est au travers de sa gestion native de la décoration d'une vue en fonction du type d'appel HTTP : le framework va detecter si l'action a été appelée ou non depuis une requête XmlHttpRequest et, si c'est le cas, décorer la vue avec le layout global de l'application et donc présenter à vos utilisateur le résultat escompté, qu'ils aient activé javascript ou non pour surfer sur votre site.
Si vous désirez mettre à jour un élément de l'arbre DOM avec le contenu reçu d'une requête Ajax, voici une autre petite astuce ; on va utiliser une ancre dans l'url et s'en servir comme argument décrivant l'id DOM qu'on veut mettre à jour :
<?php echo link_to('Mon lien', '@maroute?monparam=mavaleur#mon_div', array('class' => 'ajax_link')) ?> <div id="mon_div" style="display:none"></div>
Et en javascript :
$(document).ready(function() { $('a.ajax_link').click(function() { var href = $(this).attr('href'); var target = href.substring(href.lastIndexOf('#'), href.length); $.ajax( { type: 'post', url: href, success: function(msg) { if ($(target)) { $(target).html(msg).show('slow'); } } } ); return false; } ); });
Note : on aurait pu aussi détourner l'attribut target à cette fin mais ce dernier n'est pas valide en XHTML strict.
Bien entendu, ceci n'est qu'un microscopique aperçu de l'étendu des possibilités de jQuery et de son intégration possible avec Symfony (ou d'autre frameworks et langages, bien entendu.)
Pour un projet, je suis en train d'utiliser la librairie javascript jQuery dans Symfony, en lieu et place du couple prototype et scripaculous dont je vous avait déjà parlé.
L'idée est ici de ne pas avoir à utiliser les helpers fournis par Symfony (qui mettent en oeuvre exclusivement Scriptaculous) et ainsi d'éviter d'utiliser les deux librairies simultanément sur le projet, mais aussi de décoreller le code javascript des templates et de favoriser une meilleure dégradabilité de ce dernier.
Par exemple, au lieu d'utiliser la fonction link_to_remote() dans notre template, on peut tout à fait imaginer d'employer un bon vieux link_to() des familles et de lui appliquer une classe css qu'on va pouvoir cibler depuis jQuery afin d'effectuer un appel AJAX pointant vers l'url présente dans l'attribut href du lien. Avec un exemple, c'est un peu plus clair :
<?php echo link_to('Mon lien', '@maroute?monparam=mavaleur', array('class' => 'ajax_link')) ?>
Dans un fichier javascript (jQuery doit bien entendu être chargé) :
$(document).ready(function() { $('a.ajax_link').click(function() { $.ajax( { type: 'post', url: $(this).attr('href'), success: function(msg) { alert("Résultat: " + msg); } }); return false; } ); });
Avantage supplémentaire, vous continuez à bénéficier du système de routing Symfony (pas d'urls en dur dans les fichiers javascripts externalisés.)
Là où Symfony va également nous aider, c'est au travers de sa gestion native de la décoration d'une vue en fonction du type d'appel HTTP : le framework va detecter si l'action a été appelée ou non depuis une requête XmlHttpRequest et, si c'est le cas, décorer la vue avec le layout global de l'application et donc présenter à vos utilisateur le résultat escompté, qu'ils aient activé javascript ou non pour surfer sur votre site.
Si vous désirez mettre à jour un élément de l'arbre DOM avec le contenu reçu d'une requête Ajax, voici une autre petite astuce ; on va utiliser une ancre dans l'url et s'en servir comme argument décrivant l'id DOM qu'on veut mettre à jour :
<?php echo link_to('Mon lien', '@maroute?monparam=mavaleur#mon_div', array('class' => 'ajax_link')) ?> <div id="mon_div" style="display:none"></div>
Et en javascript :
$(document).ready(function() { $('a.ajax_link').click(function() { var href = $(this).attr('href'); var target = href.substring(href.lastIndexOf('#'), href.length); $.ajax( { type: 'post', url: href, success: function(msg) { if ($(target)) { $(target).html(msg).show('slow'); } } } ); return false; } ); });
Note : on aurait pu aussi détourner l'attribut target à cette fin mais ce dernier n'est pas valide en XHTML strict.
Bien entendu, ceci n'est qu'un microscopique aperçu de l'étendu des possibilités de jQuery et de son intégration possible avec Symfony (ou d'autre frameworks et langages, bien entendu.)
C’est mes potes! Des fidèles de chez fidèles du forum PHP et de l’AFUP. Ils sont même venus suivre une formation chez Anaska.
Maintenant qu’il sont riches, j’espère qu’ils vont nous payer une bonne bouffe au forum de cette année
L’annonce officielle :
Le projet Claroline (plate-forme libre d’apprentissage à distance) va être récompensé par le prix UNESCO - Roi Hamad Bin Isa Al-Khalifa 2007 pour l’utilisation des technologies de l’information et de la communication dans l’éducation (TICE). Il est lauréat avec le projet américain Curriki.
Le Directeur général de l’UNESCO remettra leurs prix aux deux lauréats – un diplôme et un chèque de 25 000 USD pour chacun d’eux – au cours d’une cérémonie qui aura lieu au siège de l’organisation, le 19 décembre prochain. Les lauréats ont été choisis parmi 68 projets menés dans 51 pays et une organisation non gouvernementale internationale active dans le domaine de l’accès libre à l’éducation.
Le Prix est placé sous le haut patronage de Sa majesté le Roi Hamad Bin Isa Al-Khalifa du royaume de Bahreïn.
La plate-forme developperWorks d'IBM nous propose un article sur l'utilisation de l'unicode en PHP 5.
L'encodage du texte est une problèmatique récurrente dans le développement web, que ce soit dans le seul but de sauvegarder l'intégrité des caractères accentués, ou dans le cadre de l'internationalisation complête d'une application.
Le standard unicode a été créé pour répondre à cette problèmatique en permettant de stocker tout type de caractères, qu'ils soient cyrilliques ou chinois. A l'heure actuelle PHP ne gère pas nativement l'unicode, mais offre néanmoins de nombreuses fonctions permettant de l'utiliser dans ses scripts.
En attendant la version 6 de PHP, dont la prise en charge en natif de l'unicode sera un des principaux apports, l'article d'IBM nous explique les possibilités actuelles de PHP 5 et MySQL concernant l'utilisation du language unicode et de l'encodage UTF-8.
IBM: Unicode for the working PHP programmer
Ces vidéos sont publiés sur les sites de partagent de vidéo. Ce sont des tutoriels enregistrés, des sessions de conférences, des screencast ou encore des slides de conférences.
N'hésitez pas à nous contacter pour signaler tout media qui mérite d'être ajouté à cette liste.
Vous pouvez vous inscrire pour le Forum PHP ayant lieu les 21 et 22 novembre 2007.
Réservez vos places dès maintenant !
http://www.afup.org/pages/forumphp2007/inscription.php
Vous pouvez vous inscrire pour le Forum PHP ayant lieu les 21 et 22 novembre 2007.
Réservez vos places dès maintenant !
http://www.afup.org/pages/forumphp2007/inscription.php
Version 6.6 of the Asbru Web Content Management system for PHP, ASP and JSP/Java has been released.
In this latest release an advanced workflow engine to manage the publication of website content has been added. The implementation is designed to support almost any organization's existing website publishing business processes. The workflow engine can handle multiple workflow definitions at the same time. Additionally any number of workflow steps is possible so there is no limit to the number of organizational departments that can be involved in publishing of website content.
Efficient and Controlled Website Publishing
The new workflow engine is fully integrated into the CMS making the publishing of website content very efficient. Users have their own personal workspace, which gives them a quick overview of content allocated to them and waiting for their review. As content moves through the workflow users are alerted via email to new content allocated for their review. It is also possible to configure the system so that any user can view where content is in the workflow process providing control of the publishing process and transparency across the whole organization.
Flexible Workflow Definitions
Several workflow definitions can be created and enforced for different sections of a website and for various types of content including pages, products, image media, audio files, electronic documents and other files. Additionally the actions and the organizational departments and users permitted for each workflow step are fully configurable. Some steps may for example involve editing the content while other workflow steps only enable users to view the content and approve or reject. Workflow definitions are easily created and diagrams provide a quick overview of all the workflow actions in the system.
For a free online trial of the new version of the Asbru Web Content Management system: http://wcm.asbrusoft.com.
About Asbru Web Content Management
The Asbru Web Content Management system is a full-featured and ready to use out-of-the-box enterprise level solution. It is available for PHP, ASP and JSP/Java and runs on Microsoft Windows, Linux, Unix and Mac OS X. The system enables users to update web content through Internet Explorer, Mozilla/Firefox and Safari web browsers. For more information about Asbru Web Content Management: http://wcm.asbrusoft.com.
Proposé par David Fisher
PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.4 et 4.4.7; MySQL 5.0.45 (communauté) et 5.0.45 (entreprise), 4.1.22, ainsi que 5.1.21-beta. Les mises à jour sont recommandées vers ces versions.
3 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Gallery, Xoops et phpBB
eZ Publish 4 arrive enfin, une première version alpha est sortie jeudi dernier basée sur le portage communautaire débuté par Kristof Coomans et Paul Borgermans . En terme fonctionnel ce ne sera probablement pas une révolution mais le principal atout de cette version est évidemment le support tant attendu de PHP5 (les utilisateurs de distribution Linux ne supportant que PHP5 vont apprécier). En plus de cela, je retiens deux points qui apportent des perspectives intéressantes :
L'intégration des eZ Components permettra dans un premier temps d'utiliser ces composants dans les extensions en attendant qu'ils soient réellement intégrer dans eZ Publish en lui-même. Cela ouvre déjà pas mal de perspectives intéressantes, en tout cas j'ai plein d'idées :-)
Le second point paraît plus anodin mais en fait, en plus de simplifier la vie du développeur, il pourra permettre de modifier facilement une classe du kernel eZ Publish sans vraiment le modifier. Ce n'est bien sûr pas recommandé mais c'est malheureusement parfois nécessaire et là on pourra le faire de manière presque propre.
LLaumgui parle aussi de cette sortie avec un commentaire instructif de Paul Borgermans .
À côté de cet évènement eZ Publish 3.10 est sorti avec des nouveautés fonctionnelles intéressantes (qui sont aussi de fait dans eZ Publish 4), en particulier :
J'ai testé les nouvelles fonctionnalités autour des URL en développant eZVideoFLV avec la 3.10beta ; habitué des _ et de l'ASCII c'est assez déroutant mais c'est enfin configurable et extensible, ça ne peut être que mieux. Je n'ai pas encore testé le datatype Multi-options2 mais ça ne saurait tarder.
Les versions 3.9.4 et 3.8.10 sont également sorties corrigeant deux failles de sécurité. Bref quoi qu'il arrive, des mises à jours sont à prévoir. Pour moi ce sera probablement en 3.10.x voire en 4.0 si une beta pointe le bout de son nez dans pas trop longtemps.
Enfin Clever Age publie sur son blog un article plutôt pertinent sur le support un peu délaissé des SGBD autres que MySQL par eZ Publish (qu'ils ne savent par contre pas orthographier correctement :p).
La prochaine version de eZ Publish, 4.0, vient d'être publiée en alpha, avec le support attendu de PHP 5. Il est désormais possible de faire tourner le célèbre CMS sur une plate-forme PHP 5.
eZ Publish 4.0 pave la voie pour l'intégration des eZ components, améliore les performances, le support des clusters, et la recherche.
En voilà une nouvelle qu'elle est bonne ! En effet, parmi les "gros" framework du marcher, eZ Publish restait l'un des derniers à ne pas avoir encore annoncé sa migration vers PHP5. Malgré tout, il ne s'agit pas d'une véritable migration dans le sens où l'architecture du moteur reste en PHP4 (pour le moment ?), mais sera capable de tourner sur un serveur PHP5.
Celà reste un bon point pour les agences qui pourront faire leurs développements spécifique en PHP5.
D'autre part, l'amélioration des performances des "components" ne sera pas négligeable non plus.
La prochaine version de eZ Publish, 4.0, vient d'être publiée en alpha, avec le support attendu de PHP 5. Il est désormais possible de faire tourner le célèbre CMS sur une plate-forme PHP 5.
eZ Publish 4.0 pave la voie pour l'intégration des eZ components, améliore les performances, le support des clusters, et la recherche.
En voilà une nouvelle qu'elle est bonne ! En effet, parmi les "gros" framework du marcher, eZ Publish restait l'un des derniers à ne pas avoir encore annoncé sa migration vers PHP5. Malgré tout, il ne s'agit pas d'une véritable migration dans le sens où l'architecture du moteur reste en PHP4 (pour le moment ?), mais sera capable de tourner sur un serveur PHP5.
Celà reste un bon point pour les agences qui pourront faire leurs développements spécifique en PHP5.
D'autre part, l'amélioration des performances des "components" ne sera pas négligeable non plus.
MemHT est un portail de génération de site internet intéressant à plus d'un titre.
La simplicité en est sa caractéristique principale où il semble enfin aisé de gérer son propre site internet sans aucune connaissance en langage informatique.
MemHT est un portail Web ( CMS ou SGC ) écrit en PHP/MySQL par Miltenovik Manojlo (Italie) et déjà disponible en 13 langues.
Sa venue en France est très récente, mais à pour but d'offrir à la communauté Francophone une version totalement française, ainsi qu'un support s'y référant.
MemHT a pour arme principale, une simplicité extrême d'utilisation et d'installation tout en conservant une gestion des droits éprouvée et une touche d'Ajax là où ça va bien, pas d'abus de cette technologie trop souvant gourmande, mais des fonctions clefs rendant son utilisation bien agréable (bien évidemment nous pouvons retrouver une intégration du framework scriptaculous, référence en la matière) .
MemHT est livré actuellement en version 3.2, apportant 'comme tout CMS' son lot de nouveautés et de correctifs.
MemHT c'est :
- un forum ultra simple et performant
- une galerie en Ajax du plus bel effet
- une FAQ
- un guide
- une messagerie privé
- un gestionnaire d'articles
- des RSS
- un plan du site
- une fiche contact
- l'url rewriting nativement intégré
- une administration extrêmement simple
- etc etc
Le meilleur moyen de vous faire un avis est tout simplement de tester MemHT pour savoir si il peut répondre à vos attente.
Vous retrouverez les sources françaises sur:
- www.memht-france.com
Le site officiel de développement:
- www.memht.com
Souhaitant que MemHT vous apporte autant de satisfaction qu'à nous même.
Profitez pleinement de la simplicité de MemHT pour votre projet internet.
Proposé par Cyril Levert
Warning: Missing argument 1 for test()
Warning: Missing argument 1 for test(), called in (Fichier) on line 3 and defined in (fichier)
Warning:this article explains some hacks I had to do to upgrade quickly to eZ Publish 3.10. These modifications can be dangerous for your data, use them at your own risk and don't forget to make backups !
Waiting for a more stable version of eZ Publish 4 , I've upgraded my site from eZ Publish 3.9.2 to eZ Publish 3.10.0. My last upgrade was quite long , but this one could have taken ages ! As I mentioned in the developper forum , the updateniceurls.php script started with this message :
> tigrou@dedipwet[88.191.30.29]:~/web/pwet.fr/www310$ php4 bin/php/updateniceurls.php -s plain_site_admin Using siteaccess plain_site_admin for nice url update Importing old url aliases Importing 62638 standard urls ........................................................ 0.09% 45h 46m 8s ........................................................ 0.18% 86h 55m 44s ........................................................ 0.27% 106h 58m 2s ........................................................ 0.36% 155h 18m 55s
WOW 155 hours, and just for the first step ! In fact, I don't want to change my URIs (Cool URIs don't change !) so I put these lines in site.ini.append.php :
[URLTranslator] TransformationGroup=urlalias_compat
But even with these settings, the script tries to regenerate all URL aliases. After some searches, I found that eZURLAliasML::storePath() takes most of the time by calling several times eZURLAliasML::convertToAlias() on strings that are in my case already URL aliases ! This behaviour can be avoided by setting the $cleanupElements parameters to false (its default value is true) in the code of updateniceurls.php. eZURLAliasML::storePath() also calls eZURLAliasML::strtolower() several times. This method uses eZCharTransform to do an advanced strtolower but in my case with my existing ASCII URL aliases, there's no need of it. I has just replaced this code with a simple PHP strtolower() ( don't forget to remove this hack after upgrade !).
With those hacks, eZURLAliasML::storePath() takes about 0.02 second per URI where the original code took between 0.6 and 10 seconds !
By following the upgrade documentation , the rest of the upgrade was, as always, quite easy.
Extrait du communiqué officiel (un peu personnalisé)
La grand messe annuelle des utilisateurs de PHP réunira de nombreuses personnalités du monde PHP : le père du PHP Rasmus Lerdorf, Andrei Zmievski, développeur du langage PHP et expert unicode, Derick Rethans, créateur de Xdebug et architecte à eZ Systems, ou encore … moi
Organisé à Paris, les 21 et 22 novembre prochains par l’Association Française des Utilisateurs de PHP (www.afup.org), le Forum PHP 2007 propose 2 journées de conférences, orientées, fonctionnel et technique. Une occasion unique d’échanges avec l’ensemble de la communauté PHP française, les meilleurs spécialistes, et les entreprises utilisatrices.
Informations et inscriptions : http://www.afup.org/pages/forumphp2007/
Le forum PHP 2007 se tiendra les 21 et 22 novembre à Paris. Des intervenants de renom : Rasmus Lerdorf (créateur du PHP) et Andrei Zmievski (responsable du développement de PHP 6) y seront présents.

Ce forum s'adresse à tous ceux qui développent des applications Web. La première journée est axée sur le domaine fonctionnel, la deuxième est orientée technique.
Le forum PHP organisé par l'Association Française des Utilisateurs de PHP (AFUP) est une occasion unique de rencontrer la communauté et les professionnels de PHP. Plus d'informations sur http://www.afup.org/forumphp/
Nouvelle version du CMS e107, encore en final cette année de l'Open Source CMS Award de packtpub.com...
Cette nouvelle version à télécharger sur http://e107.org vient corriger des bugs essentiellement.
La prochaine version majeure est déjà en cours de réalisation et apportera beaucoup plus de ouvelles fonctionnalités que celle-ci.
Néanmoins il est fortement recommendé de mettre son système à jour.
Plus d'infos en français, sur le site communautaire:
http://etalkers.tuxfamily.org
Proposé par Lolo Irie
Sortie du mod Phpbb-Seo mod Rewrite phpBB SEO Intermédiaire pour BBtonuke
Ce mod réécrit les URLS des forums BBtonuke (phpBB intégré dans le CMS PhpNuke) en injectant le titre des catégories et forums dans leurs URLS. Les URLS des sujets utiliseront une réécriture statique : topicxx.html
Lien pour le téléchargement du module
Lien vers la démo du module : ici
Lien vers le forum ou est assuré le support : ici
Il est vivement conseillé de l'installé en complément du mod
Zero duplicate pour une optimisation du référencement de votre forum sans Duplicate Content ;)"
Proposé par Vespa
Suite à la sortie de Zend Core 2.5, il est possible de mettre à jour facilement un serveur Zend Core 2.0 sous Linux à l'aide de la commande suivante (sous login root ou avec sudo) afin de bénéficier, au moins, de PHP 5.2.4 :
# /usr/local/Zend/Core/setup/update -g -a
Si, comme moi, vous avez ajouté quelques extensions à Zend Core, comme PDO_SQLITE, une désinstallation/réinstallation peut être nécessaire :
# /usr/local/Zend/Core/bin/pecl uninstall PDO_SQLITE # /usr/local/Zend/Core/bin/pecl uninstall PDO # /usr/local/Zend/Core/bin/pecl install PDO # /usr/local/Zend/Core/bin/pecl install PDO_SQLITE
Ensuite un petit redémarrage d'Apache est nécessaire :
# /usr/local/Zend/apache2/bin/apachectl restart
Et vous voilà avec un serveur sous PHP 5.2.4 :-)
Remarque : il est aussi possible de passer par l'interface web si vous y avez accès : http://votreserveur/ZendCore/ > Control Center > Updates
Dans un article paru sur le site IBM, Duane O'Brien propose d'examiner les similitudes et les différences de trois frameworks PHP : Zend, symfony, CakePHP.
Cet article est le premier d'une série de tutoriaux à destination des développeurs PHP souhaitant débuter avec un framework, mais n'ayant pas le temps d'examiner toutes les solutions dans les moindres détails.
L'auteur se concentre sur les trois frameworks PHP parmi les plus répandus, à savoir Zend, symfony, CakePHP. Le but avoué de cette série de tutoriaux est de comprendre pour quelles raisons utiliser un framework, de présenter les trois frameworks choisis et de comprendre comment installer et avoir une bonne mise en main de chacun d'eux.
Le premier tutoriel commence par donner les inévitables bases :
L'auteur propose ensuite de réaliser une première application test, intitulée "Blahg". Il s'agit de permettre de poster un texte, via une simple zone de texte. Celui-ci sera alors enregistré en base de données et l'application permettra de l'afficher à la demande.
Dans le premier tutoriel, seule l'installation de la base de données de cette application est abordée. Pour le reste, il faudra attendre les prochains tutoriaux
Une nouvelle version de Phalanger est disponible depuis peu. Ce projet Open Source a pour but d'implémenter le langage PHP sur la plateforme .NET de Microsoft. Elle permet par exemple d'exécuter sans modification des applications PHP existantes comme phpBB, phpMyAdmin, Wordpress et bien d'autres encore.
Pour Christophe Lauer, auteur du projet, Phalanger confère à PHP le statut de "langage .NET", ouvrant la porte à l'intéropérabilité avec l'ensemble de la plate-forme .NET et à l'utilisation - entre autres - de Microsoft Ajax et des contrôles riches de l'ASP.NET Ajax Control Toolkit.
La présentation du projet sur le site MSDN, comporte quelques rappels des concepts de base ASP.NET, puis passe en revue les possibilités offertes par Phalanger, ses points forts et ses limites.
Pour plus d'informations :
Ces vidéos sont publiés sur les sites de partagent de vidéo. Ce sont des tutoriels enregistrés, des sessions de conférences, des screencast ou encore des slides de conférences.
N'hésitez pas à nous contacter pour signaler tout media qui mérite d'être ajouté à cette liste.
La version finale d'IMagick 2.0.0 est disponible au téléchargement.
Cette version est, comme son numéro de version ne l'indique pas, la première version stable de ce wrapper depuis sa création en 2002, et après plusieurs années en version beta 0.9.x. Il faut d'ailleurs noter que cette version 2.0.0 n'est pas compatible avec les versions précédentes.
Rappelons qu'IMagick est une extension PHP permettant d'utiliser les API d'ImageMagick pour manipuler des images au travers de classes PHP.
Cette version nécessite au minimum PHP 5.1.3, ImageMagick 6.2.4, et le PEAR Installer 1.4.0.
Site officiel IMagick
Changelog
Documentation
Site officiel ImageMagick
Le site VNUNet.fr propose un article à propos d'une récente étude sur les logiciels libres.
L'étude en question montre que l'engouement pour les logiciels libres ne faiblit pas, et nous présente quelques chiffres intéressants.
On apprend par exemple que 53% des responsables de sécurité ont tendance à déployer des logiciels libres plutôt que leurs équivalents commerciaux, et que
parmis les raisons de la préférence d'une solution open source à une solution commerciale, 80% avancent le coût, 51% l'accès au code source, et 47% le fait que le code soit examiné par la communauté.
A l'inverse, selon l'étude les principaux arguments en faveur des logiciels commerciaux sont la facilité d'adoption et les mises à jour automatiques.
L'article de VNUNet: Les logiciels open source inspirent de plus en plus confiance
Lors de la ZendCon PHP conference à San Francisco, Zend a annoncé plusieurs projet en concertation avec Microsoft, dans le but d'améliorer la performance des applications PHP fonctionnant sur Windows.
Selon les dires d'Andi Gutsman, co-fondateur de Zend, les nombreuses annonces faites à la Zendcon PHP conférence convergent vers un même but : établir un écosystème autour de PHP et de Zend. Environ 55% des clients de Zend souhaiteraient établir des applications hybrides. Pour répondre à ce besoin, Zend s'intéresse à Eclipse et Andi Gutmans motive le choix de ce framework Open Source par le fait que son utilisation semble atténuer la difficulté pour créer des application multi-langages
Parmi les annonces, on peut noter :
Pour plus d'informations, lire l'article correspondant sur SD Times
Joshua Eichorn à récemment posté une liste des nouveautés attendues dans la nouvelle version de l'installateur de PEAR. Afin d'éviter la confusion possible à l'heure actuelle l'installateur va changer de nom et s'appeler Pyrus tandis que le "repository" de paquetages se nommera PEAR2.
Voici la liste des points abordés par Joshua lors de sa "PEAR2 Unconference" en marge de la ZendCon.
Joshua Eichorn à récemment posté une liste des nouveautés attendues dans la nouvelle version de l'installateur de PEAR. Afin d'éviter la confusion possible à l'heure actuelle l'installateur va changer de nom et s'appeler Pyrus tandis que le "repository" de paquetages se nommera PEAR2.
Voici la liste des points abordés par Joshua lors de sa "PEAR2 Unconference" en marge de la ZendCon.
Le rendez-vous Flex d'hier s'est bien déroulé, les réactions sont positives. Si vous avez des remarques sur la session n'hésitez pas à poster un commentaire ou envoyer un mail à bureau@afup.org.
Certains d'entre-vous n'ont pas bien vu les exemples, nous mettrons bientôt à disposition le code des exemples que Mike à présenté.
Une photo de la salle: http://www.flickr.com/photos/arnaudlimbourg/1550788702/
Le rendez-vous Flex d'hier s'est bien déroulé, les réactions sont positives. Si vous avez des remarques sur la session n'hésitez pas à poster un commentaire ou envoyer un mail à bureau@afup.org.
Certains d'entre-vous n'ont pas bien vu les exemples, nous mettrons bientôt à disposition le code des exemples que Mike à présenté.
Une photo de la salle: http://www.flickr.com/photos/arnaudlimbourg/1550788702/
La nouvelle version du framework symfony est disponible.
Cette version estampillée 1.0.8 vient principalement corriger une dizaine de bugs, et changer certains chemins, jusqu'à maintenant absolus, en chemins relatifs. En effet l'utilisation de chemins absolus posait parfois problème lors de la mise en production.
Voici le changelog:
# r5471: fixed admin main.css - absolute to relative paths (#1889) # r5355: plugin-install tasks create relative symlink instead of absolute symlink # r5348: fixed EzComponents library inclusion (#2193) # r5344: allow using a custom form id (#1899) # r5339: fixed sfPropelData error message (#2218) # r5308: fixed sfFileCache::clean() when dir does not exist (#2294) # r5160: fixed double call to clearCredentials() in sfBasicSecurityUser # r5153: fixed code completion not working with sfTestBrowser # r5149: fixed bug in _get_options_from_objects (#1526) # r5145: fixed ETag to be compliant with the HTTP1.1 spec (#2216) # r5141: fixed consistent syntax of i18n helper function when i18n is off # r5061: fixed blank screen of death (#2231 and #1862) # r5001: fixed sfBasicSecurityFilter should not secure the "secure" action eitherA cette occasion, les développeurs du projet annoncent que la sortie de la prochaine version 1.0.9 devrait être en meilleur accord avec le calendrier prévu, et donc être disponible d'ici 2 à 3 semaines.
Microsoft et Zend collaborent sur une implémentation PHP d’InfoCard :
http://www.lemondeinformatique.fr/actualites/lire-microsoft-et-zend-collaborent-sur-une-implementation-php-d-infocard-24268.html
PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.4 et 4.4.7; MySQL 5.0.45 (communauté) et 5.0.45 (entreprise), 4.1.22, ainsi que 5.1.21-beta. Les mises à jour sont recommandées vers ces versions.
4 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Gallery, Joomla, PEAR et phpMyAdmin
PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.4 et 4.4.7; MySQL 5.0.45 (communauté) et 5.0.45 (entreprise), 4.1.22, ainsi que 5.1.21-beta. Les mises à jour sont recommandées vers ces versions.
4 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Gallery, Joomla, PEAR et phpMyAdmin
La nouvelle release de phpMyAdmin 2.11.1.1 est aujourd'hui disponible.
Cette version apporte un correctif d'une faille de sécurité XSS à partir du fichier setup.php.
|
170 conseils d'experts sur le développement Web
(1482 hits) |
|
Comparatif des framework web
(1299 hits) |
|
Adresse IP locale
(1129 hits) |
|
10 cauchemars de navigation sur un site
(1040 hits) |
|
Framework de développement CSS
(1022 hits) |
|
6 clés pour les CSS
(984 hits) |
|
Gagner de l'argent avec des XSS
(977 hits) |
Il y a quelques jours, Duane O'Brien commençait un tutoriel sur l'utilisation de trois frameworks PHP : Zend, symfony, CakePHP. La seconde partie de ce tutoriel est aujourd'hui disponible sur le site d'IBM.
Après avoir présenté succinctement les frameworks Zend, symfony et CakePHP et leur mode d'installation dans la première partie, Duane O'Brien passe à une partie plus technique dans le deuxième volet de sa série d'articles consacré aux frameworks PHP.
Pour chacun des frameworks, il explique comment passer à l'étape suivante et construire une application permettant d'enregistrer des articles, de les afficher sous former de liste et de les consulter.
A la fin du tutoriel, il laisse entendre que la partie suivante couvrira un gestionnaires de commentaires pour les articles publiés.
William B. Zimmerly a écrit un article sur le site d'IBM concernant l'utilisation de syslog afin de débugger des applications PHP.
Syslog est un protocole connu sur les systèmes Unix, qui permet de centraliser les journaux d'évènements des ordinateurs présents sur un réseau. On peut ainsi retrouver plus facilement les défaillances de ces ordinateurs.
Il existe une fonction PHP qui permet d'utiliser ce protocole pour faciliter le débuggage des applications PHP. William B. Zimmerly donne un exemple d'utilisation de cette fonction. Il est alors possible d'indiquer dans les fichiers log du système les heures d'accès à certaines pages de vos applications, les valeurs de variables à un moment précis, qui exécute des requêtes SQL, etc.
Article
Zend annonce la sortie de son Zend Core 2.5.
Zend a profité de la ZendCon qui se tenait du 8 au 11 octobre pour annoncer la sortie de son Zend Core en version 2.5. Les améliorations apportées à cette sortie visent à renforcer PHP5 dans le déploiement d'applications Web stratégiques, on retrouve ainsi les éléments suivants :
Ces vidéos sont publiés sur les sites de partagent de vidéo. Ce sont des tutoriels enregistrés, des sessions de conférences, des screencast ou encore des slides de conférences.
N'hésitez pas à nous contacter pour signaler tout media qui mérite d'être ajouté à cette liste.
La version 2.11.1.2 de phpMyAdmin est sortie hier, moins d'une semaine après la version 2.11.1.1.
Cette version corrige une faille de sécurité de type XSS. Tout le monde est donc invité à migrer vers cette version.
Descrition de la failleLa version 3.3.5 du moteur de recherche et d'indexation mnoGoSearch vient de paraître.
Il s'agit d'une version de maintenance visant à corriger une demi-douzaine d'anomalies ainsi qu'une faille de sécurité (XSS). Elle apporte également quelques améliorations mineures.
eZ Systems organise un évènement développeur à Paris le 31 octobre.
La communauté eZ est en pleine croissance (en partie grâce à vous !), en parallèle de cela, eZ se professionnalise mais n'en oublie pas, au contraire, ses idées et son origine, convaincu que la force de notre écosystème réside dans l'ouverture et le partage.
Pour cette raison, nous organisons un événement "développeur" en marge de notre séminaire partenaire qui se tient à Paris le 31 octobre 2007.
Il s'agit d'1/2 journée (le 31 en après midi) ouverte à tous mais axée principalement sur des aspects Développement d'eZ Publish, avec un minimum d'enrobage marketing et de slideware ! Il s'agit d'une première, et nous souhaitons clairement que ce ne soit pas la dernière.
Si vous êtes développeur ou si vous avez dans vos équipes des développeurs travaillant sur eZ, c'est l'occasion idéal de venir approfondir et échanger notamment autour des nouveautés d'eZ !
Nous proposons le programme suivant :
14.30 : Introduction & dernières infos d'eZ Systems Western Europe - Roland Benedetti
14.45 : eZ Labs et le développement d'eZ - Paul Borgermans
15.20 : Tutoriel sur le sujet des migrations vers eZ Publish 4 et PHP5
16.00 : Open Conference (soumettez vos idéesou nous ferons avec celles des autres :-) )
18.30 : Fermeture officielle, pour ceux qui veulent continuer l'échange, garder votre début de soirée ou plus pour apéritifs / restaurants ...
L'évènement se passera à Eurosites (8 bis, rue de la Fontaine au Roi 75011, Paris)
Plus d'infos ici : http://www.eurosites.fr/location-salle-paris-republique.html
Comme le nombre de places pourrait être limité, veuillez nous informer de votre venue à info.fr@ez.no
Proposé par Roland
Je lui fait déjà découvrir les bonnes choses.
La grand messe annuelle des utilisateurs de PHP réunira de nombreuses personnalités du monde PHP : le père du PHP Rasmus Lerdorf, Andrei Zmievski, développeur du langage PHP et expert unicode, Derick Rethans, créateur de Xdebug et architecte à eZ Systems ou encore Brian Shire, responsable technique de Facebook.
Organisé à Paris, les 21 et 22 novembre prochains par l'Association Française des Utilisateurs de PHP (www.afup.org), le Forum PHP 2007 propose 2 journées de conférences, orientées, fonctionnel et technique. Une occasion unique d'échanges avec l'ensemble de la communauté PHP française, les meilleurs
spécialistes et les entreprises utilisatrices.
Infos pratiques :
Date > 21 & 22 novembre 2007
Lieu > ASIEM 6, Rue Albert de Lapparent Paris 7°
Tarif > 120 euros la journée, 180 euros les deux jours
Inscription et détails > http://afup.org/forumphp
Proposé par perrick penet
C’est pas moi qui le dit :
http://www.symfony-project.com/blog/2007/10/02/delicious-preview-built-with-symfony
PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.4 et 4.4.7; MySQL 5.0.45 (communauté) et 5.0.45 (entreprise), 4.1.22, ainsi que 5.1.21-beta. Les mises à jour sont recommandées vers ces versions.
7 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Drupal, Gallery, Joomla, PEAR, WordPress, dotProject et phpMyAdmin
${'vive PHP et MySQL'} = 'Mais oui!'; print ${'vive PHP et MySQL'}; print_r(get_defined_vars()); ?> Mais oui! Array ( [vive PHP et MySQL] => Mais oui! [] => 2 )
Having started a few applications using the Zend Framework, I came out with a few practices that I tend to use over and over. In this post I'll quickly expose some of them and explain why I do things the way I do them. As you'll notice, most of them are already widely known and used over the ZF developer's community. Please remember that these practices are just what I do, and come with no garanty at all to be best practices.
First thing to work out when starting a new Zend Framework powered application, at least if you decide to use the ZF's MVC component, is the application's directory structure. Here is the one I used, which is a slightly modified version of the official recommended structure. This is essentially a standard modular structure with all directories needed to store various additional data from your application.
application/ cache/ config/ application.ini routes.ini data/ layouts/scripts/ library/App/ logs/ modules/ default/ user/ document_root/ css/ images/ index.php js/
As you can see, I have many directories, each dedicated to a specific file type. This has many advantages, such as always knowing where to find what you're looking for or easily process files of a certain type (think grep foo logs/*). Also, I name my directories explicitly. I used to call the config directory etc, which is the directory holding most configurations files under UNIX systems, but it may not appear that clear to non-UNIX user, while config is clear enough for everyone.
Another point you might notice is the that all applications files and data are placed outside the document_root. This is done to avoid unwanted access to such resources. While this is the best way, in my opinion, to do, it may not always be possible (like when you have no control on your actual DocumentRoot. In this case, you may consider having the following structure:
application/ cache/ config/ application.ini routes.ini data/ layouts/scripts/ library/App/ logs/ modules/ default/ user/ tasks/ css/ images/ index.php js/
Then you can deny any web access to the application/ directory with the following htaccess rules:
Order allow,deny Deny from all
Yeah, I said it actually. Modules in Zend Framework are groups of controllers (along with their corresponding views and models) which sits in their own namespace. One could argue that module's primary goal is to ease code re-use, but I personnaly dunno, as I personnally still have not seen such a use of modules. The drawbacks of re-usable code is that it needs to be abstract enough to fit ant particular situation or so. In this context, I only have a single separate module alongside the default one: the user module. It has Index and Auth controllers, respectively used to perform CRUD and login/logout operations.
Having re-usable modules implies that all modules containes its own models, or at least, knows where (ie, in which other module) to find its required models. There comes Xend's model loader. This is an action helper which ease the load of models inside controllers, like:
$this->_helper->modelLoader(array('MyCoolModel', 'MyOtherModel'));
Easy heh ? The bad point with this helper is that it is restricted to, or at best tricky to use outside, action controllers. That is why I developped my own library loader which I shall present in another blogpost soon.
Using the Xend's model loader trained me to adopt what I consider a good model naming convention, basically, it just follows the controller's conventions, that is, prefix the model name with the module's name, so that for example my user model is named like User_Users (the first User is the module name, the second Users is the ucfirst'ed tablename). whenever I need to have row specific model I just postfix the whole model name with _Row. It gives the following directory architecture:
modules/user/models/ Users/Row.php Users.php
I'll eventually load User_Users_Row from User/Users.php with a simple require:
require_once dirname(__FILE__).'/Users/Row.php';
A recurring question from ZF beginners is to know where they should put their own library classes. The answer is pretty simple actually. You just create your own library namespace alongside Zend's. Let's say you wish to extend Zend_Db_Table_Abstract to add your own logic. The first thing to do is to choose the name of your namespace, we will use Foobar as an example, because this is a cool name. Your class will be named like Foobar_Db_Table_Abstract, and located in Foobar/Db/Table/Abstract.php, which in turn should be located anywhere in your include_path. So you could have the following directory structure:
application/library/ Zend/ Foobar/ Riskle/
Just remember ZF's naming convention: from the filename, strip the .php, replace slashes (/) with underscores (_), and you've got the class name. Simple heh ?
Additionnaly to my personal library namespace, I also have a special App namespace, which I always locate into application/library/App. This namespace principally provides two classes, App_Controller_Action and App_Db_Table_Abstract, which basically extend respectively Zend_Controller_Action and Zend_Db_Table_Abstract. All my controllers and models then use the App_ namespace as a reference, so that I can easily change the base class for all my controllers / models as easily as changing the parent of the corresponding App class.
Using ZF compatible components is just easy as dropping them in your include path. By ZF compatible, I mean following the ZF class naming convention. Just make source it's in your include_path, and you can start using them right away. Components library I use includes:
I put them in a particular path (~/share/php/) which I add to my include path.
note: Some dikdiks tend to store third-party in application/library/ instead of a completely separate place. This problem looks a lot like dynamically linked vs static binaries. With static binaries (in our case, storing all in application/library/), you don't have to care about dependencies, as every single needed line of code is shipped with your application. This ease redistribution and installation a lot, but makes your download larger. You also have to manage yourself dependencies upgrade (which in turn save this hassle from the end-user). With dynamically linked applications, you avoid duplicated code by forcing the use of a global, site wide, code repository (generally /usr/share/php on unix systems). You also transfer dependencies handling to the end-user (and/or the packaging system). Really, this is a choice to make yourself I think.
Things get a little bit more complicated when the components does not follow the naming convention. What I do in this case is just puting them into a separate directory tree called vendor/, which I don't forget to add to my include path of course, then I just manually includes need files. We could have done a one-to-one match between the component's public classes and custom well-named classes, but it's much of a hassle for the benefit I think.
Well that's all for today. I'll try to write some more in the future about application building with the Zend Framework, there are still a lot of things to be said, invented, and discovered :-)
Having started a few applications using the Zend Framework, I came out with a few practices that I tend to use over and over. In this post I'll quickly expose some of them and explain why I do things the way I do them. As you'll notice, most of them are already widely known and used over the ZF developer's community. Please remember that these practices are just what I do, and come with no garanty at all to be best practices.
First thing to work out when starting a new Zend Framework powered application, at least if you decide to use the ZF's MVC component, is the application's directory structure. Here is the one I used, which is a slightly modified version of the official recommended structure. This is essentially a standard modular structure with all directories needed to store various additional data from your application.
application/ cache/ config/ application.ini routes.ini data/ layouts/scripts/ library/App/ logs/ modules/ default/ user/ document_root/ css/ images/ index.php js/
As you can see, I have many directories, each dedicated to a specific file type. This has many advantages, such as always knowing where to find what you're looking for or easily process files of a certain type (think grep foo logs/*). Also, I name my directories explicitly. I used to call the config directory etc, which is the directory holding most configurations files under UNIX systems, but it may not appear that clear to non-UNIX user, while config is clear enough for everyone.
Another point you might notice is the that all applications files and data are placed outside the document_root. This is done to avoid unwanted access to such resources. While this is the best way, in my opinion, to do, it may not always be possible (like when you have no control on your actual DocumentRoot. In this case, you may consider having the following structure:
application/ cache/ config/ application.ini routes.ini data/ layouts/scripts/ library/App/ logs/ modules/ default/ user/ tasks/ css/ images/ index.php js/
Then you can deny any web access to the application/ directory with the following htaccess rules:
<Directory application>
Order allow,deny
Deny from all
</Directory>
Yeah, I said it actually. Modules in Zend Framework are groups of controllers (along with their corresponding views and models) which sits in their own namespace. One could argue that module's primary goal is to ease code re-use, but I personnaly dunno, as I personnally still have not seen such a use of modules. The drawbacks of re-usable code is that it needs to be abstract enough to fit ant particular situation or so. In this context, I only have a single separate module alongside the default one: the user module. It has Index and Auth controllers, respectively used to perform CRUD and login/logout operations.
Having re-usable modules implies that all modules containes its own models, or at least, knows where (ie, in which other module) to find its required models. There comes Xend's model loader. This is an action helper which ease the load of models inside controllers, like:
$this->_helper->modelLoader(array('MyCoolModel', 'MyOtherModel'));
Easy heh ? The bad point with this helper is that it is restricted to, or at best tricky to use outside, action controllers. That is why I developped my own library loader which I shall present in another blogpost soon.
Using the Xend's model loader trained me to adopt what I consider a good model naming convention, basically, it just follows the controller's conventions, that is, prefix the model name with the module's name, so that for example my user model is named like User_Users (the first User is the module name, the second Users is the ucfirst'ed tablename). whenever I need to have row specific model I just postfix the whole model name with _Row. It gives the following directory architecture:
modules/user/models/ Users/Row.php Users.php
I'll eventually load User_Users_Row from User/Users.php with a simple require:
require_once dirname(__FILE__).'/Users/Row.php';
A recurring question from ZF beginners is to know where they should put their own library classes. The answer is pretty simple actually. You just create your own library namespace alongside Zend's. Let's say you wish to extend Zend_Db_Table_Abstract to add your own logic. The first thing to do is to choose the name of your namespace, we will use Foobar as an example, because this is a cool name. Your class will be named like Foobar_Db_Table_Abstract, and located in Foobar/Db/Table/Abstract.php, which in turn should be located anywhere in your include_path. So you could have the following directory structure:
application/library/ Zend/ Foobar/ Riskle/
Just remember ZF's naming convention: from the filename, strip the .php, replace slashes (/) with underscores (_), and you've got the class name. Simple heh ?
Additionnaly to my personal library namespace, I also have a special App namespace, which I always locate into application/library/App. This namespace principally provides two classes, App_Controller_Action and App_Db_Table_Abstract, which basically extend respectively Zend_Controller_Action and Zend_Db_Table_Abstract. All my controllers and models then use the App_ namespace as a reference, so that I can easily change the base class for all my controllers / models as easily as changing the parent of the corresponding App class.
Using ZF compatible components is just easy as dropping them in your include path. By ZF compatible, I mean following the ZF class naming convention. Just make source it's in your include_path, and you can start using them right away. Components library I use includes:
I put them in a particular path (~/share/php/) which I add to my include path.
note: Some dikdiks tend to store third-party in application/library/ instead of a completely separate place. This problem looks a lot like dynamically linked vs static binaries. With static binaries (in our case, storing all in application/library/), you don't have to care about dependencies, as every single needed line of code is shipped with your application. This ease redistribution and installation a lot, but makes your download larger. You also have to manage yourself dependencies upgrade (which in turn save this hassle from the end-user). With dynamically linked applications, you avoid duplicated code by forcing the use of a global, site wide, code repository (generally /usr/share/php on unix systems). You also transfer dependencies handling to the end-user (and/or the packaging system). Really, this is a choice to make yourself I think.
Things get a little bit more complicated when the components does not follow the naming convention. What I do in this case is just puting them into a separate directory tree called vendor/, which I don't forget to add to my include path of course, then I just manually includes need files. We could have done a one-to-one match between the component's public classes and custom well-named classes, but it's much of a hassle for the benefit I think.
Well that's all for today. I'll try to write some more in the future about application building with the Zend Framework, there are still a lot of things to be said, invented, and discovered :-)




Je ne trouvais pas mon bonheur sur le net (je n'ai peut être pas assez cherché) alors j'ai écrit un petit filtre antispam pour les formulaires en PHP. Il est facile à mettre en oeuvre et ne nécessite pas l'installation de police TrueType sur le serveur.
Vous pouvez faire un test ici
Pour ceux qui sont intéressés, voici le code source ainsi qu'un petit exemple l'utilisant.
[php]
<?php
/**
* Ptitcaptcha : simple php captcha system
*
* @author Jean-Pierre Morfin
* @license Creative Commons By
* @license http://creativecommons.org/licenses/by/2.0/fr/
*/
/* Change it to have a specific encoding ! */
define("PTITCAPTCHA_ENTROPY","what-ever-you-want");
/* Choose length (max 32) */
define("PTITCAPTCHA_LENGTH",5);
$GLOBALS["ptitcaptcha_akey"] = md5(uniqid(rand(), true));
/**
* Helper to generate html form tags
*
*/
class PtitCaptchaHelper
{
/**
* Generate IMG Tag
*
* @param string $baseuri : relative or absolute path to folder containing this file on web
* @return IMG Tag
*/
function generateImgTags($baseuri)
{
return "<a href=\"#\"><img alt=\"???\" title=\"?\"".
" src=\"".$baseuri."ptitcaptcha.php?pck=".$GLOBALS['ptitcaptcha_akey']."\"".
" id=\"ptitcaptcha\"".
" onclick=\"javascript:this.src='".$baseuri."ptitcaptcha.php?pck=".
$GLOBALS['ptitcaptcha_akey'].
"&z='+Math.random();return false;\" /></a>\n";
}
/**
* Generate hidden tag (must be in a form)
*
* @return input hidden tag
*/
function generateHiddenTags()
{
return "<input type=\"hidden\" name=\"ptitcaptcha_key\" value=\"".$GLOBALS['ptitcaptcha_akey']."\"/>";
}
/**
* Generate input tag (must be in a form)
*
* @return input tag
*/
function generateInputTags()
{
return "<input type=\"text\" name=\"ptitcaptcha_entry\" value=\"\"/>";
}
/**
* Check if user input is correct
*
* @return boolean (true=correct, false=incorrect)
*/
function checkCaptcha()
{
if( isset($_POST['ptitcaptcha_entry']) &&
$_POST['ptitcaptcha_entry'] == PtitCaptchaHelper::_getDisplayText($_POST['ptitcaptcha_key']))
{
return true;
}
return false;
}
/**
* Internal function
*
* @param string $pck
* @return string
*/
function _getDisplayText($pck) // internal function
{
$src=md5(PTITCAPTCHA_ENTROPY.$pck);
$txt="";
for($i=0;$i<PTITCAPTCHA_LENGTH;$i++)
$txt.=substr($src,$i*32/PTITCAPTCHA_LENGTH,1);
return $txt;
}
}
// If script called directly : generate image
if(basename($_SERVER["SCRIPT_NAME"])=="ptitcaptcha.php" && isset($_GET["pck"]))
{
$width = PTITCAPTCHA_LENGTH*10+10;
$height = 30;
$image = imagecreatetruecolor($width, $height);
$bgCol = imagecolorallocate($image, rand(128,255), rand(128,255), rand(128,255));
imagefilledrectangle($image,0,0,$width,$height,$bgCol);
$txt = PtitCaptchaHelper::_getDisplayText($_GET["pck"]);
for($c=0;$c<PTITCAPTCHA_LENGTH*2;$c++)
{
$bgCol = imagecolorallocate($image, rand(100,255), rand(100,255), rand(100,255));
$x=rand(0,$width);
$y=rand(0,$height);
$w=rand(5,$width/2);
$h=rand(5,$height/2);
imagefilledrectangle($image,$x,$y,$x+$w,$y+$h,$bgCol);
imagecolordeallocate($image,$bgCol);
}
for($c=0;$c<PTITCAPTCHA_LENGTH;$c++)
{
$txtCol = imagecolorallocate($image, rand(0,128) , rand(0,128), rand(0,128));
imagestring($image,5,5+10*$c,rand(0,10),substr($txt,$c,1),$txtCol);
imagecolordeallocate($image,$txtCol);
}
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
}
[php]
<?php
require("ptitcaptcha.php");
?>
<html>
<head><title>PtitCaptcha</title></head>
<body>
<form action="test.php" method="post">
<?=PtitCaptchaHelper::generateImgTags("./")?>
<?=PtitCaptchaHelper::generateHiddenTags()?>
<?=PtitCaptchaHelper::generateInputTags()?>
<input type="submit" />
</form>
<?php
if(PtitCaptchaHelper::checkCaptcha())
echo "Good";
else
echo "Bad";
?>
</body>
</html>
Lemondeinformatique.fr publie un article sur la conférence utilisateur de MySQL qui a eu lieu hier à Paris. Les évolutions de la version 6 du SGBD open source ont été présentées ainsi que les améliorations envisagées pour la version 7.
Parmi les nouveautés de la version 6, on peut noter l'arrivée du nouveau moteur transactionnel, Falcon, et la possibilité d'effectuer des réplications semi-synchrones voire synchrones.
La version 7 sera axée sur la sécurtié, un besoin essentiel pour les banques : gestion des groupes et des rôles, cryptage transparent des données, audit des données, support des systèmes d'authentification externes, etc.
La version 4.1.3 de TYPO3 est disponible depuis cette semaine. Il s'agit d'une version de maintenance pour apporter des corrections à des bugs.
Parmi les corrections, on note un nombre assez important de points sur htmlArea RTE, à commencer par le passage à la version 1.5.4.
Pour plus d'informations, n'hésitez pas à consulter le Changelog TYPO3 4.1.3.
Cet article, publié à l'origine par l'équipe de Yahoo! Performance, présente quelques règles importantes pour optimiser les performances de votre site web.
De nombreux points sont abordés tels que :
Ces vidéos sont publiés sur les sites de partagent de vidéo. Ce sont des tutoriels enregistrés, des sessions de conférences, des screencast ou encore des slides de conférences.
N'hésitez pas à nous contacter pour signaler tout media qui mérite d'être ajouté à cette liste.
Certaines des applications de Google sont basées sur MySQL, et afin de tirer au mieux profit des performances du SGBD, Google a enrichi le code source de MySQL.
Ces modifications apportées par Google pourraient être intégrées à MySQL dans une version 6.1 prévue pour début 2009, la version 6.0 est attendue fin 2008.
A lire sur LMI
PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.4 et 4.4.7; MySQL 5.0.45 (communauté) et 5.0.48 (entreprise), 4.1.22, ainsi que 5.1.22-beta. Les mises à jour sont recommandées vers ces versions.
4 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Drupal, PHP Project, WAMP et tikiwiki
PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.4 et 4.4.7; MySQL 5.0.45 (communauté) et 5.0.48 (entreprise), 4.1.22, ainsi que 5.1.22-beta. Les mises à jour sont recommandées vers ces versions.
4 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Drupal, PHP Project, WAMP et tikiwiki
Pas évident de distinguer les différences entre ces trois bases de données, le site "Database journal" nous propose un article en deux parties en abordant d'abord les fonctionnalités importantes d'un SGBD.
Voici une interview de David Axmark, co-fondateur de l'éditeur suédois MySQL AB avec Allan Larsson et Michael Widenius où il revient sur la création du serveur de base de données MySQL, devenu « le plus populaire du monde ». Comme il nous le précise, « […] MySQL est utilisé à travers le monde dans plus de 11 millions d'installations et que l'on enregistre environ 50.000 téléchargements par jour »
Différents sujets sont abordés : les développements majeurs de MySQL, les modèles de licence, les parts de marché de MySQL, sa capacité à concurencer les autres SGBD.
Retrouvez l’interview sur NetEco
Requêtes complexes
Oracle peut supporter les requêtes les plus complexes avec quasiment aucune restriction sur le nombre de tables.
Pour MySQL, sa limitation est de 61 tables sur une requête, cependant comme le rappelle l’auteur de l’article, une requête avec autant de tables est peu maniable et il est surtout important de privilégier l’optimisation.
Les versions 8.x de Postgresql supportent les standards SQL92 avec peu de restrictions.
Les Index
Les index sont cruciaux pour l’optimisation de votre base de données. Oracle propose une surabondance de type d’index.
MySQL supporte les index b-tree, hash, fulltext et les index GIS.
Postgresql propose aussi de nombreux index : b-tree and hash, r-tree… Mais ce sont les index « b-tree » qui sont généralement les plus utilisés.
Les audits
Oracle vous permet d’auditer par exemple les insert, update ou delete sur une table, avec plusieurs options simples à activer.
Postgresql propose aussi ces fonctionnalités et reste aussi souple et configurable qu’Oracle.
MySQL ne semble pas fournir cette option mais peut tout à fait être implémenté via des procédures stockées ou des triggers où les informations seront sauvées dans une table.
Type de données
Oracle, MySQL et Postgresql supportent la plupart des champs comme les données textes jusqu’à 4GB.
Par contre, contrairement à Oracle, Postgresql et MySQL supportent le type de données "SET" (ensemble particulier de valeurs) qui reste très pratique à l’usage.
Une autre caractéristique très apprécié sur Postdresql et MySQL est la large variété de champs numériques : du smallint au décimal, real, double et bien d’autres.
Support transactionnel
MySQL embarque depuis bien longtemps un moteur transactionnel dont InnoDB qu’Oracle avait racheté.
Cependant, l’auteur souligne les faibles performances des opérations transactionnelles lorsque la majorité des demandes seraient la consultation de données. En effet, je rappelle que le moteur InnoDB reste performant pour des opérations de lecture/écriture mais beaucoup moins si on souhaite privilégier la lecture.
Conclusion
Il y a beaucoup de paramètres à considérer dans le choix d’une base de données : support de l’éditeur et de la communauté, performance, possibilité d’optimisation et bien sûr le rapport coût/robustesse.
Retrouver l'article complet : Database journal
Retrouver la partie 1
Packtpub (http://packtpub.com/award) a livré son verdict pour le concours des CMS Open Source 2007 (Meilleur CMS,
toutes catégories confondues)
Joomla! finit premier devant Drupal et e107.
http://joomla.org/
http://drupal.org/
http://e107.org
Joomla devrait avoir une nouvelle version d'ici peu, puisque'une version 1.5 RC3 est
sorti au début du mois d'octobre
Drupal 4.7.8 et 5.3 viennent d'être réalisés.
En ce qui concerne e107, une nouvelle version (0.7.10) vient également de sortir...
Les CMS PHP open Source se portent donc pour le mieux...
D'autres catégories peuvent vous intéresser également, comme les projets non basés sur le
couple PHP/mySQL ou les jeunes CMS plein d'avenir...
Proposé par Lolo Irie
Juste un petit mot pour vous informer que le Forum PHP 2007 se tiendra les 21 et 22 novembre prochains à Paris dans le 7ème arrondissement.
Au programme, quelques invités prestigieux comme Rasmus Lerdorf et Andrei Zmievski mais aussi un programme de conférences alléchant :
Côté Symfony, Fabien Potencier animera une session sur la simplification du développement des interfaces aux bases de données.
Bref, un événement d'importance dans le petit monde de PHP, venez nombreux 
Ces vidéos sont publiés sur les sites de partagent de vidéo. Ce sont des tutoriels enregistrés, des sessions de conférences, des screencast ou encore des slides de conférences.
N'hésitez pas à nous contacter pour signaler tout media qui mérite d'être ajouté à cette liste.