﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alexandre JULIEN &#187; PHP</title>
	<atom:link href="http://www.alexandre-julien.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alexandre-julien.com</link>
	<description>Industrialisation des développements, PHP, .NET, jQuery, HTML5, Web, …</description>
	<lastBuildDate>Sun, 22 Jan 2012 20:26:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>8 conseils pour rendre WordPress performant</title>
		<link>http://www.alexandre-julien.com/cms/wordpress-php/8-conseils-pour-rendre-wordpress-performant/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=8-conseils-pour-rendre-wordpress-performant</link>
		<comments>http://www.alexandre-julien.com/cms/wordpress-php/8-conseils-pour-rendre-wordpress-performant/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 22:04:59 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1554</guid>
		<description><![CDATA[
Le célèbre moteur de Blog / CMS WordPress est de plus en plus utilisé dans des contextes de fortes charges (traffic important).
Contrairement à des CMS plus &#171;&#160;professionnels&#160;&#187; comme Drupal, eZPublish, WordPress de manière native est très peu abouti en terme de performances surtout au niveau de la  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/go/wordpress/"><img class="aligncenter size-full wp-image-1309" title="wordpress-logo-stacked-rgb" src="http://www.alexandre-julien.com/wp-content/uploads/2010/04/wordpress-logo-stacked-rgb.png" alt="" width="500" height="310" /></a></p>
<p>Le célèbre moteur de Blog / CMS<a href="http://wordpress.org"> WordPress</a> est de plus en plus utilisé dans des contextes de fortes charges (traffic important).</p>
<p>Contrairement à des CMS plus &laquo;&nbsp;professionnels&nbsp;&raquo; comme Drupal, eZPublish, WordPress de manière native est très peu abouti en terme de performances surtout au niveau de la gestion du cache.</p>
<p>Dans cet article, je vais vous présenter les éléments essentiels pour que votre instance de WordPress soit performante et pour qu&#8217;elle puisse supporter un trafic important en jouant sur la configuration de  Wordpress, l&#8217;utilisation de plugins d&#8217;optimisations, la configuration de PHP et l&#8217;utilisation de logiciels tiers.</p>
<p><span id="more-1554"></span></p>
<h2><span style="line-height: 28px;">1. <span style="text-decoration: underline;">Alléger au maximum votre WordPress</span></span></h2>
<div><a href="http://www.alexandre-julien.com/wp-content/uploads/2011/08/lotus-flower.jpg"><img class="aligncenter size-full wp-image-1569" title="lotus-flower" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/lotus-flower.jpg" alt="" width="410" height="298" /></a></div>
<div>Je pense que tout le monde conviendra que le principal atout de WordPress est sa communauté importante et sa grande quantité de plugins. Aujourd&#8217;hui on trouve des plugins pour tout, ajouter des boutons de partages pour les réseaux sociaux, faire des cloud-tags, des sliders jQuery, ajouter du flash, ajouter de l&#8217;ajax, &#8230; Bref il n&#8217;est pas rare de voir des configurations avec 30 plugins installés et en fonctionnement sur le front-office. Le problème étant que tous ces plugins ont un coût sur les performance de votre WordPress.</div>
<div>Il est plutôt recommandé de minimiser l&#8217;utilisation des plugins utilisés sur le front et de les intégrer directement sur votre thème graphique.</div>
<div>
<h2>2. <span style="text-decoration: underline;">Utiliser un plugin avancé de cache comme WPSuperCache ou W3 Total Cache</span></h2>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2011/08/compteur_image_photo_leader.jpg"><img class="aligncenter size-full wp-image-1577" title="compteur_image_photo_leader" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/compteur_image_photo_leader.jpg" alt="" width="536" height="357" /></a></p>
<div>Nativement le système de cache WordPress ne permet pas d&#8217;aller bien loin, néanmoins il sert surtout à fournir une API de Cache pour les plugins et pour utiliser des systèmes de cache plus poussés.</div>
<div>Deux systèmes de cache sortent du lot : WPSuperCache et W3 Total Cache.</div>
<div>
<ul>
<li><a href="http://wordpress.org/extend/plugins/wp-super-cache/">WPSuperCache</a> offre principalement des fonctionnalités permettant de produire des pages le plus statiques possibles : générations de pages HTML, de CSS et de javascript. Il permet également d&#8217;utiliser un CDN (site miroir pour vos ressources statiques) ce qui convient à une grande majorité de blog et de sites. Il possède également des options de &laquo;&nbsp;minifier&nbsp;&raquo; qui permet de réduire et d&#8217;assembler des ressources JS et CSS en un seul fichier compressé. Il convient à beaucoup de sites, surtout pour ceux qui sont hébergés sur un système mutualisé.</li>
<li><a href="http://wordpress.org/extend/plugins/w3-total-cache/">W3 Total Cache</a> est quant à lui un système de cache beaucoup plus complet et sophistiqué. Il possède des fonctionnalités similaires à WPSuperCache mais offre une véritable valeur ajoutée sur la mise en cache de données. Il permet d’interagir avec avec des serveurs de cache locaux (APC, eAccelator, XCache) ou distribués (memcached). Nous reviendrons sur ce point un peu plus tard.</li>
</ul>
</div>
<h2>3. <span style="text-decoration: underline;">Un WordPress est performant avec un PHP Performant</span></h2>
<p><span style="text-decoration: underline;"><a href="http://www.alexandre-julien.com/go/php/"><img class="aligncenter size-medium wp-image-1578" title="logo-php" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/logo-php-379x199.png" alt="" width="379" height="199" /></a><br />
</span></p>
<p>Il est vivement conseillé d&#8217;utiliser les versions les plus récentes de PHP sur votre instance WordPress. Par exemple, la version 5.3.x de<a href="http://php.net"> PHP</a> consomme facilement 40 % de mémoire en mois et peu faire gagner 30 % de performances par rapport à la version 5.2.x.</p>
<p>Les versions 3.x de WordPress supportent très bien les dernières versions de PHP donc n&#8217;hésitez pas à utiliser les versions les plus récentes !</p>
<h2>3. <span style="text-decoration: underline;">Utiliser un accélérateur d&#8217;OPCode</span></h2>
<p>PHP est un langage interprété et donc par conséquent il compile le code que vous vous apprêtez à exécuter, puis le déroule. Le problème étant est que PHP recompilera ce code autant de fois que vous l&#8217;exécutez si vous l&#8217;utilisez pas un système de cache sur le bytecode produit.</p>
<p>Il est existe plusieurs donc 3 principaux qui sont libres :</p>
<p>- <a href="http://pecl.php.net/package/APC">APC (Advanced PHP Cache)</a> : excellent, libre, fiable, stable, entretenu par les fondateurs de PHP, c&#8217;est le choix que je conseille le plus souvent.</p>
<p>- <a href="http://sourceforge.net/projects/eaccelerator/">eAccelerator</a> : un peu plus performant que APC (environ 5% plus rapide en moyenne)</p>
<p>- <a href="http://xcache.lighttpd.net/">XCache</a></p>
<p>- <a href="http://www.zend.com/fr/products/server/">Zend Optimizer+ </a>: fonctionne de manière distribuée mais il est embarqué dans le serveur d&#8217;application Zend Server uniquement.</p>
<p>Un cache de compilation peut facilement vous réduire de moitié l&#8217;utilisation de la RAM et vous faire gagner des performances non négligeables.</p>
<h2>4. <span style="text-decoration: underline;">Utiliser un serveur de cache pour vos données</span></h2>
<p><span style="text-decoration: underline;"><a href="http://www.alexandre-julien.com/go/memcached/"><img class="aligncenter size-full wp-image-1579" title="memcached-logo" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/memcached-logo.jpg" alt="" width="365" height="143" /></a><br />
</span></p>
<p>Stocker les données sur MySQL c&#8217;est bien, les mettre sur un proxy de cache c&#8217;est mieux !</p>
<p>Autre astuce pour réduire le temps d&#8217;accès à vos données est de passer par un serveur de cache. Par défaut les caches de compilation comme <a href="http://pecl.php.net/package/APC">APC</a>, <a href="http://sourceforge.net/projects/eaccelerator/">eAccelerator</a> et <a href="http://xcache.lighttpd.net/">XCache</a> permettent de mettre de faire cela de manière locale.</p>
<p>Toutefois la meilleure solution et la plus performante si votre installation vous le permet est d&#8217;utiliser &laquo;&nbsp;memcached&nbsp;&raquo;. Il s&#8217;agit d&#8217;un serveur de cache écrit en C++ initialement par LiveJournal pour stocker des données directement dans la RAM avec un système simple de clé =&gt; valeur, très rudimentaire mais extrêmement performant, il s&#8217;agit du serveur de cache le plus utilisé. Facebook, Twitter, nombres d&#8217;e-commerce, ne pourraient tourner sans.</p>
<h2>5. <span style="text-decoration: underline;">Utiliser un MySQL performant et bien maintenu</span></h2>
<p><span style="text-decoration: underline;"><a href="http://www.alexandre-julien.com/go/mysql/"><img class="aligncenter size-medium wp-image-1580" title="mysql_logo" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/mysql_logo-386x200.png" alt="" width="386" height="200" /></a><br />
</span></p>
<p>Installer les versions les plus récentes possibles de MySQL pour accroître les performances de l&#8217;application là où le cache ne peut pas agir notamment sur l&#8217;interface d&#8217;administration.</p>
<p>MySQL 5.5 a des performances relativement plus importantes que la version 5.1 donc il vaut mieux se tourner vers les dernières versions, ou encore mieux se tourner vers <a href="http://mariadb.org/">MariaDB</a> (fork de MySQL 6 non approuvé par Oracle).</p>
<p>Penser également à effectuer régulièrement (1 fois par jour) des optimisations des tables, pour cela des plusieurs comme WP DB Manager vous permette d&#8217;inclure cette maintenance dans les tâches de WordPress.</p>
<h2>6. <span style="text-decoration: underline;">Utiliser un serveur Web léger pour vos fichiers statiques</span></h2>
<p><span style="text-decoration: underline;"><a href="http://www.alexandre-julien.com/go/nginx/"><img class="aligncenter size-full wp-image-1581" title="nginx" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/nginx.jpg" alt="" width="650" height="200" /></a><br />
</span></p>
<p>Apache est un serveur Web extrêmement stable et complet, cependant, il a tendance à être assez lourd lorsque l&#8217;on a une forte charge sur son site Web. Ceci est notamment due au fait que Apache crée un processus léger (thread) pour chaque requête HTTP, si votre serveur vous le permet, je vous recommande d&#8217;utiliser un serveur Web léger en plus d&#8217;Apache pour tous vos fichiers statiques (HTML, CSS, JS, images, flash, &#8230;) en le configurant comme un proxy sur Apache. Le plus connu d&#8217;entre eux qui a fait ses preuves est <a href="http://nginx.org/">NGINX</a>. Il sera beaucoup moins gourmand que Apache et vous réduira la charge de la machine si vous avez une forte audience. En moyenne, un site WordPress qui utilise un système de cache, distribue 90% de fichiers statiques donc cela vaut le coup de se séparer d&#8217;Apache pour un serveur plus puissant !</p>
<p><strong><span style="color: #ff0000;">Les 3 derniers conseils s&#8217;adressent majoritairement à des sites à forte audience de plusieurs dizaines milliers de visites quotidienne.</span></strong></p>
<h2>7. <span style="text-decoration: underline;">Utiliser un CDN (Content Delivery Network)</span></h2>
<p><span style="text-decoration: underline;"><a href="http://www.alexandre-julien.com/go/cdn/"><img class="aligncenter size-full wp-image-1583" title="globe_3" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/globe_3.jpg" alt="" width="381" height="316" /></a><br />
</span></p>
<p>Dans une optique de distribuer le plus rapidement possibles vos ressources statiques et d&#8217;économiser la bande passante, il peut être intéressant d&#8217;utiliser un CDN pour faire cette distribution. Le but d&#8217;un CDN est de jouer le rôle d&#8217;un site miroir mais uniquement pour vos fichiers statiques. De plus la plupart des CDN offrent un réseau décentralisé de distribution de données avec des serveurs hébergés partout dans le monde qui sont utilisés en fonction de la location de l&#8217;utilisateur. Très pratiques pour les sites internationaux qui ont une audience importante sur divers continents !</p>
<p>Il en existe toute une panoplie, donc <a href="http://maxcdn.com/">MAXCDN</a>.</p>
<h2>8. <span style="text-decoration: underline;">Utiliser un load-balancer et un environnement distribué</span></h2>
<p><span style="text-decoration: underline;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2011/08/RB100.gif"><img class="aligncenter size-full wp-image-1584" title="cluster" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/RB100.gif" alt="" width="300" height="229" /></a><br />
</span></p>
<p>Nombreux sites d&#8217;e-commerce sont contraints de tourner sur plusieurs machines. Pour les CMS, ce cas de figure est plus rare, mais se présente sur des sites à forte charge. Opter pour un environnement distribué coûte moins cher, est plus sûre et plus rentable que d&#8217;acheter une machine plus puissante.</p>
<p>Pour mettre cela en place il vous faudra un équipement réseau adapté : le load balancer (répartiteur de charge) qui permet de rediriger le trafic de manière équitable sur &laquo;&nbsp;n&nbsp;&raquo; machines.</p>
<p>Voici la structure standard d&#8217;une architecture PHP simple avec un load balancer :</p>
<p>Dans ce cas, il est impératif de faire attention à certaines choses :</p>
<p>1) Ne pas stocker les sessions en local : utiliser un NAS pour y stocker les fichiers de sessions, ou votre base de données ou encore mieux utiliser Memcached dans votre configuration php.ini.</p>
<p>2) Privilégier un cache de données avec Memcached ou équivalent plutôt qu&#8217;avec un système de cache local tel que APC.</p>
<p>3) Penser à partager ou répliquer les ressources du répertoire &laquo;&nbsp;wp-includes&nbsp;&raquo; de WordPress.</p>
<p>4) Utiliser un distributeur de code source comme rsync pour assurer que vous avez bien les mêmes sources dans les différents serveurs frontaux.</p>
<p>Voilà autant de piste à explorer pour optimiser votre moteur de blog favori, la plupart des optimisations ne sont franchement pas complexes sauf peut être la mise en reverse proxy de nginx sur Apache mais on trouve sur le Web de nombreuses ressources à ce sujet, notamment sur le site de Korben : <a href="http://korben.info/configurer-nginx-reverse-proxy.html">http://korben.info/configurer-nginx-reverse-proxy.html</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/cms/wordpress-php/8-conseils-pour-rendre-wordpress-performant/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend Framework 2.0 : première version de développement</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-2-0-premiere-version-de-developpement/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-2-0-premiere-version-de-developpement</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-2-0-premiere-version-de-developpement/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 20:19:28 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[zend framework 2]]></category>
		<category><![CDATA[zf]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1526</guid>
		<description><![CDATA[
Zend vient de diffuser une première version de développement de Zend Framework 2.0 afin de faire découvrir les quelques nouveautés de la bibliothèque PHP5.
Au programme, tout comme Symfony 2, Zend Framework 2.0 sera entièrement conçu pour PHP 5.3 avec les &#171;&#160;namespaces&#160;&#187;.

Toutefois rien de bien  [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/08/logo-zend-framework.jpg"><img class="aligncenter size-full wp-image-1528" title="logo-zend-framework" src="http://www.alexandre-julien.com/wp-content/uploads/2010/08/logo-zend-framework.jpg" alt="" width="282" height="190" /></a></p>
<p>Zend vient de diffuser une première version de développement de Zend Framework 2.0 afin de faire découvrir les quelques nouveautés de la bibliothèque PHP5.</p>
<p>Au programme, tout comme Symfony 2, Zend Framework 2.0 sera entièrement conçu pour PHP 5.3 avec les &laquo;&nbsp;namespaces&nbsp;&raquo;.</p>
<p><span id="more-1526"></span></p>
<div id="attachment_1529" class="wp-caption aligncenter" style="width: 680px"><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/08/zf-2.0.png"><img class="size-full wp-image-1529" title="Zend Framework 2.0 : Zend Tool" src="http://www.alexandre-julien.com/wp-content/uploads/2010/08/zf-2.0.png" alt="" width="670" height="727" /></a><p class="wp-caption-text">Pas de nouvelle pour Zend Tool à l&#39;heure actuelle</p></div>
<p>Toutefois rien de bien nouveau sur cette version de développement. Elle correspondant principalement aux librairies de ZF 1.10.</p>
<p>Les seuls nouveautés concernent apparemment les tests unitaires qui seraient plus simplifiés, une ré-écriture totale de Zend_Session ainsi que l&#8217;ajout d&#8217;une nouvelle librairie Zend_stdlib permettant d&#8217;appeller les librairies standard de PHP d&#8217;une façon plus orienté objet et plus harmonisée.</p>
<div id="attachment_1530" class="wp-caption aligncenter" style="width: 1034px"><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/08/zf-2.0-config.png"><img class="size-large wp-image-1530" title="Zend Framework 2.0 : Zend Application" src="http://www.alexandre-julien.com/wp-content/uploads/2010/08/zf-2.0-config-1024x733.png" alt="" width="1024" height="733" /></a><p class="wp-caption-text">Structure identique à Zend Framework 1.10</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-2-0-premiere-version-de-developpement/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 3.0 : nouveautés du célèbre moteur de blog</title>
		<link>http://www.alexandre-julien.com/cms/wordpress-3-0-nouveautes-du-celebre-moteur-de-blog/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wordpress-3-0-nouveautes-du-celebre-moteur-de-blog</link>
		<comments>http://www.alexandre-julien.com/cms/wordpress-3-0-nouveautes-du-celebre-moteur-de-blog/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 20:18:11 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1397</guid>
		<description><![CDATA[
WordPress 3.0 vient de sortir en version finale. Il est disponible sur le site officiel international de WordPress.org en anglais et également en version française sur le site wordpress-fr.org.
Les nouveautés sont nombreuses :
- Le compte administrateur par défaut peut être nommer autrement que  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/04/wordpress-logo-stacked-rgb.png"><img class="aligncenter size-full wp-image-1309" title="wordpress-logo-stacked-rgb" src="http://www.alexandre-julien.com/wp-content/uploads/2010/04/wordpress-logo-stacked-rgb.png" alt="" width="500" height="310" /></a></p>
<p>WordPress 3.0 vient de sortir en version finale. Il est disponible sur le site officiel international de WordPress.org en anglais et également en version française sur le site wordpress-fr.org.</p>
<p style="text-decoration: underline;">Les nouveautés sont nombreuses :</p>
<p>- <strong>Le compte administrateur</strong> par défaut peut être nommer autrement que &laquo;&nbsp;admin&nbsp;&raquo; et on saisit le mot de passe dès l&#8217;installation.<br />
-<strong> Les posts personnalisés</strong> : on peut créer des types de posts personnalisés et les paramètres pour créer une sorte de contexte autour d&#8217;un article.<br />
-<strong> </strong><strong>La gestion des menus</strong> : on a plus à choisir entre les catégories du blog et les pages CMS. On peut complètement administrer le menu depuis un manager très ergonomique.<br />
- <strong>Multi-sites</strong> : aurevoir WordPress MU et bonjour WordPress 3, vous l&#8217;aurez compris, WordPress 3.0 est nativement multi-site, plus besoin de passer par WordPress MU, un grand soulagement pour les développeurs de plugins qui étaient obligés de se soucier du cas de WordPress MU.<br />
- <strong>Nouveau thème par défaut</strong> : le Twenty-Ten qui est entièrement paramétrable, il propose un header modifiable, un background modifiable, un menu dynamique, &#8230;</p>
<p><a title="Wordpress 3.0 - FR" href="http://fr.wordpress.org/latest-fr_FR.zip" target="_blank">Télécharger WordPress 3.0 (version Française)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/cms/wordpress-3-0-nouveautes-du-celebre-moteur-de-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 3.0 : nouveautés du célèbre moteur de blog</title>
		<link>http://www.alexandre-julien.com/cms/wordpress-3-0-nouveautes-du-celebre-moteur-de-blog/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wordpress-3-0-nouveautes-du-celebre-moteur-de-blog</link>
		<comments>http://www.alexandre-julien.com/cms/wordpress-3-0-nouveautes-du-celebre-moteur-de-blog/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 20:18:11 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1397</guid>
		<description><![CDATA[
WordPress 3.0 vient de sortir en version finale. Il est disponible sur le site officiel international de WordPress.org en anglais et également en version française sur le site wordpress-fr.org.
Les nouveautés sont nombreuses :
- Le compte administrateur par défaut peut être nommer autrement que  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/04/wordpress-logo-stacked-rgb.png"><img class="aligncenter size-full wp-image-1309" title="wordpress-logo-stacked-rgb" src="http://www.alexandre-julien.com/wp-content/uploads/2010/04/wordpress-logo-stacked-rgb.png" alt="" width="500" height="310" /></a></p>
<p>WordPress 3.0 vient de sortir en version finale. Il est disponible sur le site officiel international de WordPress.org en anglais et également en version française sur le site wordpress-fr.org.</p>
<p style="text-decoration: underline;">Les nouveautés sont nombreuses :</p>
<p>- <strong>Le compte administrateur</strong> par défaut peut être nommer autrement que &laquo;&nbsp;admin&nbsp;&raquo; et on saisit le mot de passe dès l&#8217;installation.<br />
-<strong> Les posts personnalisés</strong> : on peut créer des types de posts personnalisés et les paramètres pour créer une sorte de contexte autour d&#8217;un article.<br />
-<strong> </strong><strong>La gestion des menus</strong> : on a plus à choisir entre les catégories du blog et les pages CMS. On peut complètement administrer le menu depuis un manager très ergonomique.<br />
- <strong>Multi-sites</strong> : aurevoir WordPress MU et bonjour WordPress 3, vous l&#8217;aurez compris, WordPress 3.0 est nativement multi-site, plus besoin de passer par WordPress MU, un grand soulagement pour les développeurs de plugins qui étaient obligés de se soucier du cas de WordPress MU.<br />
- <strong>Nouveau thème par défaut</strong> : le Twenty-Ten qui est entièrement paramétrable, il propose un header modifiable, un background modifiable, un menu dynamique, &#8230;</p>
<p><a title="Wordpress 3.0 - FR" href="http://fr.wordpress.org/latest-fr_FR.zip" target="_blank">Télécharger WordPress 3.0 (version Française)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/cms/wordpress-3-0-nouveautes-du-celebre-moteur-de-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework #6 : Utilisation de Zend_Navigation</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-6-utilisation-de-zend_navigation/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-6-utilisation-de-zend_navigation</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-6-utilisation-de-zend_navigation/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 15:54:54 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[zend_navigation]]></category>
		<category><![CDATA[zf]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1197</guid>
		<description><![CDATA[
Il est très utile dans une application Web d&#8217;avoir un système de navigation capable de cartographier les pages d&#8217;un site et d&#8217;en déduire des plan de site, fils d&#8217;arianes, menus, sitemap.xml, &#8230;
Zend_Navigation a été conçu dans cette optique, il propose un système de gestion de pages et des helpers  [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/banner_zf_logo_v1_9.jpg"><img class="aligncenter" title="Zend Framework 1.9.2" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/banner_zf_logo_v1_9.jpg" alt="" width="429" height="255" /></a></p>
<p>Il est très utile dans une application Web d&#8217;avoir un système de navigation capable de cartographier les pages d&#8217;un site et d&#8217;en déduire des plan de site, fils d&#8217;arianes, menus, sitemap.xml, &#8230;</p>
<p>Zend_Navigation a été conçu dans cette optique, il propose un système de gestion de pages et des helpers pour générer des composants graphiques.</p>
<p><span id="more-1197"></span></p>
<p>Nous allons voir dans ce tutoriel une façon simple de mettre en place Zend_Navigation :</p>
<p>Tout d&#8217;abord il nous faut définir la navigation et le conteneur de donnée. Dans notre cas, on stockera l&#8217;arborescence dans un fichier XML appellé &#8216;navigation.xml&#8217; dans le répertoire &laquo;&nbsp;config&nbsp;&raquo;.</p>
<pre class="brush: php; title: ; notranslate">
protected function _initNavigation() {
$this-&gt;bootstrap('layout');
$layout = $this-&gt;getResource('layout');
$view = $layout-&gt;getView();
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$container = new Zend_Navigation($config);
$view-&gt;navigation($container);
}
&lt;div&gt;
</pre>
<p>Ensuite, on remplit le fichier &laquo;&nbsp;navigation.xml&nbsp;&raquo; pour créer notre navigation, on y indiquera la page d&#8217;accueil et une page de listing.<br />
On se basera sur le système de routes pour donner le lien.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;configdata&gt;
 &lt;nav&gt;
 &lt;home&gt;
 &lt;label&gt;Accueil&lt;/label&gt;
 &lt;route&gt;index&lt;/route&gt;
 &lt;pages&gt;
 &lt;listing&gt;
 &lt;label&gt;Liste CRUD&lt;/label&gt;
 &lt;route&gt;listing&lt;/route&gt;
 &lt;/listing&gt;
&lt;/pages&gt;
&lt;/home&gt;
&lt;/nav&gt;
&lt;/configdata&gt;
</pre>
<p>Et voilà la mise en place de Zend_Navigation est fini. Il ne vous reste plus qu&#8217;à utiliser des helpers pour appeler vos composants :<br />
Pour le breadcrumb par exemple :</p>
<pre class="brush: php; title: ; notranslate">
$this-&gt;navigation()-&gt;breadcrumbs()-&gt;setSeparator(&quot; -&gt; &quot;);
</pre>
<p>Il existe d&#8217;autres façon d&#8217;intégrer Zend_Navigation sur une application notamment en intervenant directement sur le code. Cette méthode reste très simple mais très fonctionnelle. On y pourra voir des améliorations comme mettre en place un cache pour augmenter les performances.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-6-utilisation-de-zend_navigation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Documentation PHP accessible depuis Google Chrome grâce à une petite extension</title>
		<link>http://www.alexandre-julien.com/navigateurs/documentation-php-accessible-depuis-google-chrome-grace-a-une-petite-extension/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=documentation-php-accessible-depuis-google-chrome-grace-a-une-petite-extension</link>
		<comments>http://www.alexandre-julien.com/navigateurs/documentation-php-accessible-depuis-google-chrome-grace-a-une-petite-extension/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 20:50:10 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Navigateurs]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[google chrome]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1187</guid>
		<description><![CDATA[Voici une petite extension sympa sur le navigateur Google Chrome : il s&#8217;agit d&#8217;un petit moteur de recherche sur le site PHP.net permettant d&#8217;accéder directement à la documentation officielle de PHP à partir du navigateur. Tout bête, mais très pratique !
L&#8217;extension est téléchargeable à cette  [...]]]></description>
			<content:encoded><![CDATA[<p>Voici une petite extension sympa sur le navigateur Google Chrome : il s&#8217;agit d&#8217;un petit moteur de recherche sur le site PHP.net permettant d&#8217;accéder directement à la documentation officielle de PHP à partir du navigateur. Tout bête, mais très pratique !</p>
<p>L&#8217;extension est téléchargeable à cette adresse : <a href="https://chrome.google.com/extensions/detail/kfiahljocaflpaiopilgpiochncgdnhd">https://chrome.google.com/extensions/detail/kfiahljocaflpaiopilgpiochncgdnhd</a></p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/03/Chrome-PHP-Documentation.png"><img class="aligncenter size-medium wp-image-1190" title="Chrome PHP Documentation" src="http://www.alexandre-julien.com/wp-content/uploads/2010/03/Chrome-PHP-Documentation-331x200.png" alt="" width="331" height="200" /></a><span id="more-1187"></span>Les résultats de recherche sont identiques à ceux du moteur de recherche de PHP.NET</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/03/Chrome-PHP-Documentation-Result.png"><img class="aligncenter size-medium wp-image-1191" title="Chrome PHP Documentation Result" src="http://www.alexandre-julien.com/wp-content/uploads/2010/03/Chrome-PHP-Documentation-Result-340x200.png" alt="" width="340" height="200" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/navigateurs/documentation-php-accessible-depuis-google-chrome-grace-a-une-petite-extension/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HipHop : quand Facebook revoit la runtime de PHP avec un compilateur C++ &#8230;</title>
		<link>http://www.alexandre-julien.com/php/hiphop-quand-facebook-revoit-la-runtime-de-php-avec-un-compilateur-c/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hiphop-quand-facebook-revoit-la-runtime-de-php-avec-un-compilateur-c</link>
		<comments>http://www.alexandre-julien.com/php/hiphop-quand-facebook-revoit-la-runtime-de-php-avec-un-compilateur-c/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 10:21:31 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Facebook]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Réseaux sociaux]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[compilateur]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[g++]]></category>
		<category><![CDATA[hiphop]]></category>
		<category><![CDATA[runtime]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1161</guid>
		<description><![CDATA[
Une rumeur circule depuis quelques temps, à propos d&#8217;une ré-inventation de PHP par Facebook pour optimiser les performances de leurs applications. Cette dernière a été désormais par la firme, un ingénieur a travaillé sur une refonte de la runtime de PHP afin d&#8217;avoir un résultat compilé et non plus  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/02/facebook.jpg"><img class="aligncenter size-full wp-image-1169" title="facebook" src="http://www.alexandre-julien.com/wp-content/uploads/2010/02/facebook.jpg" alt="" width="640" height="212" /></a></p>
<p>Une rumeur circule depuis quelques temps, à propos d&#8217;une ré-inventation de PHP par Facebook pour optimiser les performances de leurs applications. Cette dernière a été désormais par la firme, un ingénieur a travaillé sur une refonte de la runtime de PHP afin d&#8217;avoir un résultat compilé et non plus interprété comme c&#8217;est le cas actuellement avec la runtime de Zend.</p>
<p>Le projet s&#8217;appelle HipHop et il s&#8217;appuie non pas sur un compilateur mais plutôt sur un transcodeur qui permet de passer d&#8217;un code PHP à un code C++ très optimisé et ce dernier pouvant être compilé avec g++.</p>
<p>Ce travail a mis plus de 2 ans avant de voir le jour et ce travail verra le jour très bientôt dans un projet Open Source sous licence Creative-Commons.</p>
<p><span id="more-1161"></span></p>
<p>Voici le processus de HipPop pour optimiser une application PHP :</p>
<p style="text-align: center;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/02/HipHop_transformation_process.png"><img class="aligncenter size-full wp-image-1165" title="HipHop_transformation_process" src="http://www.alexandre-julien.com/wp-content/uploads/2010/02/HipHop_transformation_process.png" alt="" width="645" height="403" /></a></p>
<p>Il s&#8217;agit d&#8217;une transformation de code qui part de sources PHP, le code est parsé et ensuite optimisé avant d&#8217;être traduit en C++. Le code C++ est lui aussi optimiser et ensuite il est compilé via G++ en langage machine.</p>
<p>Certaines fonctions trop gourmande comme &laquo;&nbsp;eval()&nbsp;&raquo; ne seront pas supportées mais la globalité du langage est supportée.</p>
<p>Les essais de Facebook révèleraient un gain de performance de l&#8217;ordre de 80 % coté processeur et l&#8217;application Facebook elle-même devrait migrer sur cette technologie d&#8217;ici quelques semaines ou quelques mois. Ils devraient réduire de 50 % l&#8217;utilisation du CPU pour héberger Facebook ce qui constitue une économie intéressante puisqu&#8217;au dernières nouvelles Facebook, utiliserait plus 30 000 machines pour héberger son réseau social.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/hiphop-quand-facebook-revoit-la-runtime-de-php-avec-un-compilateur-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework #5 : Routing et UrlRewriting avec Zend_Controller</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-5-routing-et-urlrewriting-avec-zend_controller/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-5-routing-et-urlrewriting-avec-zend_controller</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-5-routing-et-urlrewriting-avec-zend_controller/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 18:57:51 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Router]]></category>
		<category><![CDATA[UrlRewriting]]></category>
		<category><![CDATA[zend_controller]]></category>
		<category><![CDATA[zf]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1147</guid>
		<description><![CDATA[Un point essentiel à ne pas négliger sur une application Web est la ré-écriture d&#8217;URL via un système de routeur. Pourquoi ré-écrire des Urls alors que l&#8217;utilisateur n&#8217;en tape jamais directement ? Et bien tout simplement, parce que l&#8217;utilisateur ne comprend pas forcement où il se trouve sur le site  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/banner_zf_logo_v1_9.jpg"><img class="aligncenter size-full wp-image-685" title="Zend Framework 1.9.2" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/banner_zf_logo_v1_9.jpg" alt="" /></a>Un point essentiel à ne pas négliger sur une application Web est la ré-écriture d&#8217;URL via un système de routeur. Pourquoi ré-écrire des Urls alors que l&#8217;utilisateur n&#8217;en tape jamais directement ? Et bien tout simplement, parce que l&#8217;utilisateur ne comprend pas forcement où il se trouve sur le site en regardant une Url de type &laquo;&nbsp;index.php?category=43&amp;id=32&amp;session=ad4zcf43lpo&amp;page=322214421&#8243;. Une url comme &laquo;&nbsp;maboutique.com/composants/processeurs/intel/liste-des-processeurs.html&nbsp;&raquo; est beaucoup plus parlante.</p>
<p>La preuve c&#8217;est qu&#8217; il s&#8217;agit du 3ème point qui influe le plus le référencement d&#8217;une page. Et puis on peut également avoir besoin internationaliser ses urls.</p>
<p>Zend Framework possède un routeur, qui permet de manipuler plus facilement les liens entre les pages au sein d&#8217;une application et également de faire de la réécriture.</p>
<p>Cette étape se fait au sein du Bootstrap d&#8217;une application Zend Framework et grâce à Zend_Controller.</p>
<p><span id="more-1147"></span></p>
<p>Il faut tout d&#8217;abord surcharger la méthode _initAutoLoad() du Bootstrap et récupérer l&#8217;instance de Zend_Controller</p>
<pre class="brush: php; title: ; notranslate">

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

// Surcharge de _initAutoLoad
protected function _initAutoload()

{
$moduleLoader = new Zend_Application_Module_Autoloader(array('namespace'=&gt;'', 'basePath'=&gt;APPLICATION_PATH));

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController-&gt;getRouter();

return $moduleLoader;
}

}
</pre>
<p>Ensuite il suffit simplement de créer ses routes et de les rajouter au routeur du contrôleur.<br />
Pour cela on a plusieurs possibilités, on peut créer des routes statiques, des routes basées sur les modules, etc &#8230;<br />
Le plus efficace est de créer des routes à partir d&#8217;URL pré-formatées grâce à des expressions régulières.<br />
On devra donc créer des instances de la classe Zend_Controller_Router_Route_Regex.</p>
<p>On la construira avec les arguments suivants :</p>
<p>1) La route : sous forme d&#8217;expression régulière (exemple : &#8216;produits/(.+)/(.+)/article-(.+)-(.+).html&#8217;)<br />
2) Le lien MVC : il faut donner les éléments statiques pour accéder à la page, c&#8217;est à dire le module, le contrôleur et l&#8217;action cible (exemple : array(&#8216;module&#8217; =&gt; &#8216;default&#8217;, &#8216;controller&#8217; =&gt; &#8216;products&#8217;, &#8216;action&#8217; =&gt; &#8216;showProduct&#8217;))<br />
3)Le mapping des paramètre : on donne dans l&#8217;ordre le nom des paramètres que l&#8217;on passera dans l&#8217;Url (exemple : array(1 =&gt; &#8216;category&#8217;, 2=&gt; &#8216;subcategory&#8217;, 3 =&gt; &#8216;product_title&#8217;, 4 =&gt; &#8216;product_ref&#8217;))<br />
4) Le chemin inverse : une version de l&#8217;url interprétable par la fonction sprintf() de PHP (exemple : &#8216;produits/%s/%s/article-%s-%d.html&#8217;)</p>
<pre class="brush: php; title: ; notranslate">

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

// Surcharge de _initAutoLoad
protected function _initAutoload()

{
$moduleLoader = new Zend_Application_Module_Autoloader(array('namespace'=&gt;'', 'basePath'=&gt;APPLICATION_PATH));

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController-&gt;getRouter();

// Nouvelle route pour accéder à produit
$article = new Zend_Controller_Router_Route_Regex(
 'produits/(.+)/(.+)/article-(.+)-(.+).html',
 array('module' =&gt; 'default', 'controller' =&gt; 'products', 'action' =&gt; 'showProduct'),
 array(1 =&gt; 'category', 2=&gt; 'subcategory', 3 =&gt; 'product_title', 4 =&gt; 'product_ref'),
 'produits/%s/%s/article-%s-%d.html');
$router-&gt;addRoute($article);

return $moduleLoader;
}

}
</pre>
<p>Ainsi on pourra créer et appeler une url de type : &laquo;&nbsp;www.maboutique.com/produits/processeurs/dual-core/article-intelcore2duo-PI5421.html&nbsp;&raquo;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-5-routing-et-urlrewriting-avec-zend_controller/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Netbeans 6.8 : IDE pour développement PHP Symfony</title>
		<link>http://www.alexandre-julien.com/php/symfony/netbeans-6-8-ide-pour-developpement-php-symfony/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=netbeans-6-8-ide-pour-developpement-php-symfony</link>
		<comments>http://www.alexandre-julien.com/php/symfony/netbeans-6-8-ide-pour-developpement-php-symfony/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 09:40:03 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[IDE]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=962</guid>
		<description><![CDATA[
A l&#8217;heure où les environnements de développement pour PHP sont majoritairement basé sur Eclipse : PHP Development Tools, Aptana et Zend Studio, Netbeans quant à lui se faisait très discret dans le domaine des IDE PHP.
Voici la nouvelle version de NetBeans en release 6.8 avec des outils de  [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-963" title="Netbeans68_logo" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/Netbeans68_logo.png" alt="" /></p>
<p>A l&#8217;heure où les environnements de développement pour PHP sont majoritairement basé sur Eclipse : PHP Development Tools, Aptana et Zend Studio, Netbeans quant à lui se faisait très discret dans le domaine des IDE PHP.</p>
<p>Voici la nouvelle version de NetBeans en release 6.8 avec des outils de développement pour PHP 5 fort intéressants :</p>
<p><strong>Tout d&#8217;abord il existe une version de l&#8217;IDE entièrement dédié au développement PHP comme c&#8217;est le cas de la version All-In-One d&#8217;Eclipse.</strong></p>
<p><strong>- Il supporte également la version 5.3 de PHP</strong></p>
<p><strong>- Débugage de PHP dans l&#8217;IDE</strong></p>
<p><strong>- Exécution et pilotage de test-unitaires mis en place avec PHPUnit</strong></p>
<p><strong>- Support du Framework Symfony (autocompletion, exécution d&#8217;actions en ligne de commande depuis une console dans l&#8217;ide, support du YAML, &#8230;)</strong></p>
<p>Nous allons nous intéresser au support de Symfony dans l&#8217;IDE et voir si son usage facile le développement avec le framework PHP français !</p>
<p><span id="more-962"></span></p>
<p style="text-align: center;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/Netbeans_1_capture1.png"><img class="aligncenter size-large wp-image-983" title="Netbeans_1_capture" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/Netbeans_1_capture1-1024x612.png" alt="" width="614" height="367" /></a></p>
<p style="text-align: left;">L&#8217;interface de NetBeans 6.8 est relativement simple, ergonome et traduite dans toutes les langues pour les non-anglophones.</p>
<p style="text-align: left;">
<h2 style="text-align: left;"><span style="text-decoration: underline;">1. Paramétrage de NetBeans pour PHP</span></h2>
<p>Le paramétrage de NetBeans se fait en 3 étapes :</p>
<p>- Le chemin de l&#8217;exécutable &laquo;&nbsp;php.exe&nbsp;&raquo;<br />
- Le chemin du script de PHPUnit (facultatif)<br />
- Le chemin de la sandbox de symfony (symfony.bat ou symfony.sh)</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/config_php.png"><img class="aligncenter size-full wp-image-978" title="config_php" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/config_php.png" alt="" width="757" height="648" /></a></p>
<p>Vous devez spécifier le chemin de votre serveur PHP, c&#8217;est à dire<strong> l&#8217;emplacement du &laquo;&nbsp;php.exe&nbsp;&raquo;</strong> de votre installation pour utiliser les fonctions de débugage, compilation et exécution de code PHP en &laquo;&nbsp;Command Line Interface&nbsp;&raquo;. Dans mon exemple, je donne le chemin d&#8217;accès de mon installation WAMP.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/config_symfony_sandbox.png"><img class="aligncenter size-full wp-image-980" title="config_symfony_sandbox" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/config_symfony_sandbox.png" alt="" width="759" height="643" /></a></p>
<p>En suite, il vous faudra spécifier le chemin d&#8217;accès à la sandbox de Symfony, sous Windows il s&#8217;agit du fichier <strong>&laquo;&nbsp;symfony.bat&nbsp;&raquo;</strong>.</p>
<h2><span style="text-decoration: underline;">2. Création de votre projet Symfony</span></h2>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_step0.png"><img class="aligncenter size-full wp-image-987" title="project_step0" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_step0.png" alt="" width="728" height="501" /></a></p>
<p>Pour créer votre projet Symfony, rien de plus simple, il suffit d&#8217;aller sur <strong>&laquo;&nbsp;Fichier -&gt; Nouveau Projet&nbsp;&raquo;</strong> et de créer un nouveau projet <strong>&laquo;&nbsp;Application PHP&nbsp;&raquo;</strong>.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_step1.png"><img class="aligncenter size-full wp-image-988" title="project_step1" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_step1.png" alt="" width="723" height="499" /></a></p>
<p>Donnez ensuite, un nom à votre projet, sélectionnez la version de PHP utilisée, dans notre cas, on pourra se contenter de la version 5.2.x.<br />
<span style="color: #ff0000;">N&#8217;oublier pas de donner le répertoire contenant le code source  du framework Symfony cela fonctionne avec n&#8217;importe quelle version du framework à priori sauf peut être pour la version en développement 2.0.</span></p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_step2.png"><img class="aligncenter size-full wp-image-989" title="project_step2" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_step2.png" alt="" width="730" height="501" /></a></p>
<p>Pour ce qui est de la configuration de l&#8217;environnement de production pour le déploiement, nous n&#8217;avons pas à nous en soucier. On se contentera d&#8217;un environnement serveur en local.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_laststep.png"><img class="aligncenter size-full wp-image-990" title="project_laststep" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_laststep.png" alt="" width="731" height="497" /></a></p>
<p>Enfin on pourra spécifier que l&#8217;on veut utiliser le framework Symfony et que l&#8217;on veut générer une application &laquo;&nbsp;frontend&nbsp;&raquo; (application web principale destinée aux visiteurs du site) et une application &laquo;&nbsp;backend&nbsp;&raquo; (application dédiée à l&#8217;administration et au backoffice de l&#8217;application principale).</p>
<h2><span style="text-decoration: underline;">3. Dans la pratique</span></h2>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/netbeans_symfony_capture.png"><img class="aligncenter size-large wp-image-992" title="netbeans_symfony_capture" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/netbeans_symfony_capture-1024x401.png" alt="" width="1024" height="401" /></a></p>
<p>Voici comment se présente notre projet Symfony sous Netbeans 6.8. Nous avons un très bon éditeur de YML / YAML avec coloration syntaxique, autocompletion et schéma hiérarchique</p>
<p>On pourra également utiliser l&#8217;outil de génération de code en ligne de commande de Symfony en allant sur &laquo;&nbsp;MySymfonyProject -&gt; click-droit -&gt; Run Symfony Command&nbsp;&raquo;.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/symfony_cli.png"><img class="aligncenter size-full wp-image-995" title="symfony_cli" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/symfony_cli.png" alt="" width="687" height="538" /></a></p>
<p>On a le résultat de l&#8217;exécution de la ligne de commande dans le partie console de NetBeans cet outil est très pratique pour exécuter les tests-unitaires de LIME le framework de test intégré à Symfony.</p>
<p>On niveau du développement &laquo;&nbsp;pur&nbsp;&raquo;, on constate que l&#8217;autocompletion répond bien à la plupart des besoins de développeurs : les objets des vues, contrôleurs comme $sfWebRequest, $sfWebResponse, $view peuvent être appeler sans problème avec une intelliSense et même avec une petite documentation.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/symfony_autocomplete.png"><img class="aligncenter size-full wp-image-1000" title="symfony_autocomplete" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/symfony_autocomplete.png" alt="" width="532" height="323" /></a></p>
<h2><span style="text-decoration: underline;"><strong>Conclusion</strong></span></h2>
<p>Ce support du framework Symfony est très intéressant à la fois pour la communauté des développeurs Symfony mais aussi pour NetBeans qui pourra peut être se faire une meilleure réputation dans le développement PHP car il faut le rappeler Symfony est le framework de développement PHP le plus utilisé avec Zend Framework . Les fonctionnalités de NetBeans vis à vis de ce framework sont très basiques mais relativement utiles. On regrettera peut être une meilleure intégration du framework de test unitaire et une génération de code plus importante. Peut-être vaut-il le coup d&#8217;être utiliser à la place d&#8217;Eclipse ou Aptana dans une optique de développement Symfony ? Ou aurons-nous du mal à nous séparer de nos bons vieux plugins sur Eclipse (pour Subversion, Database Explorer, PDT, Smarty, jQuery) ? Pour ma part, NetBeans a gagné ma confiance, je lui trouve une bonne ergonomie et une grande simplicité d&#8217;utilisation. Il existe une autre solution  pour le support de Symfony mais qui est quant-à-elle payante : il s&#8217;agit de PHPEdit il faut compter environ 219€ pour une version avec le support de Symfony et presque 300 € pour le support de PHPUnit et SVN.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/symfony/netbeans-6-8-ide-pour-developpement-php-symfony/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Phoogle Map : release 2.1, nouveaux exemples, sources, compatibilité PHP 5.3</title>
		<link>http://www.alexandre-julien.com/php/phoogle-map/phoogle-map-release-2-1-nouveaux-exemples-sources-compatibilite-php-5-3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=phoogle-map-release-2-1-nouveaux-exemples-sources-compatibilite-php-5-3</link>
		<comments>http://www.alexandre-julien.com/php/phoogle-map/phoogle-map-release-2-1-nouveaux-exemples-sources-compatibilite-php-5-3/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 20:55:08 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Phoogle Map]]></category>
		<category><![CDATA[google map api]]></category>
		<category><![CDATA[GoogleMap]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[Phoogle]]></category>
		<category><![CDATA[PhoogleMap]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=903</guid>
		<description><![CDATA[ Nouvelle version de Phoogle Map 2.1 toujours basée sur l&#8217;API Google Map en version 2.0, cette nouvelle version offre une compatibilité avec PHP 5.3.
La sortie de cette nouvelle version s&#8217;accompagne d&#8217;une amélioration de la rubrique PhoogleMap sur le site avec des exemples téléchargeables, des  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/fbc_wide.png"><img class="alignleft size-medium wp-image-864" title="PhoogleMap" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/fbc_wide-300x188.png" alt="PhoogleMap" width="300" height="188" /></a> Nouvelle version de Phoogle Map 2.1 toujours basée sur l&#8217;API Google Map en version 2.0, cette nouvelle version offre une compatibilité avec PHP 5.3.</p>
<p>La sortie de cette nouvelle version s&#8217;accompagne d&#8217;une amélioration de la rubrique PhoogleMap sur le site avec des exemples téléchargeables, des sources mises à jour, une présentation approfondie, une PHP Doc en anglais, et des nouvelles ressources.</p>
<p>Très prochainement, je rajouterai une documentation complète en français et en anglais ainsi que de nouveaux exemples.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/phoogle-map/phoogle-map-release-2-1-nouveaux-exemples-sources-compatibilite-php-5-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aptana : un IDE orienté développement Web 2.0 pour PHP, Python, Ruby On Rails</title>
		<link>http://www.alexandre-julien.com/php/ide/aptana-un-ide-oriente-developpement-web-2-0-pour-php-python-ruby-on-rails/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=aptana-un-ide-oriente-developpement-web-2-0-pour-php-python-ruby-on-rails</link>
		<comments>http://www.alexandre-julien.com/php/ide/aptana-un-ide-oriente-developpement-web-2-0-pour-php-python-ruby-on-rails/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 16:01:33 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[IDE]]></category>
		<category><![CDATA[Adobe Spry]]></category>
		<category><![CDATA[aptana]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=824</guid>
		<description><![CDATA[
Aptana Studio est un IDE (Environnement de Développement orienté) Web 2.0 et basé sur les fondations d&#8217;Eclipse. Son principal avantage est qu&#8217;il n&#8217;utilise pas les plugin&#8217;s traditionnels d&#8217;Eclipse au profit de plugin&#8217;s développés par aptana qui sont beaucoup plus performants et plus astucieux.
Le  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/10/Aptana1StudioProfessional.JPG"><img class="aligncenter size-full wp-image-825" title="AptanaStudioProfessional" src="http://www.alexandre-julien.com/wp-content/uploads/2009/10/Aptana1StudioProfessional.JPG" alt="AptanaStudioProfessional" width="500" height="158" /></a></p>
<p>Aptana Studio est un IDE (Environnement de Développement orienté) Web 2.0 et basé sur les fondations d&#8217;Eclipse. Son principal avantage est qu&#8217;il n&#8217;utilise pas les plugin&#8217;s traditionnels d&#8217;Eclipse au profit de plugin&#8217;s développés par aptana qui sont beaucoup plus performants et plus astucieux.</p>
<p>Le logiciel est un environnement complet pour :</p>
<p>- PHP (sans passer le PDT d&#8217;Eclipse)</p>
<p>- Ruby On Rails</p>
<p>- Python Web</p>
<p>- Framework Javascript : jQuery, Prototype, Mootools, Adobe Spry, Dojo, &#8230;</p>
<p>- Javascript, HTML, CSS</p>
<p>- Application Adobe Air, Flex, &#8230;</p>
<p><span id="more-824"></span></p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/10/Aptana1.png"><img class="aligncenter size-large wp-image-826" title="Aptana" src="http://www.alexandre-julien.com/wp-content/uploads/2009/10/Aptana1-1024x640.png" alt="Aptana" width="1024" height="640" /></a></p>
<p>De plus, vous pourrez installer tous vos plugins préférés sur Aptana ou bien inversement, installer les plugins d&#8217;Aptana sur votre Eclipse existant !</p>
<p>Aptana est totalement libre et disponible sur Windows, MacOS X, Linux. Certaines personnes pourront également le coupler à une version 64 bits d&#8217;Eclipse sous Linux.</p>
<p>Rendez-vous sur le site Officiel : <a title="Aptana.com" href="http://www.aptana.com" target="_blank">http://www.aptana.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/ide/aptana-un-ide-oriente-developpement-web-2-0-pour-php-python-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Sympal : le CMS / CMF du framework Symfony</title>
		<link>http://www.alexandre-julien.com/php/symfony/sympal-le-cms-cmf-du-framework-symfony/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sympal-le-cms-cmf-du-framework-symfony</link>
		<comments>http://www.alexandre-julien.com/php/symfony/sympal-le-cms-cmf-du-framework-symfony/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 16:07:16 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[sympal]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=722</guid>
		<description><![CDATA[Sympal est un projet très intéressant de Sensio Labs (société de services à l&#8217;origine de Symfony et Doctrine), un plugin très sérieux pour intégrer un CMS dans une application Symfony ! Apparement, on peut supposer au nom que ce projet va reprendre certaines caractéristiques du CMS Drupal mais il  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/sympal.png"><img class="aligncenter size-full wp-image-726" title="sympal" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/sympal.png" alt="sympal" width="180" height="130" /></a>Sympal est un projet très intéressant de Sensio Labs (société de services à l&#8217;origine de Symfony et Doctrine), un plugin très sérieux pour intégrer un CMS dans une application Symfony ! Apparement, on peut supposer au nom que ce projet va reprendre certaines caractéristiques du CMS Drupal mais il n&#8217;y aura aucun code de Drupal à l&#8217;intérieur.</p>
<p>Il s&#8217;agit avant tout d&#8217;un projet Symfony 1.2 qui utilise le design pattern MVC, Doctrine et Symfony.</p>
<p>Le projet a l&#8217;air très prometteur, il est toujours en version de test mais on peut dors-et-déjà le télécharger sur le site Officiel : <a title="Sympal" href="http://www.sympalphp.org" target="_blank"><strong>http://www.sympalphp.org</strong></a></p>
<p>Le CMS a l&#8217;air tout aussi complet qu&#8217;un Drupal, Spip ou Joomla et s&#8217;intègrera parfaitement avec les applications Symfony.</p>
<p>Voici 2 screencasts présents sur le site officiel pour illustrer le fonctionnement de l&#8217;application :</p>
<p><span id="more-722"></span></p>
<p align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="800" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="src" value="http://www.sympalphp.com/uploads/screencasts/1.swf" /><embed type="application/x-shockwave-flash" width="800" height="480" src="http://www.sympalphp.com/uploads/screencasts/1.swf" quality="high"></embed></object></p>
<p align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="800" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="src" value="http://www.sympalphp.com/uploads/screencasts/2.swf" /><embed type="application/x-shockwave-flash" width="800" height="480" src="http://www.sympalphp.com/uploads/screencasts/2.swf" quality="high"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/symfony/sympal-le-cms-cmf-du-framework-symfony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework : nouvelle release 1.9.2</title>
		<link>http://www.alexandre-julien.com/non-classe/zend-framework-nouvelle-release-1-9-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-nouvelle-release-1-9-2</link>
		<comments>http://www.alexandre-julien.com/non-classe/zend-framework-nouvelle-release-1-9-2/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 11:54:50 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=684</guid>
		<description><![CDATA[
Nouvelle version de Zend Framework, elle corrige une quarantaine de bugs
Voici la liste issue de la changelog&#8230;

Bugs corrigés :

 [ZF-7605]: Zend_Application docs mistake
 [ZF-7550]: Bootstrap fails after checking out r17414
 [ZF-7417]: clarify confusion between &#8216;resource plugins&#8217; and &#8216;resources&#8217;  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/banner_zf_logo_v1_9.jpg"><img class="aligncenter size-full wp-image-685" title="Zend Framework 1.9.2" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/banner_zf_logo_v1_9.jpg" alt="Zend Framework 1.9.2" width="429" height="255" /></a></p>
<p>Nouvelle version de Zend Framework, elle corrige une quarantaine de bugs</p>
<p>Voici la liste issue de la changelog&#8230;</p>
<p><span id="more-684"></span></p>
<h4>Bugs corrigés :</h4>
<ul>
<li><a href="http://framework.zend.com/issues/browse/ZF-7605"> [ZF-7605]</a>: Zend_Application docs mistake</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7550"> [ZF-7550]</a>: Bootstrap fails after checking out r17414</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7417"> [ZF-7417]</a>: clarify confusion between &#8216;resource plugins&#8217; and &#8216;resources&#8217; in docs</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7401"> [ZF-7401]</a>: Errors in QuickStart</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7158"> [ZF-7158]</a>: No automatic creation of Zend_Application_Module_Autoloader for default module</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7095"> [ZF-7095]</a>: Zend_Application_Resource_Modules Example is wrong</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7091"> [ZF-7091]</a>: &laquo;&nbsp;scripts/load.sqlite.php&nbsp;&raquo; is missing &laquo;&nbsp;set_include_path&nbsp;&raquo;</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6893"> [ZF-6893]</a>: Cannot use Zend_Application_Resource_FrontController to set baseurl for a subset of environments</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6861"> [ZF-6861]</a>: Stripping all require_once calls makes Zend_Application unable to work</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6803"> [ZF-6803]</a>: Zend_Application Default Module Bootstrap is Skipped</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6679"> [ZF-6679]</a>: Items configured from Zend_Application::setOptions() via a config entry do not have their keys cast to lower case</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6659"> [ZF-6659]</a>: Module bootstrap implementation</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6634"> [ZF-6634]</a>: include warning with same module and namespace name</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-4730"> [ZF-4730]</a>: Add possibility to check group-membership in Zend_Auth_Adapter_Ldap</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7358"> [ZF-7358]</a>: Zend_Cache_Backend_ZendServer_ShMem and Zend_Cache_Backend_ZendServer_Disk throws an exception in test()</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7172"> [ZF-7172]</a>: How to instatiate the ZendServer cache backends</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6291"> [ZF-6291]</a>: Zend_Cache::factory() denies creation of Zend_Cache_Backend_TwoLevels backend on Linux</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-5740"> [ZF-5740]</a>: Partial cleaning in Zend_Cache_Backend_TwoLevels::clean()</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7589"> [ZF-7589]</a>: Zend_Date::setDate when parsing the date to set in an array</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7554"> [ZF-7554]</a>: testSetLocale(Zend_DateTest) unit tests failure</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7456"> [ZF-7456]</a>: Regression in 1.9 in ability to create Zend_Date from array</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7454"> [ZF-7454]</a>: Timezone and Zend_Date</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7647"> [ZF-7647]</a>: fetchAssoc() and fetchPairs() in Zend_Db_Adapter_Abstract have wrong docblock return type</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7629"> [ZF-7629]</a>: Zend_Db_Adapter_Pdo_Mssql should pass @table_owner to sp_pkeys</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-5823"> [ZF-5823]</a>: Non-optimized SQL generated for LIMIT clause in MSSQL adapter</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-4251"> [ZF-4251]</a>: Zend_Db_Adapter_Pdo_Mssql doeas not support both LIMIT and DISTINCT in the same query</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-4099"> [ZF-4099]</a>: Zend_Db_Adapter_Pdo_Mssql &#8211; Order By in Limit Function</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-3434"> [ZF-3434]</a>: PDO_Mssql DSN includes _config['options']</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-3216"> [ZF-3216]</a>: Zend_Db_Adapter_Mysqli does not provide a proper way to catch MySQL error codes.</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7549"> [ZF-7549]</a>: Missing prefix and type parameters in the PHPdoc for most of the addPrefixPath methods</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7544"> [ZF-7544]</a>: Fatal Error when setting same FilterRule more than one time in script call</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7135"> [ZF-7135]</a>: null values are treated as missing data instead of an empty value</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7449"> [ZF-7449]</a>: Directive $element-&gt;setRegisterInArrayValidator(false) doesn&#8217;t work anymore</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7208"> [ZF-7208]</a>: Incubator unit tests stop with fatal error &#8216;Class &#8216;Zend_Ldap_AllTests&#8217; not found&#8217;</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7604"> [ZF-7604]</a>: No Zend_Log_Writer_Syslog::setApplication() hence documentation</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7614"> [ZF-7614]</a>: Incorrect function name in the #42.2 manual entry</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7613"> [ZF-7613]</a>: There is not &laquo;&nbsp;factory&nbsp;&raquo; method in the Zend_Queue class</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7560"> [ZF-7560]</a>: Zend_Translate_Adapter does not properly handle numeric key values</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7648"> [ZF-7648]</a>: testNotSameMessageContainsTokenAndValue(Zend_Validate_IdenticalTest) unit tests failure</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7643"> [ZF-7643]</a>: Empty token value in Zend_Validate_Identical::NOT_SAME</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7631"> [ZF-7631]</a>: Zend_Validate_NotEmpty compatibility</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7630"> [ZF-7630]</a>: Zend_Validate_Date doesn&#8217;t accept Zend_Date object</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6457"> [ZF-6457]</a>: Zend_Validate_Date doesn&#8217;t validate a value filtered by Zend_Filter_LocalizedToNormalized</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7597"> [ZF-7597]</a>: Reference guide minor error</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7676"> [ZF-7676]</a>: Unit tests stop because of the &laquo;&nbsp;Call to undefined method Zend_XmlRpc_Server_Fault::getReturnValue()&nbsp;&raquo; fatal error</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/non-classe/zend-framework-nouvelle-release-1-9-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xdebug : l&#039;outil de debug et profiling PHP</title>
		<link>http://www.alexandre-julien.com/php/xdebug-loutil-de-debug-et-profiling-php/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=xdebug-loutil-de-debug-et-profiling-php</link>
		<comments>http://www.alexandre-julien.com/php/xdebug-loutil-de-debug-et-profiling-php/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 12:50:15 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cachegrid]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[profiling]]></category>
		<category><![CDATA[var_dump]]></category>
		<category><![CDATA[Xdebug]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=656</guid>
		<description><![CDATA[ Comme dans tous les langages PHP possède des outils de debugage et de profilage pour optimiser vos applications.
Il existe bien évidement celui de Zend qui est founit avec PHP, cela dit il existe également Xdebug qui est un excellent outil permettant de se configurer sur Eclipse pour faire du  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/xdebug-logo.png"><img class="alignleft size-full wp-image-657" title="xdebug-logo" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/xdebug-logo.png" alt="xdebug-logo" width="200" height="116" /></a> Comme dans tous les langages PHP possède des outils de debugage et de profilage pour optimiser vos applications.</p>
<p>Il existe bien évidement celui de Zend qui est founit avec PHP, cela dit il existe également Xdebug qui est un excellent outil permettant de se configurer sur Eclipse pour faire du debug, d&#8217;améliorer les var_dump en PHP pour visualiser plus facilement les erreurs et de mettre en cache des données pour visualiser les performances de votre application.</p>
<p>Nous allons voir comment installer et configurer Xdebug dans votre environnement PHP.</p>
<p><span id="more-656"></span></p>
<p>Tout d&#8217;abord, il faut s&#8217;avoir que Xdebug est une extension à PHP (sous forme d&#8217;une DLL sous Windows, et d&#8217;un .so sous linux). Il faut récupérer l&#8217;extension sur le site de Xdebug : <a title="http://www.xdebug.org/" href="http://www.xdebug.org/" target="_blank">http://www.xdebug.org/</a> (vous pouvez essayer les paquets dans les dépôts sous linux c&#8217;est beaucoup plus pratique).</p>
<p>Il faut ensuite copier le fichier dans le répertoire des extensions :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/extension.JPG"><img class="aligncenter size-full wp-image-659" title="extension" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/extension.JPG" alt="extension" width="497" height="442" /></a></p>
<p>Il faut ensuite activer l&#8217;extension dans le php.ini en rajoutant la ligne suivante :</p>
<pre lang="ini">extension=php_xdebug-2.0.4-5.2.8.dll</pre>
<p>Xdebug est enfin installé sur le serveur php, la première chose que l&#8217;on peut remarque c&#8217;est que les var_dump sont beaucoup plus complets et lisibles que précédemment :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/var_dump.png"><img class="aligncenter size-full wp-image-660" title="var_dump" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/var_dump.png" alt="var_dump" width="372" height="283" /></a></p>
<p>Les messages d&#8217;erreurs sont également plus complets :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/var_dump_full.jpg"><img class="aligncenter size-full wp-image-661" title="var_dump_full" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/var_dump_full.jpg" alt="var_dump_full" width="527" height="453" /></a></p>
<p>On peut également utilisé Xdebug pour faire du profiling, c&#8217;est à dire faire un affichage de toutes les fonctions exécutées avec les temps de réponses. Pour cela il faut modifier le fichier php.ini et rajouter le code suivant dans la partie module settings :</p>
<pre lang="ini">[xdebug]
xdebug.profiler_enable=On
; On choisit le répertoire où on stocke le cache
xdebug.profiler_output_dir="c:\traces"
xdebug.profiler_append=On
xdebug.profiler_enable_trigger=On</pre>
<p>Il faudra penser à vider le cache lorsqu&#8217;on veut profiler l&#8217;exécution d&#8217;une page en supprimer le fichier dans le répertoire.</p>
<p>On regarde ensuite le profilage avec un logiciel prévu à cet effet, il s&#8217;agit de WinCacheGrid sous Windows et XCacheGrid sous Linux, et on pourra avoir les résultats sous la forme suivante :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/wincachegrind.JPG"><img class="aligncenter size-medium wp-image-662" title="wincachegrind" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/wincachegrind-300x210.jpg" alt="wincachegrind" width="300" height="210" /></a></p>
<p>Pour une utilisation plus avancée, on peut aussi configurer Xdebug avec le PDT d&#8217;Eclipse pour avoir une vraie fonction de débogage perfectionnée ou sinon il reste aussi la solution ultime Zend Studio mais qui est relativement coûteuse.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/xdebug-loutil-de-debug-et-profiling-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework tutoriel #3 : Couche modèle, interaction avec une base de données avec Zend_Db</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-tutoriel-3-couche-modele-interaction-avec-une-base-de-donnees-avec-zend_db/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-tutoriel-3-couche-modele-interaction-avec-une-base-de-donnees-avec-zend_db</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-tutoriel-3-couche-modele-interaction-avec-une-base-de-donnees-avec-zend_db/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 17:21:35 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[Zend f]]></category>
		<category><![CDATA[Zend_Db]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=633</guid>
		<description><![CDATA[Dans une application, il est impératif de se soucier de la portabilité de son application et de son aptitude à s&#8217;intégrer à plusieurs système de base de données. Pour cela, il faut gérer les transactions avec cette dernière avec un outil indépendant d&#8217;une base de données.
On appelle cela une couche  [...]]]></description>
			<content:encoded><![CDATA[<p>Dans une application, il est impératif de se soucier de la portabilité de son application et de son aptitude à s&#8217;intégrer à plusieurs système de base de données. Pour cela, il faut gérer les transactions avec cette dernière avec un outil indépendant d&#8217;une base de données.</p>
<p>On appelle cela une couche d&#8217;abstraction qui sert intermédiaire entre la base de données et l&#8217;application. Le but est de modéliser le schéma d&#8217;une base de données sous forme de classes et d&#8217;objet pour ne pas travailler avec le langage SQL et les drivers de base de données car il est évident qu&#8217;une application écrite de A à Z avec des mysql_connect() et mysql_query() ne sera pas très robuste et migrera difficilement vers un autre SGBD comme Postgre ou Oracle&#8230;</p>
<p><span id="more-633"></span>Zend_Framework fournit un outil nommé Zend_Db_Table pour gérer à l&#8217;aide d&#8217;un système de DAO (Database Access Object) les transactions avec les bases de données.</p>
<p>Nous allons voir dans un premier temps comment configurer Zend_Framework pour mettre en place ce système :</p>
<p><span style="text-decoration: underline;">Configuration du fichier Application.ini :</span></p>
<pre lang="ini">;database configuration
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = ""
resources.db.params.dbname = "announcements"
resources.db.params.date_format = "YYYY-MM-ddTHH:mm:ss"
resources.db.isDefaultTableAdapter = true</pre>
<p>Il faut spécifier dans le &laquo;&nbsp;Application.ini&nbsp;&raquo; les paramètres pour accéder à votre base de données, il faut y spécifier l&#8217;adresse de la base, le type (pdo_mysql, postgre, sqllite, oci8, mssql, &#8230;), l&#8217;utilisateur avec le mot de passe, le nom de la base de données et le format de date et heure.</p>
<p>Ecrire les classes d&#8217;accès aux données (utilisation de Zend_Db_Table) :</p>
<p>Il nous faut maintenant écrire les classes permettant de modéliser  les tables de la base de données pour cela on va utiliser Zend_Db_Table pour générer une classe permettant d&#8217;accéder à la table &laquo;&nbsp;posts &nbsp;&raquo; de notre application :</p>
<p>On créer tout d&#8217;abord un dossier &laquo;&nbsp;models&nbsp;&raquo; dans notre répertoire /application avec un dossier DbTable dedans.</p>
<p>Nous allons générer un fichier <strong>Post.php :</strong></p>
<p>Tout d&#8217;abord,  on crée une classe dérivée de Zend_Db_Table que l&#8217;on nommera avec la syntaxe suivante : Model_DbTablr_NomDeLaTable en spécifiant le nom extact dans l&#8217;attribut protégé &laquo;&nbsp;name&nbsp;&raquo; :</p>
<p>Ensuite il ne reste plus qu&#8217;à écrire les méthodes qui permet les transactions avec les bases de données, je recommende fortement d&#8217;utiliser une méthode pour chaque transaction plutôt que de les écrire dans le contrôleur, on est dans un design-pattern MVC !</p>
<p>Voici le prototypage de notre classe et l&#8217;implémentation de notre classe :</p>
<pre lang="php">fetchRow('id = '.(int)$id);
		if (!$row)
		{
			// On lance une exception en cas d'erreur
			throw new Exception ("Erreur, l'enregistrement $id n'existe pas !");
		}
		// On retourne le résultat sous forme de tableau
		return $row-&gt;toArray();
	}

	/**
	 * Ajoute un article en base de données
	 * @param $values
	 * @return unknown_type
	 */
	public function addPost ($values)
	{
		// On enregistre les valeurs sous forme de tableau [champs] =&gt; valeur
		$result = $this-&gt;insert($values);
		if (!$result)
		{
			throw new Exception ("Erreur impossible d'enregister");
		}
	}

	/**
	 * Met à jour un article en base de donneés
	 * @param $values
	 * @return unknown_type
	 */
	public function updatePost ($id,$newValues)
	{
		$result = $this-&gt;update($newValues, 'id = '.(int)$id);
		if (!$result)
		{
			throw new Exception ("Erreur impossible de mettre à jour");
		}
	}

	/**
	 * Supprime l'article $id
	 * @param $id
	 * @return unknown_type
	 */
	public function removePost ($id)
	{
		$result = $this-&gt;delete('id = '.$id);
		if (!$result)
		{
			throw new Exception ("Erreur impossible de supprimer");
		}
	}

	/**
	 * Requête avec jointure pour récupérer les 5 premiers
	 * articles avec les données de la table auteur en jointure
	 * et qui ont leur status publié
	 * @return unknown_type
	 */
	public function findPostsWithAuthorsInformations ()
	{
		$db = $this-&gt;getAdapter();

		$select = $db-&gt;select()
					 -&gt;from('post')
					 -&gt;joinInner('author', 'post.author_id = author.id')
					 -&gt;where('status = "published"')
					 -&gt;limit(5);
		$query = $select-&gt;query();
                $result = $query->fetchAll();

		return $result;
	}
}
?&gt;</pre>
<p>Pour appeler cette classe dans le contrôleur rien de plus simple, on instancie un objet &laquo;&nbsp;$model&nbsp;&raquo; et pis on appelle les méthodes que l&#8217;on a implémentée :</p>
<pre lang="php">< ?php
	class PostController extends Zend_Controller_Action
	{
		public function init ()
		{
			// On fait rien
		}

		public function testModelAction ()
		{
			$model = new Model_DbTable_Post();

			// Ajout
			$model->addPost(array('title' => 'test', 'content' => 'ceci est mon premier post', 'status' => 'publised'));

			// Requête
			$this->view->posts = $model->findPostsWithAuthorsInformations();

			// Suppression
			$model->removePost(2);

		}
	}
?></pre>
<p>La prochaine fois nous verrons le fonctionnement des formulaires avec Zend_Form</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-tutoriel-3-couche-modele-interaction-avec-une-base-de-donnees-avec-zend_db/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Doctrine 2.0 : que va apporter la nouvelle version de l&#039;ORM PHP 5</title>
		<link>http://www.alexandre-julien.com/php/doctrine-2-0-que-va-apporter-la-nouvelle-version-de-lorm-php-5/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=doctrine-2-0-que-va-apporter-la-nouvelle-version-de-lorm-php-5</link>
		<comments>http://www.alexandre-julien.com/php/doctrine-2-0-que-va-apporter-la-nouvelle-version-de-lorm-php-5/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 06:57:07 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[DAO]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=595</guid>
		<description><![CDATA[
Doctrine ORM PHP 5 dors et déjà présent sur le framework Symfony, prépare une nouvelle version majeure du projet : Doctrine 2.0
Cette nouvelle version exclusivement compatible avec PHP 5.3 au minimum s&#8217;avère assez prometteuse et assez ambitieuse.
Petit rappel sur Doctrine : ce projet a été conçu  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/08/logo.jpg"><img class="aligncenter size-full wp-image-597" title="Doctrine" src="http://www.alexandre-julien.com/wp-content/uploads/2009/08/logo.jpg" alt="Doctrine" width="421" height="88" /></a></p>
<p>Doctrine ORM PHP 5 dors et déjà présent sur le framework Symfony, prépare une nouvelle version majeure du projet : Doctrine 2.0</p>
<p>Cette nouvelle version exclusivement compatible avec PHP 5.3 au minimum s&#8217;avère assez prometteuse et assez ambitieuse.</p>
<p>Petit rappel sur Doctrine : ce projet a été conçu tout comme Propel (basé sur Active Record) dans un but de créer un ORM relativement puissant et extrèmement riche en fonctionnalités : tests unitaires automatiser sur les classes relationnelles, schéma des bases en YML, génération de code automatique, système de cache avancé, plugins, gestion des contraintes d&#8217;intégrités avancée, load-balancing, profiler, outils de performances, validations des données en fonction du schéma, &#8230; Bref un véritable équivalent de Hibernate en PHP 5.</p>
<p>Le projet est principalement supporté par Sensio Labs (framework Symfony).</p>
<p><span id="more-595"></span></p>
<p>La prochaine version (Doctrine 2.0) sera basée sur PHP 5.3, elle utilisera les nouveaux drivers de PHP, et promet de véritable amélioration au niveau des performances.</p>
<p>Voici des benchmarks des performances de Doctrine 2.0 par rapport à sa version précédente :</p>
<h3>PHP 5.2.8</h3>
<blockquote>
<table style="height: 68px;" border="0" cellspacing="0" width="237">
<thead>
<tr>
<th>#</th>
<th>Seconds</th>
<th>Memory</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>24</td>
<td>129170.648438 KB</td>
</tr>
<tr>
<td>2</td>
<td>23</td>
<td>129164.078125 KB</td>
</tr>
<tr>
<td>3</td>
<td>23</td>
<td>129176.851562 KB</td>
</tr>
</tbody>
</table>
</blockquote>
<h3>PHP 5.3.0alpha4-dev</h3>
<table border="0" cellspacing="0">
<thead>
<tr>
<th>#</th>
<th>Seconds</th>
<th>Memory</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>21</td>
<td>89858.7421875 KB</td>
</tr>
<tr>
<td>2</td>
<td>20</td>
<td>89864.59765625 KB</td>
</tr>
<tr>
<td>3</td>
<td>21</td>
<td>89867.89453125 KB</td>
</tr>
</tbody>
</table>
<p>D&#8217;autre part, Doctrine deviendra beaucoup moins coûteux en code et sera moins verbeux.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/doctrine-2-0-que-va-apporter-la-nouvelle-version-de-lorm-php-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Toolkit for ADO.NET : portabilité de ADO.NET pour les développeurs PHP</title>
		<link>http://www.alexandre-julien.com/microsoft/dotnet/php-toolkit-for-ado-net-portabilite-de-ado-net-pour-les-developpeurs-php/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=php-toolkit-for-ado-net-portabilite-de-ado-net-pour-les-developpeurs-php</link>
		<comments>http://www.alexandre-julien.com/microsoft/dotnet/php-toolkit-for-ado-net-portabilite-de-ado-net-pour-les-developpeurs-php/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 12:31:30 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[DAO]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=575</guid>
		<description><![CDATA[
Microsoft vient de publier l&#8217;ensemble des librairies ADO.NET dans un projet open-source baptisé PHP Toolkit for ADO.NET Data Services.
Il s&#8217;agit d&#8217;une version PHP qui reprend l&#8217;ensemble des librairies et fonctionnalités du sous-framework ADO.NET du .NET Framework. Il s&#8217;agit d&#8217;un système de DAO  [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/08/dotnetframework.png"><img class="aligncenter size-medium wp-image-578" title="dotnetframework" src="http://www.alexandre-julien.com/wp-content/uploads/2009/08/dotnetframework-300x192.png" alt="dotnetframework" width="300" height="192" /></a><img class="size-full wp-image-328 aligncenter" title="PHP" src="http://www.alexandre-julien.com/wp-content/uploads/2009/06/1726661.png" alt="PHP" width="135" height="103" /><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/06/1726661.png"></a></p>
<p style="text-align: left;">Microsoft vient de publier l&#8217;ensemble des librairies ADO.NET dans un projet open-source baptisé PHP Toolkit for ADO.NET Data Services.</p>
<p>Il s&#8217;agit d&#8217;une version PHP qui reprend l&#8217;ensemble des librairies et fonctionnalités du sous-framework ADO.NET du .NET Framework. Il s&#8217;agit d&#8217;un système de DAO (Data Access Object) pour générer des couches d&#8217;abstractions aux base de données offrant ainsi une flexibilité entre l&#8217;application et les systèmes de base de  données.</p>
<p><span id="more-575"></span><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/08/PHP_ADO_DATA_SERVICEArchitecture_4.png"><img class="size-full wp-image-586 alignleft" title="PHP_ADO_DATA_SERVICEArchitecture_4" src="http://www.alexandre-julien.com/wp-content/uploads/2009/08/PHP_ADO_DATA_SERVICEArchitecture_4.png" alt="PHP_ADO_DATA_SERVICEArchitecture_4" width="426" height="480" /></a>Ce PHP Tookit for ADO.NET se présente sous la forme d&#8217;un Webservice accessible via HTTP (API REST) pour permettre aux applications PHP d&#8217;accès aux bases de donneés via des webservices.</p>
<p>Le principal intérêt de cet outil est avant tout pour Microsoft puisqu&#8217;il permet de familiariser les développeurs PHP avec des librairies du Framework .NET</p>
<p>Le projet est accessible sur Codeplex à l&#8217;adresse suivante : <a title="PHP Toolkit for ADO.NET" href="http://phpdataservices.codeplex.com/">http://phpdataservices.codeplex.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/microsoft/dotnet/php-toolkit-for-ado-net-portabilite-de-ado-net-pour-les-developpeurs-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PhoogleMap 2.0 : nouvelle release</title>
		<link>http://www.alexandre-julien.com/google/google-maps/phooglemap-2-0-nouvelle-release/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=phooglemap-2-0-nouvelle-release</link>
		<comments>http://www.alexandre-julien.com/google/google-maps/phooglemap-2-0-nouvelle-release/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 11:52:19 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Phoogle Map]]></category>
		<category><![CDATA[Gmaps]]></category>
		<category><![CDATA[Librairie Google Maps]]></category>
		<category><![CDATA[Phoogle]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=474</guid>
		<description><![CDATA[Voici la nouvelle release de PhoogleMap en version 2.0 basée sur l&#8217;API GMap2, cette dernière API offre des quelques améliorations notamment au niveau du temps de chargement. Quelques nouvelles fonctionnalités sont disponbiles comme la possibilité de modifier les contrôles de zoom et de  [...]]]></description>
			<content:encoded><![CDATA[<p>Voici la nouvelle release de PhoogleMap en version 2.0 basée sur l&#8217;API GMap2, cette dernière API offre des quelques améliorations notamment au niveau du temps de chargement. Quelques nouvelles fonctionnalités sont disponbiles comme la possibilité de modifier les contrôles de zoom et de déplacement.<br />
Une prochaine version permettra surement de &laquo;&nbsp;skinner&nbsp;&raquo; une carte GoogleMap avec ses propres icônes, ses propres boutons de navigations, etc &#8230;</p>
<p>La carte est disponible dans la rubrique du blog dédiée et sur Google Code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/google/google-maps/phooglemap-2-0-nouvelle-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fonction pour générer des &quot;slugs&quot; pour vos URLs</title>
		<link>http://www.alexandre-julien.com/internet/fonction-pour-generer-des-slugs-pour-vos-urls/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fonction-pour-generer-des-slugs-pour-vos-urls</link>
		<comments>http://www.alexandre-julien.com/internet/fonction-pour-generer-des-slugs-pour-vos-urls/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 17:47:45 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Référencement]]></category>
		<category><![CDATA[slugs]]></category>
		<category><![CDATA[url rewriting]]></category>
		<category><![CDATA[urls]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=461</guid>
		<description><![CDATA[Dans les bonnes pratiques à prendre pour le référencement, on retrouve le url_rewriting qui consiste à réécrire vos urls sous forme simplifiée et très explicite pour optimiser la pertinance. Ex : une url  [...]]]></description>
			<content:encoded><![CDATA[<p>Dans les bonnes pratiques à prendre pour le référencement, on retrouve le url_rewriting qui consiste à réécrire vos urls sous forme simplifiée et très explicite pour optimiser la pertinance. Ex : une url comme</p>
<p>http://www.monsite.com/employements_offers?country=43&#038;city=4215&#038;category=452&#038;societe=4321</p>
<p>peut se renommer de la façon suivante :</p>
<p>http://www.monsite.com/france/marseille/developpement-web/ssii-xxx</p>
<p>En effet des url&#8217;s plus explicites et qui cachent les noms des paramètres GET sont à privilégier pour optimiser le référencement de vos applications Web.</p>
<p>Cela vous oblige à rajouter un champs particulier dans vos tables que l&#8217;on appelle le &laquo;&nbsp;slug&nbsp;&raquo; et qui est une sorte de d&#8217;identifiant publique explicite prévu pour les urls. Pour générer automatiquement ces slugs, il vous faut une expression régulière qui va modifier un terme pour le mettre dans une forme compatible avec les navigateurs. Par exemple : Provence Alpes Côte D&#8217;Azur on peut le transformer en provence-alpes-cote-dazur.</p>
<p>La fonction suivante vous permettra de générer facilement ces slugs :</p>
<pre lang="php">/*  $str : terme à transformer
 *  $replace : des caractères ou termes à remplacer par quelque chose passé
 *  en paramètre dans un tableau
 *  $delimiter : délimiteur pour representer les espaces par défaut
 *  c'est un tiret "-" je conseille fortement de garder
 *  ce format qui est le meilleur dans un souci de référencement.
 */
function toAscii($str, $replace=array(), $delimiter='-') {

setlocale(LC_ALL, 'en_US.UTF8');

if( !empty($replace) ) {

$str = str_replace((array)$replace, ' ', $str);

}

$clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);

$clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);

$clean = strtolower(trim($clean, '-'));

$clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);

return $clean;

}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/internet/fonction-pour-generer-des-slugs-pour-vos-urls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Auto Zoom et recadrage intelligent sur une carte Google Map</title>
		<link>http://www.alexandre-julien.com/php/auto-zoom-et-recadrage-intelligent-sur-une-carte-google-map/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=auto-zoom-et-recadrage-intelligent-sur-une-carte-google-map</link>
		<comments>http://www.alexandre-julien.com/php/auto-zoom-et-recadrage-intelligent-sur-une-carte-google-map/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 18:09:41 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[automatique]]></category>
		<category><![CDATA[Cadrage]]></category>
		<category><![CDATA[Center]]></category>
		<category><![CDATA[Google Map]]></category>
		<category><![CDATA[Phoogle]]></category>
		<category><![CDATA[Zoom]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=444</guid>
		<description><![CDATA[Les utilisateurs de l&#8217;API Google Map sont souvent confrontés à un problème lorsqu&#8217;ils ont beaucoup de marqueurs sur une carte google map et qu&#8217;ils n&#8217;arrivent pas à avoir un cadrage cohérent et un zoom approprié.
En effet, on peut remédier à ce problème grâce aux mathématiques : il suffit de prendre  [...]]]></description>
			<content:encoded><![CDATA[<p>Les utilisateurs de l&#8217;API Google Map sont souvent confrontés à un problème lorsqu&#8217;ils ont beaucoup de marqueurs sur une carte google map et qu&#8217;ils n&#8217;arrivent pas à avoir un cadrage cohérent et un zoom approprié.</p>
<p>En effet, on peut remédier à ce problème grâce aux mathématiques : il suffit de prendre le point central entre les 2 points les plus éloignés et d&#8217;ajuster le zoom en fonction de la distance entre ces 2 derniers.</p>
<p>Le script suivant vous montre comment calculer le zoom et les coordonnées du cadrage le plus approprié à partir d&#8217;un ensemble de marqueurs. Cette fonctionnalité est disponible sur <a title="Phoogle Map" href="http://code.google.com/p/phooglemap/" target="_blank">PhoogleMap</a>.</p>
<p><span id="more-444"></span></p>
<pre lang="php">public function enableAutoZoom ()
{
$latitude_array = array();
$latitude_array = array();
foreach ($this->validPoints as $key => $value)
{
$latitude_array[] = $value['lat'];
$longitude_array[] = $value['long'];
}
$minimal_latitude = min ($latitude_array);
$maximal_latitude = max ($latitude_array);
$minimal_longitude = min ($longitude_array);
$maximal_longitude = max ($longitude_array);

$central_latitude = $minimal_latitude + ($maximal_latitude - $minimal_latitude) / 2;
$central_longitude = $minimal_longitude + ($maximal_longitude - $minimal_longitude) / 2;

$miles = (3958.75 * acos(sin($minimal_latitude / 57.2958) * sin($maximal_latitude / 57.2958) + cos($minimal_latitude / 57.2958) * cos($maximal_latitude / 57.2958) * cos($maximal_longitude / 57.2958 - $minimal_longitude / 57.2958)));

switch ($miles)
{
case ($miles < 0.2):
$zoom = 2;
break;
case ($miles < 0.5):
$zoom = 3;
break;
case ($miles < 1):
$zoom = 3;
break;
case ($miles < 2):
$zoom = 4;
break;
case ($miles < 3):
$zoom = 5;
break;
case ($miles < 7):
$zoom = 6;
break;
case ($miles < 15):
$zoom = 8;
break;

case ($miles < 50):
$zoom = 9;
break;

case ($miles < 300):
$zoom = 12;
break;

case ($miles < 600):
$zoom = 14;
break;
default:
$zoom = 16;
break;
}
$this->centerMap($central_latitude, $central_longitude);
$this->zoomLevel = $zoom;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/auto-zoom-et-recadrage-intelligent-sur-une-carte-google-map/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 3/11 queries in 4.369 seconds using disk: basic
Object Caching 3828/3847 objects using disk: basic

Served from: www.alexandre-julien.com @ 2012-02-14 14:05:38 -->
