<?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>dgiw</title>
	<atom:link href="http://www.dgiw.net/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.dgiw.net/blog</link>
	<description>denis gravel, int&#233;grateur web</description>
	<lastBuildDate>Tue, 09 Mar 2010 02:19:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>La publication automatique des articles dans Wordpress : le truc pour que ça marche !</title>
		<link>http://www.dgiw.net/blog/?p=226</link>
		<comments>http://www.dgiw.net/blog/?p=226#comments</comments>
		<pubDate>Mon, 09 Nov 2009 00:00:06 +0000</pubDate>
		<dc:creator>dgiw</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.dgiw.net/blog/?p=226</guid>
		<description><![CDATA[
De nombreux utilisateurs de Wordpress éprouvent des difficultés à programmer la publication automatique de leurs articles. Cette fonctionnalités peut s&#8217;avérer pratique dans les cas où on veut préparer des articles à l&#8217;avance qui seront publiés automatiquement à des dates prédéterminées (avant un départ en vacances par exemple).
La démarche normale consiste d&#8217;abord à rédiger l&#8217;article, ensuite [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-251" title="buttonw-blue" src="http://www.dgiw.net/blog/wp-content/uploads/2009/11/buttonw-blue.png" alt="buttonw-blue" width="178" height="58" /><br />
De nombreux utilisateurs de Wordpress éprouvent des difficultés à programmer la publication automatique de leurs articles. Cette fonctionnalités peut s&#8217;avérer pratique dans les cas où on veut préparer des articles à l&#8217;avance qui seront publiés automatiquement à des dates prédéterminées (avant un départ en vacances par exemple).</p>
<p>La démarche normale consiste d&#8217;abord à rédiger l&#8217;article, ensuite à modifier la date de publication pour une date à venir et finalement à cliquer «Publish».</p>
<p><img class="aligncenter size-full wp-image-254" title="fig-1" src="http://www.dgiw.net/blog/wp-content/uploads/2009/11/fig-1.gif" alt="fig-1" width="288" height="214" /></p>
<p>Dans les versions plus récentes de Wordpress, la date à venir est automatiquement détectée et le texte du bouton «Publish» est alors remplacé par «Schedule».</p>
<p><img class="aligncenter size-full wp-image-255" title="fig-2" src="http://www.dgiw.net/blog/wp-content/uploads/2009/11/fig-2.gif" alt="fig-2" width="289" height="271" /></p>
<p>Après ces étapes, dans la colonne «Date» de la liste des communiqués, on remarque le texte «Scheduled» sous la date de publication du communiqué en question.</p>
<p><img class="aligncenter size-full wp-image-256" title="fig-3" src="http://www.dgiw.net/blog/wp-content/uploads/2009/11/fig-3.gif" alt="fig-3" width="275" height="104" /></p>
<p>Ces étapes sont donc faciles à suivre. Le problème, c&#8217;est que ça ne marche pas toujours. Il arrive parfois que le réveil de Wordpress refuse obstinément de sonner !</p>
<p>En effectuant des recherches, j&#8217;ai découvert que Wordpress procède à la publication automatique des articles par l&#8217;entremise du script <strong>wp-cron.php</strong> qui est responsable de changer au moment opportun le statut «Scheduled» des articles à paraître pour «Published».  Le script est appelé à intervalles réguliers via une requête HTTP grâce à la fonction PHP <a href="http://php.net/manual/fr/function.fsockopen.php" target="_blank">fsockopen</a>. Un des paramètres de cette fonction est l&#8217;url du site Web. Pour que <strong>fsockopen</strong> fonctionne il doit donc être exécuté sur un serveur qui est en mesure de résoudre son propre nom de domaine. Ça n&#8217;était pas le cas sur mon serveur et c&#8217;est précisément la raison pour laquelle la publication automatique ne fonctionnait pas.</p>
<p>Vous pouvez vérifier si c&#8217;est aussi votre cas en exécutant le script suivant sur votre serveur Web (sans oublier de remplacer «example.com» par l&#8217;url de votre site Web et d&#8217;ajuster le chemin vers le fichier «wp-cron.php») :</p>
<pre class="brush: php">
&lt;?php
$argyle = fsockopen( &#039;example.com&#039;, 80, $errno, $errstr, 0.01 );
if ( $argyle ) {
fputs( $argyle, &quot;GET /wp-cron.php HTTP/1.0\r\n&quot; . &quot;Host: example.com\r\n\r\n&quot;);
echo &quot;Success sending the GET.\n&quot;;
} else {
echo &quot;Error: $errstr ($errno)\n&quot;;
}
?&gt;
</pre>
<p>Si vous obtenez une erreur du type <code>«[function.fsockopen]: php_network_getaddresses: getaddrinfo failed: No such host is known»</code>, vous êtes probablement dans la même situation. Dans ce cas, vous pouvez contacter le service technique de votre hébergeur afin de signaler que le serveur Web n&#8217;arrive pas à résoudre son propre nom de domaine et demander à ce qu&#8217;on apporte les corrections nécessaires.</p>
<p>Si vous contrôlez votre serveur Web, une solution possible consiste à ajouter une entrée au fichier <a href="http://en.wikipedia.org/wiki/Hosts_file" target="_blank">hosts</a> de votre système afin de faire pointer votre nom de domaine sur 127.0.0.1.</p>
<p>Moralité : <em>There is no places like 127.0.0.1 !</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dgiw.net/blog/?feed=rss2&amp;p=226</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Concilier le Output Cache de ASP.Net et le Ajax Control Toolkit, c&#8217;est possible</title>
		<link>http://www.dgiw.net/blog/?p=100</link>
		<comments>http://www.dgiw.net/blog/?p=100#comments</comments>
		<pubDate>Sun, 11 Oct 2009 03:10:56 +0000</pubDate>
		<dc:creator>dgiw</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[ASP.NET AJAX]]></category>

		<guid isPermaLink="false">http://www.dgiw.net/blog/?p=100</guid>
		<description><![CDATA[
Dans la plate-forme ASP.Net,  un des moyens les plus efficaces pour améliorer la performance de vos applications Web est la mise en cache. Plusieurs méthodes sont proposées, mais la technique la plus simple consiste à ajouter une directive de mise en cache juste sous les directives de page.

&#60;%@ Page Language=&#34;C#&#34; AutoEventWireup=&#34;true&#34; CodeFile=&#34;index.aspx.cs&#34; Inherits=&#34;index&#34; Title=&#34;dgiw - [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.dgiw.net/blog/wp-content/uploads/2009/10/ajax_logo.png" alt="ajax_logo" title="ajax_logo" width="211" height="75" class="aligncenter size-full wp-image-224" /><br />
Dans la plate-forme ASP.Net,  un des moyens les plus efficaces pour améliorer la performance de vos applications Web est la mise en cache. Plusieurs méthodes sont proposées, mais la technique la plus simple consiste à ajouter une directive de mise en cache juste sous les directives de page.</p>
<pre class="brush: c#">
&lt;%@ Page Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeFile=&quot;index.aspx.cs&quot; Inherits=&quot;index&quot; Title=&quot;dgiw - accueil&quot; %&gt;

&lt;%@ OutputCache Duration=&quot;60&quot; VaryByParam=&quot;none&quot; %&gt;
</pre>
<p>Ce code constitue la plus simple expression de la directive de mise en cache. Pour plus de détails sur cette technique, consultez la documention sur <a href="http://msdn.microsoft.com/en-us/library/hdxfb6cy%28VS.80%29.aspx" target="_blank">MSDN</a>.</p>
<p>La seule ombre au tableau lorsqu&#8217;on utilise la directive «OutputCache» est qu&#8217;elle cohabite mal avec les extensions et les contrôles du <a href="http://www.asp.net/ajax/AjaxControlToolkit/Samples/" target="_blank">AJAX Control Toolkit</a>. Si, par exemple, on tente d&#8217;ajouter une extension <a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AutoComplete/AutoComplete.aspx" target="_blank">AutoComplete</a> à un contrôle TextBox dans une page avec une directive «OutputCache», on risque d&#8217;avoir le message d&#8217;erreur suivant :</p>
<p><code>Javascript error: AjaxToolkit is undefined.</code></p>
<p>Lorsqu&#8217;une requête est adressée à une page contenant une directive @OutputCache, le code côté-serveur ne sera pas exécuté si la page est déjà mise en cache. À ce moment, seulement le HTML et le code JavaScript mise en cache seront retournés, sans les références aux scripts clients de la librairie AJAX.</p>
<p>Dans <a href="http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=389102" target="_blank">la réponse officielle de Microsoft</a> aux nombreuses personnes qui ont signalé ce problème, on explique que l&#8217;utilisation de «output cache» combinée aux extensions AJAX et aux classes <a href="http://msdn.microsoft.com/fr-fr/library/system.web.ui.scriptmanagerproxy.aspx" target="_blank">ScriptManagerProxy</a>, <a href="http://msdn.microsoft.com/fr-fr/library/system.web.ui.scriptcontrol.aspx" target="_blank">ScriptControl</a> et <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.scriptreference.aspx" target="_blank">ScriptReference</a> n&#8217;est pas encore supportée. La solution proposée par Microsoft consiste à ajouter une référence aux scripts clients, nécéssaires aux fonctionnalités AJAX, à l&#8217;extérieur du contrôle mis en cache. Le hic avec cette proposition c&#8217;est qu&#8217;elle ne peut s&#8217;appliquer quand c&#8217;est la page en entier qui est mise en cache.</p>
<p>Il existe toutefois une solution. Normalement, avant de pouvoir utiliser des contrôles AJAX dans vos pages Web, vous devez d&#8217;abord y inclure un contrôle <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.aspx" target="_blank">ScriptManager</a> qui sert à gérer les scripts et les librairies ASP.NET AJAX. Le truc consiste à remplacer le contrôle ScriptManager par un contrôle <a href="http://blogs.msdn.com/delay/archive/2007/06/11/script-combining-made-easy-overview-of-the-ajax-control-toolkit-s-toolkitscriptmanager.aspx" target="_blank">ToolkitScriptManager</a>, une version améliorée du ScriptManager contenu dans le AJAX Control Toolkit.</p>
<p>Voici un exemple de l&#8217;utilisation du ToolkitScriptManager :</p>
<pre class="brush: c#">
&lt;%@ Master Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeFile=&quot;index.cs&quot; Inherits=&quot;index&quot; %&gt;

&lt;%@ Register Assembly=&quot;System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&quot;
    Namespace=&quot;System.Web.UI&quot; TagPrefix=&quot;asp&quot; %&gt;
&lt;%@ Register Assembly=&quot;AjaxControlToolkit&quot; Namespace=&quot;AjaxControlToolkit&quot; TagPrefix=&quot;cc1&quot; %&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;

&lt;/head&gt;
&lt;body&gt;
    &lt;form id=&quot;form1&quot; runat=&quot;server&quot;&gt;
    &lt;cc1:ToolkitScriptManager ID=&quot;ToolkitScriptManager1&quot; CombineScripts=&quot;true&quot; CombineScriptsHandlerUrl=&quot;/CombineScriptsHandler.ashx&quot; runat=&quot;server&quot;&gt;
    &lt;/cc1:ToolkitScriptManager&gt;
</pre>
<p>Dans le contrôle ToolkitScriptManager, on délégue la tâche de combiner les scripts au <a href="http://msdn.microsoft.com/en-us/library/bb398986.aspx">HTTP Handler</a>  CombineScriptsHandler.ashx. Ce fichier, qu&#8217;on trouve dans le site de démonstration du AJAX Control Toolkit, contient le code suivant :</p>
<pre class="brush: c#">
&lt;%@ WebHandler Language=&quot;C#&quot; Class=&quot;CombineScriptsHandler&quot; %&gt;

using System;
using System.Web;
using AjaxControlToolkit;

public class CombineScriptsHandler : IHttpHandler
{
    /// &lt;summary&gt;
    /// ProcessRequest implementation outputs the combined script file
    /// &lt;/summary&gt;
    /// &lt;param name=&quot;context&quot;&gt;&lt;/param&gt;
    public void ProcessRequest(HttpContext context)
    {
        if (!ToolkitScriptManager.OutputCombinedScriptFile(context))
        {
            throw new InvalidOperationException(&quot;Combined script file output failed unexpectedly.&quot;);
        }
    }

    /// &lt;summary&gt;
    /// IsReusable implementation returns true since this class is stateless
    /// &lt;/summary&gt;
    public bool IsReusable
    {
        get { return true; }
    }
}
</pre>
<p>Grâce à cette démarche, les fichiers JavaScript de la librairie ASP.NET AJAX seront combinés en un seul fichier qui pourra être mis en cache et partagé par l&#8217;ensemble des pages où on utilise le contrôle ToolkitScriptManager. </p>
<p>Ainsi, aux bénéfices de la mise en cache de nos pages s&#8217;ajoute la réduction du temps de téléchargement des scripts clients, désormais combinés en un seul script composite.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dgiw.net/blog/?feed=rss2&amp;p=100</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firebug + YSlow, un duo de choc pour l&#8217;optimisation de vos pages Web</title>
		<link>http://www.dgiw.net/blog/?p=43</link>
		<comments>http://www.dgiw.net/blog/?p=43#comments</comments>
		<pubDate>Mon, 28 Sep 2009 23:28:25 +0000</pubDate>
		<dc:creator>dgiw</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Firebug]]></category>
		<category><![CDATA[YSlow]]></category>

		<guid isPermaLink="false">http://www.dgiw.net/blog/?p=43</guid>
		<description><![CDATA[À moins d&#8217;être resté caché sous une pierre ces dernières années, la plupart des développeurs Web auront entendu parlé de Firebug, l&#8217;extension pour Mozilla Firefox qui permet de déboguer, éditer et modifier le HTML, le CSS et le JavaScript d&#8217;une page web. Je l&#8217;utilise surtout pour déboguer mon JavaScript et parfois pour cibler des anomalies [...]]]></description>
			<content:encoded><![CDATA[<p>À moins d&#8217;être resté caché sous une pierre ces dernières années, la plupart des développeurs Web auront entendu parlé de <a href="http://getfirebug.com/" target="_blank">Firebug</a>, l&#8217;extension pour Mozilla Firefox qui permet de déboguer, éditer et modifier le HTML, le CSS et le JavaScript d&#8217;une page web. Je l&#8217;utilise surtout pour déboguer mon JavaScript et parfois pour cibler des anomalies causées par mes règles CSS (à la condition qu&#8217;elle soient visibles dans Firefox !).</p>
<p><img class="aligncenter size-full wp-image-49" title="firebug_logo" src="http://www.dgiw.net/blog/wp-content/uploads/2009/09/firebug_logo.png" alt="firebug_logo" width="322" height="112" /></p>
<p>Un des outils de Firebug avec lequel je me suis familiarisé plus récemment est l&#8217;onglet <a href="http://getfirebug.com/net.html" target="_self">réseau</a>, une petite merveille pour surveiller les performances de vos page Web.  L&#8217;outil présente une liste des fichiers de la page, avec leur poid respectif, le temps de téléchargement de chacun, l&#8217;ordre dans lequel ils ont été chargés, quels sont les fichiers qui proviennent de la mémoire cache et ceux qui proviennent du réseau ainsi qu&#8217;une foule d&#8217;autres renseignements qui vous permettront de mieux cibler les responsables des lenteurs de certaines de vos pages.</p>
<p><img class="aligncenter size-full wp-image-70" title="firebug_network" src="http://www.dgiw.net/blog/wp-content/uploads/2009/09/firebug_network.png" alt="firebug_network" width="500" height="304" /></p>
<p>Pour compléter votre arsenal d&#8217;optimisation il existe <a href="http://developer.yahoo.com/yslow/" target="_blank">YSlow</a>, une autre extension de Firefox issue des ateliers de Yahoo, qui s&#8217;intégre à Firebug  pour évaluer vos pages Web selon une liste de <a href="http://developer.yahoo.com/performance/rules.html" target="_blank">34 bonnes pratiques</a>.</p>
<p><img class="aligncenter size-full wp-image-86" title="YSlowScreen1" src="http://www.dgiw.net/blog/wp-content/uploads/2009/09/YSlowScreen1.png" alt="YSlowScreen1" width="569" height="306" /></p>
<p>YSlow analyse vos page et génère un rapport détaillé de ce qui peut être fait pour en améliorer les performances. Parmi les nombreux outils proposé dans YSlow pour vous aider dans votre optimisation, on retrouve <a href="http://www.jslint.com/" target="_blank">JSLint</a> pour analyser vos JavaScripts, <em>All JS Minified</em> pour les compresser et <a href="http://developer.yahoo.com/yslow/smushit/" target="_blank">Smush.it</a>,  un service en ligne de Yahoo pour optimiser vos images.</p>
<p>Avec ces extensions, vous disposerez donc de moyens pour transformer votre site Web en bolide de course, pour peu qu&#8217;il soit animé par un moteur puissant et hébergé dans une écurie décente !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dgiw.net/blog/?feed=rss2&amp;p=43</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les «backup projects» dans MYSQL Administrator : le truc pour que ça marche !</title>
		<link>http://www.dgiw.net/blog/?p=17</link>
		<comments>http://www.dgiw.net/blog/?p=17#comments</comments>
		<pubDate>Sun, 27 Sep 2009 02:54:45 +0000</pubDate>
		<dc:creator>dgiw</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.dgiw.net/blog/?p=17</guid>
		<description><![CDATA[
Pourquoi les projets de backup créés dans MySQL Administrator sur Windows ne se déclenchent-ils pas automatiquement ? J&#8217;ai cherché la réponse à cette question un bon moment pour finalement trouver une solution toute simple.
Lorsqu&#8217;on créer un projet de backup de base de données et qu&#8217;on programme son exécution automatique, cela génère une entrée dans le [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-18" title="logo_mysql_admin" src="http://www.dgiw.net/blog/wp-content/uploads/2009/09/logo_mysql_admin.png" alt="logo_mysql_admin" width="124" height="54" /></p>
<p>Pourquoi les projets de backup créés dans MySQL Administrator sur Windows ne se déclenchent-ils pas automatiquement ? J&#8217;ai cherché la réponse à cette question un bon moment pour finalement trouver une solution toute simple.</p>
<p>Lorsqu&#8217;on créer un projet de backup de base de données et qu&#8217;on programme son exécution automatique, cela génère une entrée dans le planificateur de tâches de Windows qui porte le même nom que celui donné au projet de backup dans MySQL Administrator.</p>
<p><img class="aligncenter size-full wp-image-19" title="fenetre_task_scheduler1" src="http://www.dgiw.net/blog/wp-content/uploads/2009/09/fenetre_task_scheduler1.png" alt="fenetre_task_scheduler1" width="512" height="288" /></p>
<p>L&#8217;action de la tâche planifiée se résume comme suit :</p>
<p><code>"C:\Program Files\MySQL\MySQL Tools for 5.0\MySQLAdministrator.exe" "-UDC:\Users\Denis\AppData\Roaming\MySQL\" <span style="color: #ffff00;">"-cDefault" "-bpwp_dgiw" "-btC:\mysql_backups\" "-bxwp_dgiw"</span></code></p>
<p>On remarque ici que la commande et ses arguments sont tous entre guillemets et c&#8217;est précisément ce qui provoquait des erreurs lors de son l&#8217;exécution sur notre serveur Windows 2003. Afin de régler mon problème, je n&#8217;ai eu qu&#8217;à éditer la commande en retirant les guillemets des quatre derniers arguments :</p>
<p><img class="aligncenter size-full wp-image-20" title="fenetre_task_scheduler2" src="http://www.dgiw.net/blog/wp-content/uploads/2009/09/fenetre_task_scheduler2.png" alt="fenetre_task_scheduler2" width="468" height="504" /></p>
<p><code>"C:\Program Files\MySQL\MySQL Tools for 5.0\MySQLAdministrator.exe" "-UDC:\Users\Denis\AppData\Roaming\MySQL\" <span style="color: #ffff00;">-cDefault -bpwp_dgiw -btC:\mysql_backups\ -bxwp_dgiw</span></code></p>
<p>Depuis ces légères modifications, mes backups sont générés sans heurt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dgiw.net/blog/?feed=rss2&amp;p=17</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Serveurs virtuels Apache sous Windows&#8230;</title>
		<link>http://www.dgiw.net/blog/?p=3</link>
		<comments>http://www.dgiw.net/blog/?p=3#comments</comments>
		<pubDate>Sat, 06 Sep 2008 02:14:26 +0000</pubDate>
		<dc:creator>dgiw</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Wamp]]></category>

		<guid isPermaLink="false">http://www.dgiw.net/blog/?p=3</guid>
		<description><![CDATA[Dernièrement, je me suis créé en environnement de développement PHP avec Eclipse et le plugin PDT (PHP Developpement Tools) ainsi que WAMP 2.0 (Apache MySQL et PHP sur windows).
Je cherchait un moyen de créer un nom de domaine fictif pour chacun des sites sur mon serveur local (ex. php_hacks.local). En plus de simplifier les URL [...]]]></description>
			<content:encoded><![CDATA[<p>Dernièrement, je me suis créé en environnement de développement PHP avec Eclipse et le plugin PDT (PHP Developpement Tools) ainsi que WAMP 2.0 (Apache MySQL et PHP sur windows).</p>
<p>Je cherchait un moyen de créer un nom de domaine fictif pour chacun des sites sur mon serveur local (ex. php_hacks.local). En plus de simplifier les URL de mes applications, cela m&#8217;éviterais d&#8217;avoir à modifier les chemins «Path» utilisés dans le code avant la mise en ligne des sites sur le serveur de production.<br />
Après quelques recherches, j&#8217;ai découvert que la voie royale pour résoudre ce problème est de configurer des <a href="http://httpd.apache.org/docs/2.2/vhosts/" target="_blank">serveurs virtuels</a> dans Apache. Ces derniers permettent entre autres de déterminer plusieurs noms de domaines pour un seul numéro ip, que ce soit celui un serveur live (ex. 65.182.100.136) ou un serveur de développement (ex. 127.0.0.1).</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-15" title="apache_feather" src="http://www.dgiw.net/blog/wp-content/uploads/2008/09/apache_feather.png" alt="apache_feather" width="225" height="64" /></p>
<p><strong>En résumé, voici les étapes à suivre :</strong></p>
<p><span id="more-3"></span></p>
<p><strong>1-</strong> Décommentez la ligne suivante dans le ficher http.conf :</p>
<p><code>Include conf/extra/httpd-vhosts.conf</code></p>
<p>Cette instruction permet de faire référence au fichier où seront définit vos serveurs virtuels. Sur windows, le fichier httpd.conf se trouve normalement dans C:\Program Files\Apache Group\Apache2\conf\httpd.conf. Avec Wamp 2.0, vous le trouverez dans C:\Program Files\wamp\bin\apache\apache2.2.6\conf\httpd.conf</p>
<p><strong>2-</strong> Si l&#8217;endroit où se trouve le site est en dehors du dossier root par défaut du serveur Apache, vous devrez ajoutez une section semblable à celle-ci dans le fichier httpd-vhosts.conf :</p>
<p><code> &lt;Directory G:/www/php_hacks &gt;</code></p>
<p>Options Indexes FollowSymLinks</p>
<p># AllowOverride controls what directives may be placed in .htaccess files.</p>
<p># It can be &#8220;All&#8221;, &#8220;None&#8221;, or any combination of the keywords:</p>
<p>#   Options FileInfo AuthConfig Limit</p>
<p>#</p>
<p>AllowOverride All</p>
<p>#</p>
<p># Controls who can get stuff from this server.</p>
<p>#</p>
<p>Order allow,deny</p>
<p>Allow from all</p>
<p>Ce fichier se trouve dans C:\Program Files\Apache Group\Apache2\conf\extra\httpd-vhosts.conf. Avec Wamp 2.0, le fichier se trouve dans C:\Program Files\wamp\bin\apache\apache2.2.6\conf\extra\httpd-vhosts.conf.</p>
<p><strong>3-</strong> Toujours dans httpd-vhosts.conf, vous devrez ajouter une section semblable pour chaque serveur virtuel :</p>
<p><code> &lt;VirtualHost *:80&gt;</code></p>
<p>DocumentRoot G:/www/php_hacks</p>
<p>ServerName php_hacks.local</p>
<p>DocumentRoot est le chemin où se trouve le dossier du site et ServerName, le nom de domaine par lequel vous voudrez y accéder. Il est aussi possible d&#8217;y définir plusieurs autres paramètres (ex, ServerAdmin, ServerAlias, ErrorLog, CustomLog, ect.). Pour une description complète de ces derniers, référez-vous à la <a href="http://httpd.apache.org/docs/2.2/vhosts/" target="_blank">Documentation sur les serveurs virtuels Apache</a>.</p>
<p><strong>4-</strong> Vous devrez ajouter vos nomd de domaine fictifd à votre fichier hosts. Les utilisateurs de Windows le trouvent généralement dans %SystemRoot%\system32\drivers\etc\</p>
<p>Voici un exemple du fichier hosts qu&#8217;on retrouve sous Windows. On peut éditer ce fichier à l&#8217;aide de Notepad. L&#8217;entrée 127.0.0.1 localhost s&#8217;y trouve généralement par défaut. Il est préférable d&#8217;ajouter chacune des entrées sur une nouvelle ligne. Une entrée est constituée d&#8217;un numéro ip suivit du nom de domaine associé. Le numéro ip doit être séparé du nom domaine par au moins 1 espace. Il doit aussi y avoir un retour de ligne après la dernière entrée du fichier hosts.</p>
<p># Copyright © 1993-1999 Microsoft Corp.</p>
<p>#</p>
<p># This is a sample HOSTS file used by Microsoft TCP/IP for Windows.</p>
<p>#</p>
<p># This file contains the mappings of IP addresses to host names. Each</p>
<p># entry should be kept on an individual line. The IP address should</p>
<p># be placed in the first column followed by the corresponding host name.</p>
<p># The IP address and the host name should be separated by at least one</p>
<p># space.</p>
<p>#</p>
<p># Additionally, comments (such as these) may be inserted on individual</p>
<p># lines or following the machine name denoted by a &#8220;#&#8221; symbol.</p>
<p>#</p>
<p># For example:</p>
<p>#</p>
<p># 102.54.94.97 rhino.acme.com # source server</p>
<p># 38.25.63.10 x.acme.com # x client host</p>
<p>#</p>
<p>127.0.0.1	localhost</p>
<p>127.0.0.1	php_hacks.local</p>
<p><strong>5-</strong> Finalement, dans une fenêtre de commande, testez votre nouveau serveur virtuel avec l&#8217;instruction ping php_hacks.local. Vous devriez obtenir le résultat suivant :</p>
<p>Envoi d&#8217;une requête &#8216;ping&#8217; sur php_hacks.local [127.0.0.1] avec 32 octets de données :</p>
<p>Réponse de 127.0.0.1 : octets=32 temps&lt;1ms TTL=128</p>
<p>Réponse de 127.0.0.1 : octets=32 temps&lt;1ms TTL=128</p>
<p>Réponse de 127.0.0.1 : octets=32 temps&lt;1ms TTL=128</p>
<p>Réponse de 127.0.0.1 : octets=32 temps&lt;1ms TTL=128</p>
<p>Statistiques Ping pour 127.0.0.1:</p>
<p>Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),</p>
<p>Durée approximative des boucles en millisecondes :</p>
<p>Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms</p>
<p><strong>Pistes pour la résolution de problèmes :</strong></p>
<ul>
<li>ipconfig /flushdns</li>
<li>Vérifier la syntaxe du fichier hosts</li>
<li>Vérifier l&#8217;emplacement du fichier hosts</li>
<li>Vérifier la variables DataBasePath dans la base de registre <code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath</code></li>
<li>Suspendre le service DNS client</li>
<li>Revoir la priorité des services dans la base de registre</li>
<li>Assurez vous qu&#8217;il ne s&#8217;agit pas du vicieux bug dû à MSN Messenger. Dans la base de registre, sous <code>\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters</code> changer le type de la clé &#8220;DataBasePath&#8221; de REG_SZ en REG_EXPAND_SZIl s&#8217;agit d&#8217;un bug de l&#8217;outil de dépannage de MSN Messenger qui réinitialise cette clé (mais avec un mauvais type) lorsqu&#8217;il n&#8217;arrive pas à se connecter.</li>
</ul>
<p><strong>Liens utiles :</strong></p>
<ul>
<li><a href="http://www.mvps.org/winhelp2002/hostsfaq.htm" target="_blank">FAQ sur les fichier hosts </a></li>
<li><a href="http://httpd.apache.org/docs/2.2/vhosts/" target="_blank">Documentation sur les serveurs virtuels Apache</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dgiw.net/blog/?feed=rss2&amp;p=3</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
