<?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>LoïcG &#187; php</title>
	<atom:link href="http://blog.loicg.net/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.loicg.net</link>
	<description>Carnet d&#039;un développeur web</description>
	<lastBuildDate>Sat, 28 Aug 2010 13:11:58 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Activer les short-tags (PHP) depuis un .htaccess</title>
		<link>http://blog.loicg.net/webdev/activation-short-tags-php-htaccess/</link>
		<comments>http://blog.loicg.net/webdev/activation-short-tags-php-htaccess/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 19:55:52 +0000</pubDate>
		<dc:creator>Loïc</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.loicg.net/?p=1001</guid>
		<description><![CDATA[De nombreux gestionnaires de vues, codés en PHP, nécessitent l&#8217;activation des short-tags. A lieu de les activer dans mon php.ini, je préfère les laisser désactivés par défaut, je les active au cas par cas (tous les projets n&#8217;en ont pas la nécessité). Voici donc la ligne que j&#8217;ajoute aux .htaccess concernés : php_flag short_open_tag on [...]]]></description>
			<content:encoded><![CDATA[<p>De nombreux gestionnaires de vues, codés en PHP, nécessitent l&#8217;activation des short-tags.</p>
<p>A lieu de les activer dans mon php.ini, je préfère les laisser désactivés par défaut, je les active au cas par cas (tous les projets n&#8217;en ont pas la nécessité).</p>
<p>Voici donc la ligne que j&#8217;ajoute aux .htaccess concernés :</p>
<pre><code>php_flag short_open_tag on</code><span style="font-family: verdana; color: #000000; font-size: x-small;"> </span></pre>
<p><span style="font-family: verdana; color: #000000; font-size: x-small;">Et les shorts tags sont ainsi disponibles (sans relancer mon serveur Apache ^^)<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loicg.net/webdev/activation-short-tags-php-htaccess/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Découper une adresse physique grâce aux expressions régulières en PHP</title>
		<link>http://blog.loicg.net/webdev/decouper-adresse-expressions-regulieres/</link>
		<comments>http://blog.loicg.net/webdev/decouper-adresse-expressions-regulieres/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 10:00:57 +0000</pubDate>
		<dc:creator>Loïc</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[regex]]></category>

		<guid isPermaLink="false">http://blog.loicg.net/?p=992</guid>
		<description><![CDATA[Récemment, j&#8217;ai du découper une bonne liste d&#8217;adresses formatées ainsi : 12 bis rue du 18 Mai 1945, 78000 Versailles (je ne sais même pas si cette adresses existe, c&#8217;est un exemple..) Je souhaitais obtenir les informations suivantes : N° dans la voie + éventuellement la mention bis ou ter Nom de la voie Code [...]]]></description>
			<content:encoded><![CDATA[<p>Récemment, j&#8217;ai du découper une bonne liste d&#8217;adresses formatées ainsi :<br />
12 bis rue du 18 Mai 1945, 78000 Versailles<br />
(je ne sais même pas si cette adresses existe, c&#8217;est un exemple..)</p>
<p>Je souhaitais obtenir les informations suivantes :</p>
<ul>
<li>N° dans la voie + éventuellement la mention bis ou ter</li>
<li>Nom de la voie</li>
<li>Code Postal</li>
<li>Ville</li>
</ul>
<p><span id="more-992"></span>Au lieu de passer à la main sur la liste, j&#8217;ai codé un petit bout de PHP pour le faire à ma place <img src='http://blog.loicg.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Pour cela, je me suis servi des expressions régulières grâce à la fonction <a title="Documentation de preg_match" href="http://www.php.net/manual/fr/function.preg-match.php">preg_match(); </a></p>
<h2>Le code PHP :</h2>
<pre>preg_match('/^([\d\/-]+?[\h]?(bis|ter)?)[\h]*([\D]{3}.*),[\h]*([\d]{5})[\h]*(.*)$/i', $adresse, $aMatch);
$numero = $aMatch[1];
$voie = $aMatch[3];
$code_postal = $aMatch[4];
$ville = $aMatch[5];</pre>
<h2>Analyse :</h2>
<p>Analysons cette (magnifique, avouons-le) expression régulière :</p>
<pre>^([\d\/-]*[\h]?(bis|ter)?)[\h]*([\D]{3}.*),[\h]*([\d]{5})[\h]*(.*)$</pre>
<p>Dans l&#8217;ordre :</p>
<ul>
<li><span style="color: #00ccff;">^</span> : début du texte à analyser</li>
<li><span style="color: #00ccff;">([\d\/-]*[\h]?(bis|ter)?) </span>: capture d&#8217;une série de chiffres (pouvant comprendre un -, genre 5-7 rue &#8230;.) suivi ou non d&#8217;un espace puis de la mention &#8220;bis&#8221; ou &#8220;ter&#8221; (ou pas)</li>
<li><span style="color: #00ccff;">[\h]*</span> : aucun, un ou plusieurs espaces</li>
<li><span style="color: #00ccff;">([\D]{3}.*)</span> : 3 caractères qui ne sont pas numériques, suivi (ou non) de divers caractères (le nom de la voie)</li>
<li><span style="color: #00ccff;">,</span> : la virgule qui sépare le nom de la voie du code postal</li>
<li><span style="color: #00ccff;">[\h]*</span> : encore aucun, un ou plusieurs espaces</li>
<li><span style="color: #00ccff;">([\d]{5}) </span>: 5 caractères numériques (le code postal)</li>
<li><span style="color: #00ccff;">[\h]*</span> : encore aucun, un ou plusieurs espaces</li>
<li><span style="color: #00ccff;">(.*)</span> : une série de n&#8217;importe quel caractère (le nom de la ville)</li>
<li><span style="color: #00ccff;">$</span> : fin du texte à analyser</li>
</ul>
<p>J&#8217;ai utilisé le modificateur &#8220;i&#8221; en fin d&#8217;expression régulière pour que le traitement soit insensible à la case uniquement pour &#8220;bis&#8221; et &#8220;ter&#8221;).</p>
<p>Cette expression fonctionne sur ces adresses :</p>
<ul>
<li>12 bis rue du 18 Mai 1945, 78000 Versailles</li>
<li>5-7 avenue de Paris, 84000 Avignon</li>
<li>Place d&#8217;Arme, 75001 Paris</li>
<li>Certainement d&#8217;autres&#8230;</li>
</ul>
<p>Si j&#8217;ai omis quoi que ce soit, ou que l&#8217;expression ne fonctionne pas sur certaines adresses, n&#8217;hésitez pas à me le signaler dans les commentaires, je ferai évoluer ce bout de code <img src='http://blog.loicg.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loicg.net/webdev/decouper-adresse-expressions-regulieres/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Restaurer la variable $_GET après une réécriture d&#8217;URL</title>
		<link>http://blog.loicg.net/webdev/restaurer-variable-get-apres-reecriture-url/</link>
		<comments>http://blog.loicg.net/webdev/restaurer-variable-get-apres-reecriture-url/#comments</comments>
		<pubDate>Wed, 19 May 2010 19:26:37 +0000</pubDate>
		<dc:creator>Loïc</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.loicg.net/?p=936</guid>
		<description><![CDATA[Lorsqu&#8217;on utilise une réécriture d&#8217;URL (URL Rewriting pour les anglophones), la variable $_GET est remplie d&#8217;après les règles de réécriture dictées dans le fichier .htaccess, malheureusement on perd les autres paramètres passés en GET. Voici donc un snippet permettant de rétablir l&#8217;ordre dans sa variable $_GET : Le principe : Le principe est simple, on [...]]]></description>
			<content:encoded><![CDATA[<p>Lorsqu&#8217;on utilise une réécriture d&#8217;URL (URL Rewriting pour les anglophones), la variable $_GET est remplie d&#8217;après les règles de réécriture dictées dans le fichier .htaccess, malheureusement on perd les autres paramètres passés en GET.</p>
<p>Voici donc un snippet permettant de rétablir l&#8217;ordre dans sa variable $_GET :<span id="more-936"></span></p>
<h1>Le principe :</h1>
<p>Le principe est simple, on reprend l&#8217;URL de base, stockée dans $_SERVER['REQUEST_URI'], puis on va la découper pour récupérer les paramètres qui lui sont passés.</p>
<h1>Le code :</h1>
<pre>preg_match_all('/[\&amp;\?]([^\&amp;]+)=([^\&amp;]+)/', $_SERVER['REQUEST_URI'], $matches);//Découpage de l'URL
foreach($matches[1] as $k =&gt; $v) {
    if (!isset($_GET[$v]))
        $_GET[$v] = $matches[2][$k];//Injection dans la variable $_GET
}</pre>
<p>Nous voici désormais avec un variable $_GET complète <img src='http://blog.loicg.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Edit : <a href="http://www.eklablog.com/">Godefroy</a> me précise qu&#8217;on peut simplement utiliser le paramètre [QSA] en face de sa règle de réécriture ^^ (il me suffisait de lire la doc du <a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">mod_rewrite</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loicg.net/webdev/restaurer-variable-get-apres-reecriture-url/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Installer un serveur LAMP sur Ubuntu 10.04</title>
		<link>http://blog.loicg.net/how-to/installation-lamp-ubuntu-lucid-lynx/</link>
		<comments>http://blog.loicg.net/how-to/installation-lamp-ubuntu-lucid-lynx/#comments</comments>
		<pubDate>Fri, 14 May 2010 17:46:42 +0000</pubDate>
		<dc:creator>Loïc</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.loicg.net/?p=924</guid>
		<description><![CDATA[Les développeurs d&#8217;Ubuntu ont pensé aux développeurs web en préparant un paquet installant tout le package utile pour un serveur de développement. L&#8217;installation se fait par cette simple commande : sudo apt-get install lamp-server^ Ce package vous permettra d&#8217;installer Apache 2, PHP 5.3, MySQL 5.1 ainsi que SQLite et PERL. Comme vous le voyez, tout [...]]]></description>
			<content:encoded><![CDATA[<p>Les développeurs d&#8217;Ubuntu ont pensé aux développeurs web en préparant un paquet installant tout le package utile pour un serveur de développement.</p>
<p>L&#8217;installation se fait par cette simple commande :</p>
<pre>sudo apt-get install lamp-server^
</pre>
<p>Ce package vous permettra d&#8217;installer Apache 2, PHP 5.3, MySQL 5.1 ainsi que SQLite et PERL.</p>
<p>Comme vous le voyez, tout n&#8217;est pas indispensable (je regrette même qu&#8217;il n&#8217;ai pas inclus phpMyAdmin), mais l&#8217;essentiel est là. On installe un LAMP sans avoir à se souvenir du nom exact  de chaque paquet.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loicg.net/how-to/installation-lamp-ubuntu-lucid-lynx/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Performances : include VS require (en PHP)</title>
		<link>http://blog.loicg.net/webdev/performances-include-vs-require-en-php/</link>
		<comments>http://blog.loicg.net/webdev/performances-include-vs-require-en-php/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 12:00:51 +0000</pubDate>
		<dc:creator>Loïc</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.loicg.net/?p=883</guid>
		<description><![CDATA[Un nouveau jour, un nouveau bench. Suite à un échange avec @Darklg et @fabienthomas concernant les inclusions de scripts PHP, la question est tombée : Quelle est la manière la plus performante pour inclure des scripts, include() ou require() ? Conditions du test Cet ensemble de tests a été réalisés sur un Pentium 4 double [...]]]></description>
			<content:encoded><![CDATA[<p>Un nouveau jour, un nouveau bench. Suite à un échange avec <a href="http://www.twitter.com/Darklg">@Darklg</a> et <a href="http://www.twitter.com/fabienthomas">@fabienthomas</a> concernant les inclusions de scripts PHP, la question est tombée : Quelle est la manière la plus performante pour inclure des scripts, include() ou require() ?</p>
<div id="attachment_889" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.flickr.com/photos/kudumomo/2684116791/"><img class="size-full wp-image-889" title="Crédit photo : kudumomo" src="http://blog.loicg.net/wp-content/uploads/2010/04/2684116791_cfa16bc510.jpg" alt="" width="500" height="340" /></a><p class="wp-caption-text">Crédit photo : kudumomo</p></div>
<p><span id="more-883"></span></p>
<h1>Conditions du test</h1>
<p>Cet ensemble de tests a été réalisés sur un Pentium 4 double coeur, abreuvé par 3Go de RAM, faisant tourner Apache 2 et PHP 5.3.</p>
<p>Pour réaliser les tests, j&#8217;ai crée 500 scripts PHP ayant cette tête :</p>
<pre>&lt;?php
  class me_1{
    public function __construct(){
    }
  }
?&gt;</pre>
<p>enregistré sous le nom includeme_1.php</p>
<p>Le script &#8220;incluant&#8221; réalise une simple boucle for() et tente d&#8217;inclure les fichiers un à un.<br />
Une seconde version du script tente d&#8217;instancier la classe me_1, l&#8217;inclusion étant traitée par la fonction autoload() .</p>
<h1>Résultats</h1>
<p>Trêve de blabla technique, passons au résultats :</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-884" title="bench_include" src="http://blog.loicg.net/wp-content/uploads/2010/04/bench_include.jpg" alt="" width="424" height="179" /></p>
<p>Légende :</p>
<ol>
<li>fonction : la fonction utilisée (sisi)</li>
<li>chemine : le type de chemin employé pour l&#8217;inclusion</li>
<li>() : appel de la fonction PHP include(&#8216;toto.php&#8217;)</li>
<li>&#8221; : appel de la fonction native include &#8216;toto.php&#8217; (réputée plus rapide &#8230;)</li>
<li>autoload : résultats obtenus avec le second script (sachant que j&#8217;ai utililisé les fonctions natives)</li>
</ol>
<h1>Code de test</h1>
<p>Vous trouverez dans ce zip les codes utilisés pour réaliser les tests : <a href="http://blog.loicg.net/wp-content/uploads/2010/04/benchmark.zip">Benchmark</a></p>
<h1>Conclusion</h1>
<p>J&#8217;étais parti avec à l&#8217;a-priori que include était plus rapide que require, car require bloque le script dans le cas où il ne trouve pas le fichier à inclure, hors cette séance de benchmarking nous montre que les deux fonctions jouent à égalité.<br />
Egalement, les versions &#8220;_once&#8221; me semblait plus lentes car elles vérifient que le script n&#8217;a pas déjà été inclus, et les résultats m&#8217;ont donné raison (ouf ^^).<br />
Je pensais également que la fonction &#8220;autoload&#8221; rajoutait du temps d&#8217;exécution, et, à mon grand étonnement, ce n&#8217;est pas le cas. Du coup, ça en fait une fonction encore plus intéressante.</p>
<p>Ce test reste synthétique et ne peut correspondre à une utilisation en condition réelle car les scripts à inclure sont vides et assez petits. Toutefois, la répétition par 500x permet, à mon avis, de pallier à cette lacune.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loicg.net/webdev/performances-include-vs-require-en-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Performances des boucles en PHP</title>
		<link>http://blog.loicg.net/webdev/performances-boucles-php/</link>
		<comments>http://blog.loicg.net/webdev/performances-boucles-php/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 06:17:16 +0000</pubDate>
		<dc:creator>Loïc</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.loicg.net/?p=872</guid>
		<description><![CDATA[En PHP, il existe différents moyens de faire des boucles sur les valeurs d&#8217;un tableau (array). Que ce soit en utilisant une boucle for, while ou foreach, le résultat est le même, on parcourt les différents éléments inclus dans le tableau. Mais toutes ces fonctions ne se valent pas en terme de performance. Pour en [...]]]></description>
			<content:encoded><![CDATA[<p>En PHP, il existe différents moyens de faire des boucles sur les valeurs d&#8217;un tableau (array). Que ce soit en utilisant une boucle for, while ou foreach, le résultat est le même, on parcourt les différents éléments inclus dans le tableau.</p>
<div id="attachment_876" class="wp-caption aligncenter" style="width: 389px"><a href="http://www.flickr.com/photos/12495774@N02/2405297371/"><img class="size-full wp-image-876" src="http://blog.loicg.net/wp-content/uploads/2010/04/2405297371_e4b348201a.jpg" alt="" width="379" height="264" /></a><p class="wp-caption-text">Crédit photo : shaggy359</p></div>
<p style="text-align: center;">
<p>Mais toutes ces fonctions ne se valent pas en terme de performance. Pour en avoir le coeur net et constater les différences, j&#8217;ai fait un mini-benchmark de ces 3 boucles :<span id="more-872"></span></p>
<h1>Le test :</h1>
<p>Le test consiste à parcourir un tableau d&#8217;un million d&#8217;éléments allant de 1 à 1.000.000 . Chaque boucle se contente de parcourir les valeurs, et ne fait rien d&#8217;autre.</p>
<pre>$array = range(1,1000000);//Création du tableau</pre>
<p>La machine utilisée pour ce test est un Pentium 4 double coeur épaulé par 3Go de RAM sur lequel est installé Apache 2 accompagné de PHP5.3</p>
<h1>Les résultats :</h1>
<pre>foreach($array as $a){} :0.106s
foreach($array as &amp;$a){} :0.101s
for($i=0;$i &lt; count($array);$i++){} : 1.874s
for($i=0;$i &lt; count($array);++$i){} : 1.901s
for($i=0;$i&lt;$c;$i++){} : 0.281s
for($i=0;$i&lt;$c;++$i){} : 0.264s
for($i=0;isset($array[$i]);$i++){} : 0.286s
for($i=0;isset($array[$i]);++$i){} : 0.279s
while(isset($array[$i])){++$i;} : 0.256s
while($elm = next($array)){} : 1.638s
while(next($array)){current($array);}  : 3.349s</pre>
<h1>Conclusion :</h1>
<p>On constate que la boucle foreach est bien plus rapide que ces &#8220;collègues&#8221;, vient ensuite la boucle while, suivie de la boucle for. Personnellement, je ne m&#8217;attendais pas à ce que la boucle foreach soit plus performante que les autres. Dans mon esprit le classement aurait été while,for puis foreach&#8230;</p>
<p>Désormais, nous connaissons la performance des unes par rapport aux autres.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loicg.net/webdev/performances-boucles-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Géolocalisation (IP to country) en PHP</title>
		<link>http://blog.loicg.net/how-to/geolocalisationip-to-country-php/</link>
		<comments>http://blog.loicg.net/how-to/geolocalisationip-to-country-php/#comments</comments>
		<pubDate>Sun, 11 Apr 2010 09:58:52 +0000</pubDate>
		<dc:creator>Loïc</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[Services Web]]></category>
		<category><![CDATA[geolocalisation]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.loicg.net/?p=834</guid>
		<description><![CDATA[Suite à une demande de @babozor , j&#8217;ai ressorti un snippet pour de la conversion IP to Country : $country = file_get_contents('http://api.hostip.info/country.php?ip='.$ip); Le pays est retourné dans sa forme &#8220;courte&#8221; (FR, US, UK, etc &#8230;). L&#8217;API de hostip.info permet d&#8217;obtenir plus d&#8217;informations telles que les coordonnées GPS ou la ville.]]></description>
			<content:encoded><![CDATA[<p>Suite à une demande de <a href="http://twitter.com/babozor">@babozor</a> , j&#8217;ai ressorti un snippet pour de la conversion IP to Country :</p>
<pre>$country = file_get_contents('http://api.hostip.info/country.php?ip='.$ip);</pre>
<p>Le pays est retourné dans sa forme &#8220;courte&#8221; (FR, US, UK, etc &#8230;).</p>
<p>L&#8217;API de <a href="http://www.hostip.info/use.html">hostip.info</a> permet d&#8217;obtenir plus d&#8217;informations telles que les coordonnées GPS ou la ville.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loicg.net/how-to/geolocalisationip-to-country-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP : db_2_classes</title>
		<link>http://blog.loicg.net/webdev/classe-php-db_2_classes/</link>
		<comments>http://blog.loicg.net/webdev/classe-php-db_2_classes/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 22:08:05 +0000</pubDate>
		<dc:creator>Loïc</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[objet]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.loicg.net/?p=819</guid>
		<description><![CDATA[Je viens d&#8217;attaquer un projet perso, et me suis lancé dans un petit framework maison (from scratch). Ce framework est en MVC et repose sur des classes. Dans mon esprit, chaque classe doit comporter ses propres variables, ainsi qu&#8217;un moyen de la situer par rapport aux autres classes. Il existe des solutions pour définir les [...]]]></description>
			<content:encoded><![CDATA[<p>Je viens d&#8217;attaquer un projet perso, et me suis lancé dans un petit framework maison (from scratch). Ce framework est en MVC et repose sur des classes. Dans mon esprit, chaque classe doit comporter ses propres variables, ainsi qu&#8217;un moyen de la situer par rapport aux autres classes.</p>
<p>Il existe des solutions pour définir les jointures entre les classes. Par exemple dans <a href="http://www.symfony-project.org/">Symfony</a>, il existe des fichiers de configuration (en yml). On définit son modèle, on lance un p&#8217;tit script et &#8220;HOP !&#8221;, voici de belles classes de bases prêtes à être héritées.<br />
Autrement, il existe la solution de <a title="Kohana Framework" href="http://kohanaphp.fr/">Kohana</a>, qui consiste à indiquer les relations dans chaque classe, manuellement.<span id="more-819"></span></p>
<p>Bref, les solutions existent, toutefois le truc que je trouve lourdingue, c&#8217;est de faire coller en permanence les  classes avec les tables en bases de données. En cours de développement,  mes tables et leurs champs bougent beaucoup. Du coup, il faut  systématiquement que je reporte chaque modification dans la classe qui  va bien&#8230;</p>
<p>Partant du principe que la base de données comporte déjà toutes les infos nécessaires. Je me suis dit qu&#8217;il serait possible d&#8217;extraire les informations inclues dans chaque tables, et de reporter ces infos dans des classes en PHP. C&#8217;est déjà un premier pas : lister les champs de la table&#8230; En fouillant un peu, je détermine les champs primaires, et je peux même typer mes variables (en quelque sorte &#8230;).</p>
<p>Tout ça c&#8217;est bien, mais en m&#8217;imposant une convention de nommage, j&#8217;arriverai même à esquisser des jointures et des tables pivots détectables facilement depuis un script.<br />
Par exemple :</p>
<pre>p_table1_table2 est la table pivot entre table1 et table2.</pre>
<p>Le résultat, c&#8217;est une petite classe, composée de quelques méthodes statiques qui :</p>
<ul>
<li>Analyse une base de données, donnée</li>
<li>Détermine les relations entre les tables</li>
<li>Génère un script PHP par table (hors pivots)</li>
</ul>
<p>Désormais, quand je développe :</p>
<ol>
<li>Modifs dans la base de données</li>
<li>Exécution de mon script</li>
<li>Mes classes sont à jours ^^</li>
</ol>
<p>J&#8217;offre ce code à qui en a besoin. Le tout est livré sous licence <a href="http://fr.wikipedia.org/wiki/Beerware">BeerWare</a>, car si mon code vous plait et qu&#8217;on se croise, libre à vous de me payer un boc <img src='http://blog.loicg.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Le zip ci-joint contient la classe, ainsi qu&#8217;un petit exemple et ma méthode d&#8217;écriture des scripts PHP (libre à vous de la changer ^^).</p>
<p><a href="http://blog.loicg.net/wp-content/uploads/2010/03/db_2_classes.zip">db_2_classes.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loicg.net/webdev/classe-php-db_2_classes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Décortiquer le fichier hosts de Windows en PHP</title>
		<link>http://blog.loicg.net/webdev/decortiquer-fichier-hosts-windows-php/</link>
		<comments>http://blog.loicg.net/webdev/decortiquer-fichier-hosts-windows-php/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 17:16:12 +0000</pubDate>
		<dc:creator>Loïc</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://blog.loicg.net/?p=823</guid>
		<description><![CDATA[J&#8217;me suis fait un petit code pour switcher mes hosts facilement. En voici une des composantes, l&#8217;expression régulière pour exploser le fichier : /^(#?)([0-9\.]+)[\s]+([a-z0-9\._-]+)/ En PHP, ça donne : $contenu_du_host = file_get_contents("c:\windows\system32\drivers\etc\hosts"); preg_match_all('/^(#?)([0-9\.]+)[\s]+([a-z0-9\._-]+)/im',$contenu_du_host,$result); Le résultat : Array ( [0] =&#62; Array ( [0] =&#62; 127.0.0.1 localhost [1] =&#62; 127.0.0.1 dev.murl.fr ) [1] =&#62; Array ( [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;me suis fait un petit code pour switcher mes hosts facilement. En voici une des composantes, l&#8217;expression régulière pour exploser le fichier :</p>
<pre>/^(#?)([0-9\.]+)[\s]+([a-z0-9\._-]+)/</pre>
<p><span id="more-823"></span>En PHP, ça donne :</p>
<pre>$contenu_du_host = file_get_contents("c:\windows\system32\drivers\etc\hosts");</pre>
<pre>preg_match_all('/^(#?)([0-9\.]+)[\s]+([a-z0-9\._-]+)/im',$contenu_du_host,$result);</pre>
<p>Le résultat :</p>
<pre>Array
(
    [0] =&gt; Array
        (
            [0] =&gt; 127.0.0.1       localhost
            [1] =&gt; 127.0.0.1		dev.murl.fr
        )

    [1] =&gt; Array
        (
            [0] =&gt;
            [1] =&gt;
        )

    [2] =&gt; Array
        (
            [0] =&gt; 127.0.0.1
            [1] =&gt; 127.0.0.1
        )

    [3] =&gt; Array
        (
            [0] =&gt; localhost
            [1] =&gt; dev.murl.fr
        )

)</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.loicg.net/webdev/decortiquer-fichier-hosts-windows-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuration de sSMTP pour utiliser GMail depuis PHP</title>
		<link>http://blog.loicg.net/how-to/configuration-sendmail-gmail/</link>
		<comments>http://blog.loicg.net/how-to/configuration-sendmail-gmail/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 21:34:03 +0000</pubDate>
		<dc:creator>Loïc</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[serveur]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.loicg.net/?p=754</guid>
		<description><![CDATA[Depuis peu, j&#8217;ai pris un serveur (VPS) chez Gandi. A l&#8217;installation j&#8217;ai choisi une Ubuntu 9.04 (édition serveur, bien entendu) toute nue. S&#8217;en est suivie une configuration du serveur web (nginx+apache2, je reviendrai dessus dans un prochain billet). La semaine dernière, j&#8217;ai configuré l&#8217;envoi de mail via sSMTP pour pouvoir utiliser mon compte GMail depuis [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis peu, j&#8217;ai pris un serveur (VPS) chez <a title="Hebergement et noms de domaine" href="http://www.gandi.net/">Gandi</a>.<br />
A l&#8217;installation j&#8217;ai choisi une Ubuntu 9.04 (édition serveur, bien entendu) toute nue. S&#8217;en est suivie une configuration du serveur web (nginx+apache2, je reviendrai dessus dans un prochain billet).</p>
<p><img class="aligncenter size-full wp-image-756" title="Gmail - nouveau message" src="http://blog.loicg.net/wp-content/uploads/2009/11/Gmail-envoyer-un-message.PNG" alt="Gmail - nouveau message" width="159" height="98" /></p>
<p>La semaine dernière, j&#8217;ai configuré l&#8217;envoi de mail via sSMTP pour pouvoir utiliser mon compte GMail depuis ma console SSH ou depuis mes scripts PHP.<span id="more-754"></span> sSMTP est une mini-application qui permet (après configuration) d&#8217;utiliser la fonction sendmail avec un compte GMail, ce qui me procure un système d&#8217;envoi de mails efficaces, spacieux, autogéré et surtout je ne voulais pas m&#8217;amuser à configurer un serveur de mail complet (du type posix, exim, etc &#8230;) uniquement pour envoyer quelques mails depuis PHP&#8230;</p>
<p>Trêve de clavardage, on se remonte les manches et on ouvre le capot (ou un terminal, ça fera tout aussi bien l&#8217;affaire).<br />
<em>(la procédure d&#8217;installation/configuration se fait en SuperUtilisateur &#8211; su)</em>.</p>
<p>Tout d&#8217;abord, installons le dénommé sSMTP :</p>
<pre>apt-get install ssmtp</pre>
<p>Ensuite, il va falloir configurer la bête , ça se passe dans /etc/ssmtp/ssmtp.conf :</p>
<pre>nano /etc/ssmtp/ssmtp.conf</pre>
<p>y coller tout ceci (en prenant soin de remplacer moimoimoi et monmotdepassesecret par les bonnes infos &#8230;) :</p>
<pre>root=moimoimoi@gmail.com
mailhub=smtp.gmail.com:587
rewriteDomain=
hostname=moimoimoi@gmail.com
UseSTARTTLS=YES
AuthUser=moimoimoi
AuthPass=monmotdepassesecret
FromLineOverride=YES</pre>
<p>un Ctrl+X pour fermer nano, puis un Y (pour yes), puis on passe aux aliases, qui se trouvent dans /etc/ssmtp/revaliases :</p>
<pre>nano /etc/ssmtp/revaliases</pre>
<p>y coller tout ceci (en remplaçant &#8220;monlogindemamachine&#8221; par votre vrai login):</p>
<pre>root:moimoimoi@gmail.com:smtp.gmail.com:587
monlogindemamachine:moimoimoi@gmail.com:smtp.gmail.com:587</pre>
<p>Et voilà, c&#8217;est fini. Vous pouvez vous essuyer les mains et tester l&#8217;envoi de mail depuis votre serveur ^^</p>
<p>Source : <a title="Setup Gmail sSMTP" href="http://www.delodder.be/howto/gmail-with-ssmtp-on-deb-based-system/">Delodder.be</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loicg.net/how-to/configuration-sendmail-gmail/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk (enhanced) (user agent is rejected)

Served from: blog.loicg.net @ 2010-09-07 00:57:23 -->