<?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>Mazakim&#039;s Blog</title>
	<atom:link href="http://www.mazikim.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mazikim.com</link>
	<description>Open Source - Linux - CakePHP - Jeux ...</description>
	<lastBuildDate>Tue, 10 Apr 2012 07:25:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Monter un dossier ssh avec sshfs sous Fedora !</title>
		<link>http://www.mazikim.com/fedora/monter-un-dossier-ssh-avec-sshfs-sous-fedora/</link>
		<comments>http://www.mazikim.com/fedora/monter-un-dossier-ssh-avec-sshfs-sous-fedora/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 22:42:59 +0000</pubDate>
		<dc:creator>Aymeric DERBOIS</dc:creator>
				<category><![CDATA[bash]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[mount]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://www.mazikim.com/?p=618</guid>
		<description><![CDATA[Il arrive souvent que l&#8217;on souhaite manipuler des fichiers sur un serveur distant comme si ces fichiers étaient sur notre propre machine. Il y évidemment des solutions avec FTP, NFS, &#8230; Le problème avec ces solutions c&#8217;est qu&#8217;il faut faire tout un tas de configurations pour réussir à monter un simple dossier. Et sshfs fût créé ! sshfs ? sshfs permet de monter un dossier en utilisant le protocole SFTP. sshfs a de nombreux avantages. Les principaux sont qu&#8217;il ne nécessite pas d&#8217;être root et que les transfères sont sécurisés ! Installation sur Fedora $ sudo yum install fuse-sshfs Monter<a href="http://www.mazikim.com/fedora/monter-un-dossier-ssh-avec-sshfs-sous-fedora/">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>Il arrive souvent que l&#8217;on souhaite manipuler des fichiers sur un serveur distant comme si ces fichiers étaient sur notre propre machine.</p>
<p>Il y évidemment des solutions avec FTP, NFS, &#8230; Le problème avec ces solutions c&#8217;est qu&#8217;il faut faire tout un tas de configurations pour réussir à monter un simple dossier. Et sshfs fût créé !</p>
<p><strong>sshfs ?</strong></p>
<p>sshfs permet de monter un dossier en utilisant le protocole SFTP.<br />
sshfs a de nombreux avantages. Les principaux sont qu&#8217;il ne nécessite pas d&#8217;être root et que les transfères sont sécurisés !</p>
<p><strong>Installation sur Fedora</strong></p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="bash"><pre class="de1"><span class="co4">$ </span><span class="kw2">sudo</span> <span class="kw2">yum install</span> fuse-sshfs</pre></div></div></div></div></div></div></div>


<p><strong>Monter un dossier</strong><br />
Nous allons créer un dossier dans notre home et nous allons monter le serveur distant dans celui-ci</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="bash"><pre class="de1">$ <span class="kw3">cd</span> ~
$ <span class="kw2">mkdir</span> folder
$ sshfs hôte:<span class="sy0">/</span>home<span class="sy0">/</span>toto folder</pre></div></div></div></div></div></div></div>


<p>Cette suite de commande va monter le répertoire distant &laquo;&nbsp;<em>/home/toto</em>&nbsp;&raquo; dans le dossier local &laquo;&nbsp;<em>folder</em>&nbsp;&raquo;</p>
<p><strong>Démonter un dossier</strong></p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="bash"><pre class="de1"><span class="co4">$ </span>fusermount <span class="re5">-u</span> folder</pre></div></div></div></div></div></div></div>


<p><strong>Conclusion</strong><br />
Et voilà maintenant vous savez comment monter un dossier distant de manière sécurisée en ayant à faire le minimum de configuration côté serveur !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mazikim.com/fedora/monter-un-dossier-ssh-avec-sshfs-sous-fedora/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trier un tableau &#8211; Découvrir les fonctions de PHP</title>
		<link>http://www.mazikim.com/php/trier-un-tableau-decouvrir-les-fonctions-de-php/</link>
		<comments>http://www.mazikim.com/php/trier-un-tableau-decouvrir-les-fonctions-de-php/#comments</comments>
		<pubDate>Sun, 08 Apr 2012 19:23:17 +0000</pubDate>
		<dc:creator>Aymeric DERBOIS</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[fonction]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sort]]></category>
		<category><![CDATA[tri]]></category>

		<guid isPermaLink="false">http://www.mazikim.com/?p=561</guid>
		<description><![CDATA[Les tableaux en PHP sont indispensables et nous allons voir comment les trier. Nous allons commencer par les fonctions simples à utiliser et ensuite nous utiliserons les fonctions qui permettent de faire des tris plus complexes. Les fonctions de tri ont une nomenclature bien particulière qui permet de savoir exactement ce que fait la fonction. Par défaut toutes les fonctions contiennent le mot &#171;&#160;sort&#171;&#160;. Ensuite certaines lettres sont ajoutées au début du nom de la fonction. Par exemple la lettre &#171;&#160;k&#160;&#187; (par exemple avec la fonction ksort) sert à trier sur les clefs. Il y a donc le &#171;&#160;k&#160;&#187; pour<a href="http://www.mazikim.com/php/trier-un-tableau-decouvrir-les-fonctions-de-php/">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>Les tableaux en PHP sont indispensables et nous allons voir comment les trier. Nous allons commencer par les fonctions simples à utiliser et ensuite nous utiliserons les fonctions qui permettent de faire des tris plus complexes.</p>
<p>Les fonctions de tri ont une nomenclature bien particulière qui permet de savoir exactement ce que fait la fonction. Par défaut toutes les fonctions contiennent le mot &laquo;&nbsp;<em>sort</em>&laquo;&nbsp;. Ensuite certaines lettres sont ajoutées au début du nom de la fonction. Par exemple la lettre &laquo;&nbsp;<em>k</em>&nbsp;&raquo; (par exemple avec la fonction <em>ksort</em>) sert à trier sur les clefs. Il y a donc le &laquo;&nbsp;<em>k</em>&nbsp;&raquo; pour trier sur les clefs, le &laquo;&nbsp;<em>a</em>&nbsp;&raquo; pour garder la relation entre les clefs et les valeurs, le &laquo;&nbsp;<em>r</em>&nbsp;&raquo; pour trier en ordre inverse et le &laquo;&nbsp;<em>u</em>&nbsp;&raquo; pour trier avec une fonction personnelle.</p>
<p><strong>bool <strong>sort</strong> ( array <code>&amp;$array</code> [, int <code>$sort_flags</code> = SORT_REGULAR ] ) :</strong><br />
Le premier paramètre que prend <em>sort</em> est le tableau que vous souhaitez trier. Le tri se fait par rapport aux valeurs. Comme pour toutes les fonctions de tri il faut éviter que le tableau passé en paramètre contienne des types de valeur différents sinon le résultat risque d&#8217;être imprévisible.<br />
Le second paramètre, optionnel, est un flag qui permet de modifier le comportement du tri.</p>
<p>Nous allons voir quelques exemples d&#8217;utilisations</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="coMULTI">/* compare les éléments normalement */</span>
<span class="re0">$tableau</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'c'</span><span class="sy0">,</span> <span class="st_h">'d'</span><span class="sy0">,</span> <span class="st_h">'b'</span><span class="sy0">,</span> <span class="st_h">'a'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">sort</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">//array</span>
<span class="co1">//  0 =&gt; string 'a' (length=1)</span>
<span class="co1">//  1 =&gt; string 'b' (length=1)</span>
<span class="co1">//  2 =&gt; string 'c' (length=1)</span>
<span class="co1">//  3 =&gt; string 'd' (length=1)</span>
&nbsp;
<span class="coMULTI">/* compare les éléments comme des chaînes de caractères */</span>
<span class="re0">$tableau</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'10'</span><span class="sy0">,</span> <span class="st_h">'1'</span><span class="sy0">,</span> <span class="st_h">'2'</span><span class="sy0">,</span> <span class="st_h">'20'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">sort</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="sy0">,</span> SORT_STRING<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">//array</span>
<span class="co1">//  0 =&gt; string '1' (length=1)</span>
<span class="co1">//  1 =&gt; string '10' (length=2)</span>
<span class="co1">//  2 =&gt; string '2' (length=1)</span>
<span class="co1">//  3 =&gt; string '20' (length=2)</span>
&nbsp;
<span class="coMULTI">/* compare les éléments comme des entiers */</span>
<span class="re0">$tableau</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'10'</span><span class="sy0">,</span> <span class="st_h">'1'</span><span class="sy0">,</span> <span class="st_h">'2'</span><span class="sy0">,</span> <span class="st_h">'20'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">sort</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="sy0">,</span> SORT_NUMERIC<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">//array</span>
<span class="co1">//  0 =&gt; string '1' (length=1)</span>
<span class="co1">//  1 =&gt; string '2' (length=1)</span>
<span class="co1">//  2 =&gt; string '10' (length=2)</span>
<span class="co1">//  3 =&gt; string '20' (length=2)</span></pre></div></div></div></div></div></div></div>


<p>La doc pour la fonction <em>sort </em>est disponible <a href="http://fr.php.net/manual/fr/function.sort.php" title="ici">ici</a></p>
<p><strong>bool rsort ( array &#038;$array [, int $sort_flags = SORT_REGULAR ] ) :</strong><br />
Cette fonction fonctionne exactement comme la fonction <em>sort </em>une différence près, la fonction <em>rsort </em>tri en ordre inverse.<br />
Pas besoin de faire d&#8217;exemple, ce serait les mêmes que pour <em>sort</em> !<br />
La doc pour la fonction <em>rsort </em>est disponible <a href="http://php.net/manual/fr/function.rsort.php" title="ici">ici</a></p>
<p><strong>bool asort ( array &#038;$array [, int $sort_flags = SORT_REGULAR ] ) :</strong><br />
Cette fonction, encore une fois, est presque identique à la fonction sort à la différence qu&#8217;elle garde la relation entre les index et les valeurs<br />
On peut, comme pour la fonction sort, utiliser des flags pour modifier le comportement du tri.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>
<span class="coMULTI">/* compare les éléments normalement, gardant les relations entre les clefs et les valeurs */</span>
<span class="re0">$tableau</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'c'</span><span class="sy0">,</span> <span class="st_h">'d'</span><span class="sy0">,</span> <span class="st_h">'b'</span><span class="sy0">,</span> <span class="st_h">'a'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">asort</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">//array</span>
<span class="co1">//  3 =&gt; string 'a' (length=1)</span>
<span class="co1">//  2 =&gt; string 'b' (length=1)</span>
<span class="co1">//  0 =&gt; string 'c' (length=1)</span>
<span class="co1">//  1 =&gt; string 'd' (length=1)</span></pre></div></div></div></div></div></div></div>


<p>La doc pour la fonction <em>asort </em>est disponible <a href="http://php.net/manual/fr/function.asort.php" title="ici">ici</a></p>
<p><strong>bool arsort ( array &#038;$array [, int $sort_flags = SORT_REGULAR ] ) :</strong><br />
Fonctionne exactement comme la fonction <em>asort</em> à la différence qu&#8217;elle trie en ordre inverse.</p>
<p>La doc pour la fonction <em>arsort </em>est disponible <a href="http://php.net/manual/fr/function.arsort.php" title="ici">ici</a></p>
<p><strong>bool ksort ( array &#038;$array [, int $sort_flags = SORT_REGULAR ] ) :</strong><br />
Cette fonction de tri, contrairement aux autres, fait le tri en fonction des clefs. Elle maintient la relation entre les clefs et les valeurs.</p>
<p>Encore une fois on peut utiliser des flags pour modifier le comportement de la fonction de tri.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>
<span class="coMULTI">/* compare les éléments normalement*/</span>
<span class="re0">$tableau</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="nu0">1</span> <span class="sy0">=&gt;</span> <span class="st_h">'c'</span><span class="sy0">,</span> <span class="nu0">0</span> <span class="sy0">=&gt;</span> <span class="st_h">'d'</span><span class="sy0">,</span> <span class="nu0">3</span> <span class="sy0">=&gt;</span> <span class="st_h">'b'</span><span class="sy0">,</span> <span class="nu0">4</span> <span class="sy0">=&gt;</span> <span class="st_h">'a'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">ksort</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">//array</span>
<span class="co1">//  0 =&gt; string 'd' (length=1)</span>
<span class="co1">//  1 =&gt; string 'c' (length=1)</span>
<span class="co1">//  3 =&gt; string 'b' (length=1)</span>
<span class="co1">//  4 =&gt; string 'a' (length=1)</span>
&nbsp;
<span class="coMULTI">/* compare les éléments normalement */</span>
<span class="re0">$tableau</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'n'</span> <span class="sy0">=&gt;</span> <span class="st_h">'c'</span><span class="sy0">,</span> <span class="st_h">'d'</span> <span class="sy0">=&gt;</span> <span class="st_h">'d'</span><span class="sy0">,</span> <span class="st_h">'a'</span> <span class="sy0">=&gt;</span> <span class="st_h">'b'</span><span class="sy0">,</span> <span class="st_h">'g'</span> <span class="sy0">=&gt;</span> <span class="st_h">'a'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">ksort</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">//array</span>
<span class="co1">//  'a' =&gt; string 'b' (length=1)</span>
<span class="co1">//  'd' =&gt; string 'd' (length=1)</span>
<span class="co1">//  'g' =&gt; string 'a' (length=1)</span>
<span class="co1">//  'n' =&gt; string 'c' (length=1)</span></pre></div></div></div></div></div></div></div>


<p>La doc pour la fonction <em>ksort </em>est disponible <a href="http://php.net/manual/fr/function.ksort.php" title="ici">ici</a></p>
<p><strong>bool krsort ( array &#038;$array [, int $sort_flags = SORT_REGULAR ] ) :</strong><br />
Fonctionne exactement comme la fonction <em>krsort</em> à la différence qu&#8217;elle trie en ordre inverse.</p>
<p>La doc pour la fonction <em>krsort </em>est disponible <a href="http://php.net/manual/fr/function.krsort.php" title="ici">ici</a></p>
<p><strong>bool usort ( array &#038;$array , callable $cmp_function ) :</strong><br />
Cette fonction permet de trier un tableau grâce à notre propre fonction de tri. Pour cela on passe en second paramètre une fonction qui doit retourner un booléen. Les fonctions lambda sont parfaites pour cela.<br />
On utilise généralement cette fonction de tri pour des tableaux multidimensionnels.</p>
<p>Dans l&#8217;exemple nous avons un tableau multi-dimensionnel, plus exactement un tableau de tableau. Nous souhaitons trier le tableau en fonction de &laquo;&nbsp;<em>l&#8217;id</em>&laquo;&nbsp;. Pour résumer nous allons trier les sous-tableaux en fonction du contenu de ceux-ci (et plus particulièrement l&#8217;id dans notre exemple).</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>
<span class="coMULTI">/* compare les éléments par rapport à l'id grâce à une fonction lambda */</span>
<span class="coMULTI">/* Utilisation avec un callback */</span>
<span class="re0">$tableau</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span>
  <span class="nu0">0</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span>
    <span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="nu0">18</span><span class="sy0">,</span>
    <span class="st_h">'name'</span> <span class="sy0">=&gt;</span> <span class="st_h">'Roger'</span>
  <span class="br0">&#41;</span><span class="sy0">,</span>
	<span class="nu0">1</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span>
    <span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="nu0">5</span><span class="sy0">,</span>
    <span class="st_h">'name'</span> <span class="sy0">=&gt;</span> <span class="st_h">'George'</span>
  <span class="br0">&#41;</span><span class="sy0">,</span>
	<span class="nu0">2</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span>
    <span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="nu0">7</span><span class="sy0">,</span>
    <span class="st_h">'name'</span> <span class="sy0">=&gt;</span> <span class="st_h">'Mike'</span>
  <span class="br0">&#41;</span>
<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw2">function</span> my_compare_function <span class="br0">&#40;</span><span class="re0">$a</span><span class="sy0">,</span> <span class="re0">$b</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
  <span class="kw1">return</span> <span class="re0">$a</span><span class="br0">&#91;</span><span class="st_h">'id'</span><span class="br0">&#93;</span> <span class="sy0">&gt;</span> <span class="re0">$b</span><span class="br0">&#91;</span><span class="st_h">'id'</span><span class="br0">&#93;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="kw3">usort</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="sy0">,</span> <span class="st0">&quot;my_compare_function&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">//array</span>
<span class="co1">//  0 =&gt; </span>
<span class="co1">//    array</span>
<span class="co1">//      'id' =&gt; int 5</span>
<span class="co1">//      'name' =&gt; string 'George' (length=6)</span>
<span class="co1">//  1 =&gt; </span>
<span class="co1">//    array</span>
<span class="co1">//      'id' =&gt; int 7</span>
<span class="co1">//      'name' =&gt; string 'Mike' (length=4)</span>
<span class="co1">//  2 =&gt; </span>
<span class="co1">//    array</span>
<span class="co1">//      'id' =&gt; int 18</span>
<span class="co1">//      'name' =&gt; string 'Roger' (length=5)</span></pre></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>
<span class="coMULTI">/* compare les éléments par rapport à l'id grâce à une fonction lambda */</span>
<span class="coMULTI">/* Utilisation avec une fonction lambda */</span>
<span class="re0">$tableau</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span>
  <span class="nu0">0</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span>
    <span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="nu0">18</span><span class="sy0">,</span>
    <span class="st_h">'name'</span> <span class="sy0">=&gt;</span> <span class="st_h">'Roger'</span>
  <span class="br0">&#41;</span><span class="sy0">,</span>
	<span class="nu0">1</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span>
    <span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="nu0">5</span><span class="sy0">,</span>
    <span class="st_h">'name'</span> <span class="sy0">=&gt;</span> <span class="st_h">'George'</span>
  <span class="br0">&#41;</span><span class="sy0">,</span>
	<span class="nu0">2</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span>
    <span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="nu0">7</span><span class="sy0">,</span>
    <span class="st_h">'name'</span> <span class="sy0">=&gt;</span> <span class="st_h">'Mike'</span>
  <span class="br0">&#41;</span>
<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">usort</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="sy0">,</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="re0">$a</span><span class="sy0">,</span> <span class="re0">$b</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="kw1">return</span> <span class="re0">$a</span><span class="br0">&#91;</span><span class="st_h">'id'</span><span class="br0">&#93;</span> <span class="sy0">&gt;</span> <span class="re0">$b</span><span class="br0">&#91;</span><span class="st_h">'id'</span><span class="br0">&#93;</span><span class="sy0">;</span> <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">//array</span>
<span class="co1">//  0 =&gt; </span>
<span class="co1">//    array</span>
<span class="co1">//      'id' =&gt; int 5</span>
<span class="co1">//      'name' =&gt; string 'George' (length=6)</span>
<span class="co1">//  1 =&gt; </span>
<span class="co1">//    array</span>
<span class="co1">//      'id' =&gt; int 7</span>
<span class="co1">//      'name' =&gt; string 'Mike' (length=4)</span>
<span class="co1">//  2 =&gt; </span>
<span class="co1">//    array</span>
<span class="co1">//      'id' =&gt; int 18</span>
<span class="co1">//      'name' =&gt; string 'Roger' (length=5)</span></pre></div></div></div></div></div></div></div>


<p>La doc pour la fonction <em>usort </em>est disponible <a href="http://php.net/manual/fr/function.usort.php" title="ici">ici</a></p>
<p><strong>bool uasort ( array &#038;$array , callable $cmp_function ) :</strong><br />
Cette fonction fonctionne comme la fonction <em>usort</em> à la différence qu&#8217;elle garde la relation entre les clefs et les valeurs.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>
<span class="coMULTI">/* compare les éléments par rapport à l'id grâce à une fonction lambda */</span>
<span class="coMULTI">/* Utilisation avec une fonction lambda */</span>
<span class="re0">$tableau</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span>
  <span class="nu0">0</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span>
    <span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="nu0">18</span><span class="sy0">,</span>
    <span class="st_h">'name'</span> <span class="sy0">=&gt;</span> <span class="st_h">'Roger'</span>
  <span class="br0">&#41;</span><span class="sy0">,</span>
	<span class="nu0">1</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span>
    <span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="nu0">5</span><span class="sy0">,</span>
    <span class="st_h">'name'</span> <span class="sy0">=&gt;</span> <span class="st_h">'George'</span>
  <span class="br0">&#41;</span><span class="sy0">,</span>
	<span class="nu0">2</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span>
    <span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="nu0">7</span><span class="sy0">,</span>
    <span class="st_h">'name'</span> <span class="sy0">=&gt;</span> <span class="st_h">'Mike'</span>
  <span class="br0">&#41;</span>
<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">uasort</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="sy0">,</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="re0">$a</span><span class="sy0">,</span> <span class="re0">$b</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="kw1">return</span> <span class="re0">$a</span><span class="br0">&#91;</span><span class="st_h">'id'</span><span class="br0">&#93;</span> <span class="sy0">&gt;</span> <span class="re0">$b</span><span class="br0">&#91;</span><span class="st_h">'id'</span><span class="br0">&#93;</span><span class="sy0">;</span> <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">var_dump</span><span class="br0">&#40;</span><span class="re0">$tableau</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">//array</span>
<span class="co1">//  1 =&gt; </span>
<span class="co1">//    array</span>
<span class="co1">//      'id' =&gt; int 5</span>
<span class="co1">//      'name' =&gt; string 'George' (length=6)</span>
<span class="co1">//  2 =&gt; </span>
<span class="co1">//    array</span>
<span class="co1">//      'id' =&gt; int 7</span>
<span class="co1">//      'name' =&gt; string 'Mike' (length=4)</span>
<span class="co1">//  0 =&gt; </span>
<span class="co1">//    array</span>
<span class="co1">//      'id' =&gt; int 18</span>
<span class="co1">//      'name' =&gt; string 'Roger' (length=5)</span></pre></div></div></div></div></div></div></div>


<p>La doc pour la fonction <em>uasort </em>est disponible <a href="http://php.net/manual/fr/function.uasort.php" title="ici">ici</a></p>
<p><strong>bool uksort ( array &#038;$array , callable $cmp_function ) :</strong><br />
Cette fonction fonctionne comme la fonction <em>usort</em> à la différence qu&#8217;elle trie en sur les clefs et non pas les valeurs.</p>
<p>La doc pour la fonction <em>uksort </em>est disponible <a href="http://php.net/manual/fr/function.uksort.php" title="ici">ici</a></p>
<p><strong>Conclusion</strong></p>
<p>On a vu pas mal de fonctions avec beaucoup d&#8217;exemples. Evidemment, il y d&#8217;autres solutions pour trier un tableau en PHP. Cependant, nous avons fait le tour des fonctions qui vous servirons dans 90% des cas.</p>
<p>Comme d&#8217;habitude, n&#8217;hésitez pas à aller voir la doc lorsque vous avez des doutes !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mazikim.com/php/trier-un-tableau-decouvrir-les-fonctions-de-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Découvrir les fonctions de PHP</title>
		<link>http://www.mazikim.com/php/decouvrir-les-fonctions-de-php/</link>
		<comments>http://www.mazikim.com/php/decouvrir-les-fonctions-de-php/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 18:15:16 +0000</pubDate>
		<dc:creator>Aymeric DERBOIS</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.mazikim.com/?p=554</guid>
		<description><![CDATA[PHP est un langage haut niveau qui est accompagné d&#8217;un nombre de impressionnant fonctions qui permettent de gagner beaucoup de temps lorsqu&#8217;on les connait. Que ce soit pour les strings, les tableaux, &#8230;, l&#8217;ensemble des fonctions de PHP est expliqué sur le site officiel du langage. La doc françaises est disponible en suivant ce lien : http://www.php.net/manual/fr/ Bien que la doc soit complète et comporte de nombreux exemples je vais me lancer dans un suite d&#8217;article composé uniquement d&#8217;exemples concrets d&#8217;utilisation de fonction PHP. Il arrive en effet parfois que les exemples ne soit pas assez nombreux et simple de compréhension. Je<a href="http://www.mazikim.com/php/decouvrir-les-fonctions-de-php/">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>PHP est un langage haut niveau qui est accompagné d&#8217;un nombre de impressionnant fonctions qui permettent de gagner beaucoup de temps lorsqu&#8217;on les connait. Que ce soit pour les strings, les tableaux, &#8230;, l&#8217;ensemble des fonctions de PHP est expliqué sur le site officiel du langage. La doc françaises est disponible en suivant ce lien : <a href="http://www.php.net/manual/fr/">http://www.php.net/manual/fr/</a></p>
<p>Bien que la doc soit complète et comporte de nombreux exemples je vais me lancer dans un suite d&#8217;article composé uniquement d&#8217;exemples concrets d&#8217;utilisation de fonction PHP. Il arrive en effet parfois que les exemples ne soit pas assez nombreux et simple de compréhension.</p>
<p>Je vais essayer, si j&#8217;y arrive, de faire au moins deux articles par semaine. C&#8217;est pas gagné au vu de mon emploi du temps !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mazikim.com/php/decouvrir-les-fonctions-de-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Afficher le debug dans CakePHP</title>
		<link>http://www.mazikim.com/cakephp/afficher-le-debug-dans-cakephp/</link>
		<comments>http://www.mazikim.com/cakephp/afficher-le-debug-dans-cakephp/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 14:39:07 +0000</pubDate>
		<dc:creator>Aymeric DERBOIS</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[sql dump]]></category>

		<guid isPermaLink="false">http://www.mazikim.com/?p=541</guid>
		<description><![CDATA[Aujourd&#8217;hui je vais vous proposer une petite astuce sur CakePHP et son mode debug. Le mode debug ? CakePHP propose un mode debug qui permet d&#8217;afficher des informations bien intéressantes. Ce mode contient plusieurs outils. Le premier est la fonction &#171;&#160;debug();&#160;&#187; qui est plus ou moins équivalente à &#171;&#160;var_dump();&#160;&#187;. Elle est très pratique pour l&#8217;affichage des tableaux. Le deuxième outils est un tableau récapitulatif des requêtes effectuées par les modèles. C&#8217;est très utile pour vérifier que CakePHP ne fasse pas trop de bêtises ! En plus de cela le mode debug permet d&#8217;afficher les erreurs et warning, de rafraîchir les<a href="http://www.mazikim.com/cakephp/afficher-le-debug-dans-cakephp/">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>Aujourd&#8217;hui je vais vous proposer une petite astuce sur CakePHP et son mode debug.</p>
<p><strong>Le mode debug ?</strong></p>
<p>CakePHP propose un mode debug qui permet d&#8217;afficher des informations bien intéressantes. Ce mode contient plusieurs outils.<br />
Le premier est la fonction &laquo;&nbsp;debug();&nbsp;&raquo; qui est plus ou moins équivalente à &laquo;&nbsp;var_dump();&nbsp;&raquo;. Elle est très pratique pour l&#8217;affichage des tableaux.<br />
Le deuxième outils est un tableau récapitulatif des requêtes effectuées par les modèles. C&#8217;est très utile pour vérifier que CakePHP ne fasse pas trop de bêtises !</p>
<p>En plus de cela le mode debug permet d&#8217;afficher les erreurs et warning, de rafraîchir les caches des modèles &#8230;<br />
Il existe deux niveaux d&#8217;erreur qui permettent d&#8217;afficher plus ou moins d&#8217;informations.</p>
<p>Pour activer le mode debug il suffit d&#8217;aller dans le fichier app/Config/core.php et de passer le mode debug à 2 :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1">Configure<span class="sy0">::</span><span class="me2">write</span><span class="br0">&#40;</span><span class="st_h">'debug'</span><span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>On peut aussi activer temporairement le mode debug dans une fonction par exemple.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span>
<span class="kw2">class</span> UsersController <span class="kw2">extends</span> AppController <span class="br0">&#123;</span>
    <span class="kw2">public</span> index <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="coMULTI">/* ... Some code ...*/</span>
        Configure<span class="sy0">::</span><span class="me2">write</span><span class="br0">&#40;</span><span class="st_h">'debug'</span><span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span>
        debug <span class="br0">&#40;</span><span class="re0">$variable</span><span class="br0">&#41;</span><span class="sy0">;</span>
        Configure<span class="sy0">::</span><span class="me2">write</span><span class="br0">&#40;</span><span class="st_h">'debug'</span><span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="coMULTI">/* ... Some code ...*/</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Dans cet exemple on active le mode debug pour pouvoir utiliser la fonction debug().</p>
<p><strong>L&#8217;astuce du jour !</strong></p>
<p>Le tableau s&#8217;affichant en bas de votre page n&#8217;est accessible que depuis le template par défaut. Par conséquent si vous utilisez votre propre thème vous n&#8217;aurez plus ces précieuses informations.<br />
En faîte depuis la version 2 de CakePHP ce tableau à été déplacé dans un element qu&#8217;il faut donc inclure dans votre thème de la manière suivante :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw2">&lt;?php</span> <span class="kw1">echo</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">element</span><span class="br0">&#40;</span><span class="st_h">'sql_dump'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy1">?&gt;</span></pre></div></div></div></div></div></div></div>


<p>Et voilà grâce à ce changement vous avez de nouveau accès à ce tableau très utile !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mazikim.com/cakephp/afficher-le-debug-dans-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Création d&#8217;un Makefile [1/2]</title>
		<link>http://www.mazikim.com/c/creation-dun-makefile-12/</link>
		<comments>http://www.mazikim.com/c/creation-dun-makefile-12/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 15:07:28 +0000</pubDate>
		<dc:creator>Aymeric DERBOIS</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Makefile]]></category>

		<guid isPermaLink="false">http://www.mazikim.com/?p=522</guid>
		<description><![CDATA[Voici une screencast dans lequel j&#8217;explique comment créer un Makefile. Cr&#233;ation d&#039;un Makefile par azmimik]]></description>
			<content:encoded><![CDATA[<p>Voici une screencast dans lequel j&#8217;explique comment créer un Makefile.</p>
<p><iframe frameborder="0" width="560" height="448" src="http://www.dailymotion.com/embed/video/xlf48v"></iframe><br /><a href="http://www.dailymotion.com/video/xlf48v_creation-d-un-makefile_tech" target="_blank">Cr&eacute;ation d&#039;un Makefile</a> <i>par <a href="http://www.dailymotion.com/azmimik" target="_blank">azmimik</a></i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mazikim.com/c/creation-dun-makefile-12/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Installation et Configuration de LAMP sur CentOS5 [2/3]</title>
		<link>http://www.mazikim.com/centos/installation-et-configuration-de-lamp-sur-centos5-23/</link>
		<comments>http://www.mazikim.com/centos/installation-et-configuration-de-lamp-sur-centos5-23/#comments</comments>
		<pubDate>Sat, 01 Oct 2011 15:01:41 +0000</pubDate>
		<dc:creator>Aymeric DERBOIS</dc:creator>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Mysql]]></category>

		<guid isPermaLink="false">http://www.mazikim.com/?p=500</guid>
		<description><![CDATA[Cette article est la suite de : Installation et Configuration de LAMP sur CentOS5 [1/2]. Voici la démarche pour installer Apache PHP MySQL sur un serveur CentOS5 [2/2] : Maintenant que nous avons les bases d&#8217;un système LAMP installé nous allons commencer par créer des utilisateurs MySQL avec une base de données. Nous allons créer un utilisateur qui s’appelle &#171;&#160;toto&#160;&#187;. Commençons par lancer l&#8217;invité de commande MySQL : mysql&#62; mysql -uroot -p Maintenant créons l&#8217;utilisateur toto : mysql&#62; CREATE USER 'toto'@'localhost' IDENTIFIED BY 'motdepasse'; Il faut changer &#8216;modepasse&#8217; par celui voulu Nous allons ensuite enlever tous les droits de l&#8217;utilisateur<a href="http://www.mazikim.com/centos/installation-et-configuration-de-lamp-sur-centos5-23/">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>Cette article est la suite de : <a href="http://www.mazikim.com/centos/installation-et-configuration-de-lamp-sur-centos5/">Installation et Configuration de LAMP sur CentOS5 [1/2]</a>.</p>
<p><strong>Voici la démarche pour installer Apache PHP MySQL sur un serveur CentOS5  [2/2] :</strong></p>
<p>Maintenant que nous avons les bases d&#8217;un système LAMP installé nous allons commencer par créer des utilisateurs MySQL avec une base de données.</p>
<p>Nous allons créer un utilisateur qui s’appelle &laquo;&nbsp;toto&nbsp;&raquo;. Commençons par lancer l&#8217;invité de commande MySQL :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="bash"><pre class="de1">mysql<span class="sy0">&gt;</span> mysql <span class="re5">-uroot</span> <span class="re5">-p</span></pre></div></div></div></div></div></div></div>


<p>Maintenant créons l&#8217;utilisateur toto :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="sql"><pre class="de1">mysql<span class="sy0">&gt;</span> <span class="kw1">CREATE</span>  <span class="kw1">USER</span> <span class="st0">'toto'</span>@<span class="st0">'localhost'</span> <span class="kw1">IDENTIFIED</span> <span class="kw1">BY</span> <span class="st0">'motdepasse'</span>;</pre></div></div></div></div></div></div></div>


<p>Il faut changer &#8216;modepasse&#8217; par celui voulu</p>
<p>Nous allons ensuite enlever tous les droits de l&#8217;utilisateur sur le serveur MySQL. Pour cela nous allons utiliser la fonction GRANT.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="sql"><pre class="de1">mysql<span class="sy0">&gt;</span> <span class="kw1">GRANT</span> USAGE <span class="kw1">ON</span> <span class="sy0">*</span> <span class="sy0">.</span> <span class="sy0">*</span> <span class="kw1">TO</span> <span class="st0">'toto'</span>@<span class="st0">'localhost'</span> <span class="kw1">IDENTIFIED</span> <span class="kw1">BY</span> <span class="st0">'motdepasse'</span>;</pre></div></div></div></div></div></div></div>


<p>Nous utilisons ici le droit &laquo;&nbsp;USAGE&nbsp;&raquo; qui enlève tous les droits. Pour la liste des droits : <a href="http://dev.mysql.com/doc/refman/5.0/fr/grant.html">http://dev.mysql.com/doc/refman/5.0/fr/grant.html</a></p>
<p>Créons maintenant une base de données &laquo;&nbsp;tutorials&nbsp;&raquo;. Nous gérerons le cas ou la table exist déjà :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="sql"><pre class="de1">mysql<span class="sy0">&gt;</span> <span class="kw1">CREATE</span> <span class="kw1">DATABASE</span> <span class="kw1">IF</span> <span class="kw1">NOT</span> <span class="kw1">EXISTS</span> <span class="st0">`tutorials`</span> ;</pre></div></div></div></div></div></div></div>


<p>Pour finir avec MySQL nous allons donner à toto tous les droits sur la table &laquo;&nbsp;tutorials&nbsp;&raquo;. Nous utiliserons là encore la commande GRANT</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="sql"><pre class="de1">mysql<span class="sy0">&gt;</span> <span class="kw1">GRANT</span> <span class="kw1">ALL</span> PRIVILEGES <span class="kw1">ON</span> <span class="st0">`tutorials`</span> <span class="sy0">.</span> <span class="sy0">*</span> <span class="kw1">TO</span> <span class="st0">'toto'</span>@<span class="st0">'localhost'</span>;</pre></div></div></div></div></div></div></div>


<p>Dernière commande et pas des moindre :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="sql"><pre class="de1">mysql<span class="sy0">&gt;</span> <span class="kw1">FLUSH</span> PRIVILEGES;</pre></div></div></div></div></div></div></div>


<p>Maintenant il suffit de se connecter à PhpMyAdmin pour vérifier que l&#8217;utilisateur et la base ont bien été créés.<br />
Dans la troisième et dernière partie de ce tutorial j&#8217;expliquerais comment créer des vHost Apache.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mazikim.com/centos/installation-et-configuration-de-lamp-sur-centos5-23/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quel framework Javascript choisir ?</title>
		<link>http://www.mazikim.com/jquery/quel-framework-javascript-choisir/</link>
		<comments>http://www.mazikim.com/jquery/quel-framework-javascript-choisir/#comments</comments>
		<pubDate>Sun, 21 Aug 2011 09:49:20 +0000</pubDate>
		<dc:creator>Aymeric DERBOIS</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[Framework javacript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[motools]]></category>

		<guid isPermaLink="false">http://www.mazikim.com/?p=493</guid>
		<description><![CDATA[En voilà une bonne question ! D&#8217;ailleurs pour être franc je n&#8217;y répondrais pas directement mais je vais proposer quelques pistes intéressantes à suivre pour faire ce choix. Voici déjà quelques questions à se poser avant de choisir un framework Un framework est-il vraiment nécessaire ? Si votre seul souhait est de faire uniquement des requêtes Ajax par exemple l&#8217;utilisation d&#8217;un framework n&#8217;est pas du tout obligatoire. Vitesse de développement / Vitesse du programme ? Dit autrement peut-on se permettre de perdre en exécution pour privilégier la vitesse de développement. C&#8217;est en effet le risque avec les frameworks. Bien souvent<a href="http://www.mazikim.com/jquery/quel-framework-javascript-choisir/">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>En voilà une bonne question ! D&#8217;ailleurs pour être franc je n&#8217;y répondrais pas directement mais je vais proposer quelques pistes intéressantes à suivre pour faire ce choix.</p>
<p><strong>Voici déjà quelques questions à se poser avant de choisir un framework</strong></p>
<p><em>Un framework est-il vraiment nécessaire ?</em><br />
Si votre seul souhait est de faire uniquement des requêtes Ajax par exemple l&#8217;utilisation d&#8217;un framework n&#8217;est pas du tout obligatoire. </p>
<p><em>Vitesse de développement / Vitesse du programme ?</em><br />
Dit autrement peut-on se permettre de perdre en exécution pour privilégier la vitesse de développement. C&#8217;est en effet le risque avec les frameworks. Bien souvent un framework qui propose une grande simplicité de développement impose de moins bonnes performances (bien que ça ne soit pas obligatoirement le cas).</p>
<p><em>La communauté est-elle importante ?</em><br />
Jquery est un exemple de framework ayant une grosse communauté et il faut avouer que ça a pas mal d&#8217;avantage. Le nombre de tutoriaux sur le net est assez impressionnants, il y a pas mal de plugins et on trouve facilement de l&#8217;aide via les forums de discussions.</p>
<p><em>Compatibilité du framework</em><br />
A vous de voire selon vos besoins, mais il est vrai qu&#8217;un framework qui tourne sur l&#8217;ensemble des navigateurs est à privilégier !</p>
<p><em>Que veux-je faire avec ?</em><br />
Faire des animations ou faire une grosse webapps à la google docs n&#8217;a pas grand chose à voire. Le choix du framework va donc dépendre du type de projet sur lequel vous allez bosser.</p>
<p><strong>Quelques liens qui pourront vous aider à choisir</strong><br />
<a href="http://matthiasschuetz.com/javascript-framework-matrix/en/">Framework Matrix</a> : Une comparaison d&#8217;utilisation des frameworks. A voir absolument !<br />
<a href="http://mootools.net/slickspeed/">SlicksSpeed</a> : Comparatif de vitesse des selecteurs des différents frameworks. Attention cependant ce ne sont pas forcément les dernières versions des frameworks<br />
<a href="http://dante.dojotoolkit.org/taskspeed/">TaskSpeed</a> : Comparatif de vitesse de tâches simples des différents framworks. Attention ici encore ce ne sont pas forcéments les dernières versions des frameworks.</p>
<p><strong>Conclusion</strong><br />
Ce sont en gros l&#8217;ensemble des questions que je me suis posées, et les liens que j&#8217;ai trouvés les plus intéressants. Mais je doit avouer qu&#8217;aujourd&#8217;hui je ne sais toujours pas lequel utiliser !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mazikim.com/jquery/quel-framework-javascript-choisir/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilisation des sockets non-bloquant en python</title>
		<link>http://www.mazikim.com/python/utilisation-des-sockets-non-bloquant-en-python/</link>
		<comments>http://www.mazikim.com/python/utilisation-des-sockets-non-bloquant-en-python/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 20:23:41 +0000</pubDate>
		<dc:creator>Aymeric DERBOIS</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.mazikim.com/?p=477</guid>
		<description><![CDATA[L&#8217;utilisation des sockets en Python est vraiment simplifié par rapport à d&#8217;autre langage comme le C ou le C++. Voici un exemple d&#8217;un serveur &#171;&#160;echo&#160;&#187; qui comme son nom l&#8217;indique renvoi au client ce qu&#8217;il a envoyé. Pour ce serveur nous utiliserons les sockets non-bloquant. Lien de la doc sockets : http://docs.python.org/library/socket.html Lien de la doc select : http://docs.python.org/library/select.html Les commentaires sont nombreux, cependant si il y a un problème n&#8217;hésitez pas à m&#8217;en faire par en commentaire # -*- coding: UTF-8 -*- ############################################################################### ## @author : Mazikim ## ## @file : Sockets.py ## ############################################################################### &#160; import select import socket<a href="http://www.mazikim.com/python/utilisation-des-sockets-non-bloquant-en-python/">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>L&#8217;utilisation des sockets en Python est vraiment simplifié par rapport à d&#8217;autre langage comme le C ou le C++. Voici un exemple d&#8217;un serveur &laquo;&nbsp;echo&nbsp;&raquo; qui comme son nom l&#8217;indique renvoi au client ce qu&#8217;il a envoyé.<br />
Pour ce serveur nous utiliserons les sockets non-bloquant.</p>
<p>Lien de la doc sockets : <a href="http://docs.python.org/library/socket.html">http://docs.python.org/library/socket.html</a><br />
Lien de la doc select : <a href="http://docs.python.org/library/select.html">http://docs.python.org/library/select.html</a></p>
<p>Les commentaires sont nombreux, cependant si il y a un problème n&#8217;hésitez pas à m&#8217;en faire par en commentaire</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="python"><pre class="de1"><span class="co1"># -*- coding: UTF-8 -*-</span>
<span class="co1">###############################################################################</span>
<span class="co1">##  @author : Mazikim                                                        ##</span>
<span class="co1">##  @file : Sockets.py                                                       ##</span>
<span class="co1">###############################################################################</span>
&nbsp;
<span class="kw1">import</span> <span class="kw3">select</span>
<span class="kw1">import</span> <span class="kw3">socket</span>
&nbsp;
<span class="kw1">class</span> Server:
&nbsp;
	<span class="co1"># Contructeur de la class Server.</span>
	<span class="co1">#</span>
	<span class="co1"># @param port Port de connexion</span>
	<span class="co1"># @param listen Nombre de connexion en attente max</span>
	<span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="sy0">,</span> port <span class="sy0">=</span> <span class="nu0">35890</span><span class="sy0">,</span> listen <span class="sy0">=</span> <span class="nu0">5</span><span class="br0">&#41;</span>:
		<span class="co1"># Initialisation of attr</span>
		<span class="kw2">self</span>.<span class="me1">nbClients</span> <span class="sy0">=</span> <span class="nu0">0</span>	<span class="co1"># Nombre de client connecté</span>
		<span class="kw2">self</span>.<span class="me1">sockets</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span>	<span class="co1"># Liste des sockets client</span>
&nbsp;
		<span class="co1"># Création du socket serveur</span>
		<span class="kw2">self</span>.<span class="kw3">socket</span> <span class="sy0">=</span> <span class="kw3">socket</span>.<span class="kw3">socket</span><span class="br0">&#40;</span><span class="kw3">socket</span>.<span class="me1">AF_INET</span><span class="sy0">,</span> <span class="kw3">socket</span>.<span class="me1">SOCK_STREAM</span><span class="br0">&#41;</span>
		<span class="kw2">self</span>.<span class="kw3">socket</span>.<span class="me1">setsockopt</span><span class="br0">&#40;</span><span class="kw3">socket</span>.<span class="me1">SOL_SOCKET</span><span class="sy0">,</span> <span class="kw3">socket</span>.<span class="me1">SO_REUSEADDR</span><span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span>
		<span class="co1"># On passe le socket serveur en non-bloquant</span>
		<span class="kw2">self</span>.<span class="kw3">socket</span>.<span class="me1">setblocking</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>
		<span class="co1"># On attache le socket au port d'écoute. </span>
		<span class="kw2">self</span>.<span class="kw3">socket</span>.<span class="me1">bind</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="st0">''</span><span class="sy0">,</span> port<span class="br0">&#41;</span><span class="br0">&#41;</span>
		<span class="co1"># On lance l'écoute du serveur. &quot;listen&quot; est le nombre max de </span>
		<span class="co1"># connexion quand la file d'attente</span>
		<span class="kw2">self</span>.<span class="kw3">socket</span>.<span class="me1">listen</span><span class="br0">&#40;</span>listen<span class="br0">&#41;</span>
&nbsp;
&nbsp;
&nbsp;
	<span class="co1"># Surcouche de la fonction socket.recv</span>
	<span class="co1"># On utilise le système d'exeption de recv pour savoir si il reste</span>
	<span class="co1"># des donnees a lire</span>
	<span class="co1">#</span>
	<span class="co1"># @param socket Socket sur lequelle il faut recuperer les données</span>
	<span class="co1"># @return Données envoyées par le client</span>
	<span class="kw1">def</span> receive<span class="br0">&#40;</span><span class="kw2">self</span><span class="sy0">,</span> <span class="kw3">socket</span><span class="br0">&#41;</span>:
		buf <span class="sy0">=</span> <span class="st0">&quot;&quot;</span> <span class="co1"># Variable dans laquelle on stocke les données</span>
		_hasData <span class="sy0">=</span> <span class="kw2">True</span> <span class="co1"># Nous permet de savoir si il y de données à lire</span>
		<span class="kw1">while</span> _hasData:
			<span class="co1"># On passe le socket en non-bloquant</span>
			<span class="kw3">socket</span>.<span class="me1">setblocking</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>
			<span class="kw1">try</span>:
				_data <span class="sy0">=</span> <span class="kw3">socket</span>.<span class="me1">recv</span><span class="br0">&#40;</span><span class="nu0">256</span><span class="br0">&#41;</span>
				<span class="kw1">if</span><span class="br0">&#40;</span>_data<span class="br0">&#41;</span>:
					buf +<span class="sy0">=</span> _data
				<span class="kw1">else</span>:
					<span class="co1"># Déconnexion du client</span>
					_hasData <span class="sy0">=</span> <span class="kw2">False</span>
			<span class="kw1">except</span>:
				_hasData <span class="sy0">=</span> <span class="kw2">False</span>
		<span class="kw1">return</span> buf
&nbsp;
&nbsp;
&nbsp;
	<span class="co1"># Fonction qui lance les sockets et s'occupe des clients</span>
	<span class="kw1">def</span> run<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:
		<span class="co1"># On ajoute le socket serveur à la liste des sockets</span>
		<span class="kw2">self</span>.<span class="me1">sockets</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="kw3">socket</span><span class="br0">&#41;</span>
		<span class="co1"># Go</span>
		<span class="kw1">while</span> <span class="kw2">True</span>:
			<span class="kw1">try</span>:
				<span class="co1"># La fonction select prends trois paramètres qui sont la liste des sockets</span>
				<span class="co1"># Elle renvoie 3 valeurs</span>
				<span class="co1"># 	1- La liste des sockets qui ont reçus des données</span>
				<span class="co1"># 	2- La liste des sockets qui sont prêt à envoyer des données</span>
				<span class="co1">#	3- Ne nous interesse pas dans notre cas</span>
				readReady <span class="sy0">,</span>writeReady<span class="sy0">,</span> nothing <span class="sy0">=</span> <span class="kw3">select</span>.<span class="kw3">select</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">sockets</span><span class="sy0">,</span> <span class="kw2">self</span>.<span class="me1">sockets</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
			<span class="kw1">except</span> <span class="kw3">select</span>.<span class="me1">error</span><span class="sy0">,</span> e:
				<span class="kw1">break</span>
			<span class="kw1">except</span> <span class="kw3">socket</span>.<span class="me1">error</span><span class="sy0">,</span> e:
				<span class="kw1">break</span>
&nbsp;
			<span class="co1"># On parcours les sockets qui ont reçus des données</span>
			<span class="kw1">for</span> sock <span class="kw1">in</span> readReady:
				<span class="kw1">if</span> sock <span class="sy0">==</span> <span class="kw2">self</span>.<span class="kw3">socket</span>:
					<span class="co1"># C'est le socket serveur qui a reçus des données</span>
					<span class="co1"># Cela signifie qu'un client vient de se connecter</span>
					<span class="co1"># On accept donc ce client et on récupère qques infos</span>
					client<span class="sy0">,</span> address <span class="sy0">=</span> <span class="kw2">self</span>.<span class="kw3">socket</span>.<span class="me1">accept</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
					<span class="co1"># On incrémente le nombre de connecté</span>
					<span class="kw2">self</span>.<span class="me1">nbClients</span> +<span class="sy0">=</span> <span class="nu0">1</span>
					<span class="co1"># On ajoute le socket client dans la liste des sockets</span>
					<span class="kw2">self</span>.<span class="me1">sockets</span>.<span class="me1">append</span><span class="br0">&#40;</span>client<span class="br0">&#41;</span>
				<span class="kw1">else</span>:
					<span class="co1"># Le client a envoyé des données, on essaye de les lire</span>
					<span class="kw1">try</span>:
						<span class="co1"># On fait appelle à la surchage que l'on a écrite plus haut</span>
						data <span class="sy0">=</span> <span class="kw2">self</span>.<span class="me1">receive</span><span class="br0">&#40;</span>sock<span class="br0">&#41;</span>
						<span class="kw1">if</span> data:
							<span class="co1"># On renvoi au client ce qu'il a envoyé</span>
							sock.<span class="me1">send</span><span class="br0">&#40;</span>data<span class="br0">&#41;</span>
						<span class="kw1">else</span>:
							<span class="co1"># Si data est vide c'est que le client s'est déconnecté</span>
							<span class="co1"># On diminu le nombre de client</span>
							<span class="kw2">self</span>.<span class="me1">nbClients</span> -<span class="sy0">=</span> <span class="nu0">1</span>
							<span class="co1"># On supprime le socket de la liste des sockets</span>
							<span class="kw2">self</span>.<span class="me1">sockets</span>.<span class="me1">remove</span><span class="br0">&#40;</span>sock<span class="br0">&#41;</span>
					<span class="kw1">except</span> <span class="kw3">socket</span>.<span class="me1">error</span><span class="sy0">,</span> e:
						<span class="kw2">self</span>.<span class="me1">sockets</span>.<span class="me1">remove</span><span class="br0">&#40;</span>sock<span class="br0">&#41;</span>
&nbsp;
server <span class="sy0">=</span> Server<span class="br0">&#40;</span><span class="nu0">35890</span><span class="sy0">,</span> <span class="nu0">5</span><span class="br0">&#41;</span>
server.<span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span></pre></div></div></div></div></div></div></div>


]]></content:encoded>
			<wfw:commentRss>http://www.mazikim.com/python/utilisation-des-sockets-non-bloquant-en-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser MySQL dans vos programmes Python</title>
		<link>http://www.mazikim.com/fedora/utiliser-mysql-dans-vos-programmes-python/</link>
		<comments>http://www.mazikim.com/fedora/utiliser-mysql-dans-vos-programmes-python/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 21:19:51 +0000</pubDate>
		<dc:creator>Aymeric DERBOIS</dc:creator>
				<category><![CDATA[Fedora]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Mysql-python]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.mazikim.com/?p=460</guid>
		<description><![CDATA[Python est un langage interprété qui a de nombreux avantages. Il permet de développer très rapidement et proprement des applications de tous types. Nous allons voir ici comment accéder à une base de données MySQL avec Python de manière très simple. Généralement le problème c&#8217;est de commencer, trouver la bonne librairie et de trouver un exemple concret pour comprendre comment marche la librairie. C&#8217;est ce que je vous propose ici ! Il faut tout d&#8217;abord installer Python et MySQL-python. Sous fedora c&#8217;est très simple : yum install python MySQL-python Commençons simplement par inclure MySQLdb et nous connecter à la base<a href="http://www.mazikim.com/fedora/utiliser-mysql-dans-vos-programmes-python/">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>Python est un langage interprété qui a de nombreux avantages. Il permet de développer très rapidement et proprement des applications de tous types. Nous allons voir ici comment accéder à une base de données MySQL avec Python de manière très simple.</p>
<p>Généralement le problème c&#8217;est de commencer, trouver la bonne librairie et de trouver un exemple concret pour comprendre comment marche la librairie. C&#8217;est ce que je vous propose ici !</p>
<p>Il faut tout d&#8217;abord installer Python et MySQL-python. Sous fedora c&#8217;est très simple :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="bash"><pre class="de1"><span class="kw2">yum install</span> python MySQL-python</pre></div></div></div></div></div></div></div>


<p>Commençons simplement par inclure MySQLdb et nous connecter à la base de données :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="python"><pre class="de1"><span class="kw1">import</span> MySQLdb
&nbsp;
db <span class="sy0">=</span> MySQLdb.<span class="me1">connect</span><span class="br0">&#40;</span>host<span class="sy0">=</span><span class="st0">&quot;&quot;</span><span class="sy0">,</span> <span class="kw3">user</span><span class="sy0">=</span><span class="st0">&quot;my_user&quot;</span><span class="sy0">,</span> passwd<span class="sy0">=</span><span class="st0">&quot;my_pass&quot;</span><span class="sy0">,</span> db<span class="sy0">=</span><span class="st0">&quot;my_db&quot;</span><span class="br0">&#41;</span></pre></div></div></div></div></div></div></div>


<p>Maintenant comment fait-on une requête ? Et bien c&#8217;est assez simple :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="python"><pre class="de1"><span class="kw1">import</span> MySQLdb
&nbsp;
db <span class="sy0">=</span> MySQLdb.<span class="me1">connect</span><span class="br0">&#40;</span>host<span class="sy0">=</span><span class="st0">&quot;&quot;</span><span class="sy0">,</span> <span class="kw3">user</span><span class="sy0">=</span><span class="st0">&quot;my_user&quot;</span><span class="sy0">,</span> passwd<span class="sy0">=</span><span class="st0">&quot;my_pass&quot;</span><span class="sy0">,</span> db<span class="sy0">=</span><span class="st0">&quot;my_db&quot;</span><span class="br0">&#41;</span>
c <span class="sy0">=</span> <span class="kw2">self</span>.<span class="me1">db</span>.<span class="me1">cursor</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
c.<span class="me1">execute</span><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM users WHERE active = 1&quot;</span><span class="br0">&#41;</span>
rows <span class="sy0">=</span> c.<span class="me1">fetchall</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">#rows va contenir tout les résultats</span>
c.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="co1"># Maintenant on va traiter les résultats de notre requête :</span>
<span class="kw1">for</span> row <span class="kw1">in</span> rows:
	<span class="kw1">print</span><span class="br0">&#40;</span>row<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>+<span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span></pre></div></div></div></div></div></div></div>


<p>Ce bout de code va donc faire un SELECT dans la table users et récupérer tous les éléments dont le champs &laquo;&nbsp;active&nbsp;&raquo; = 1. Ensuite il va afficher le premier champ de notre table pour tous les éléments récupérer et effectuer un retour à la ligne pour chaque éléments.</p>
<p>Et voilà nous avons comment faire une requête basique avec MySQL et Python.<br />
Pour plus d&#8217;infos :</p>
<ul>
<li><a href="http://mysql-python.sourceforge.net/MySQLdb.html">Manuel MySQL-python</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mazikim.com/fedora/utiliser-mysql-dans-vos-programmes-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les fichiers en C</title>
		<link>http://www.mazikim.com/c/les-fichiers-en-c/</link>
		<comments>http://www.mazikim.com/c/les-fichiers-en-c/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 22:01:37 +0000</pubDate>
		<dc:creator>Aymeric DERBOIS</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[fichiers]]></category>
		<category><![CDATA[fichiers C]]></category>

		<guid isPermaLink="false">http://www.mazikim.com/?p=162</guid>
		<description><![CDATA[Nous allons voire dans ce tutoriel la solution la plus simple pour manipuler des fichiers en C. Les includes : Il faut utiliser les includes suivant pour pouvoir travailler avec les fichiers : #include &#60;stdlib.h&#62; #include &#60;stdio.h&#62; Type : La manipulation des fichiers &#8216;haut niveau&#8217; avec le C se fait via le type &#171;&#160;FILE&#160;&#187;. Voici la déclaration d&#8217;une variable de type fichier : FILE *f = NULL; Ouverture d&#8217;un fichier L&#8217;ouverture d&#8217;un fichier se fait via la fonction suivante : FILE *fopen &#40; const char * filename, const char * mode &#41;; Le premier paramètre est le chemin du fichier et le<a href="http://www.mazikim.com/c/les-fichiers-en-c/">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>Nous allons voire dans ce tutoriel la solution la plus simple pour manipuler des fichiers en C.</p>
<p><strong>Les includes : </strong><br />
Il faut utiliser les includes suivant pour pouvoir travailler avec les fichiers :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="co2">#include &lt;stdlib.h&gt;</span>
<span class="co2">#include &lt;stdio.h&gt;</span></pre></div></div></div></div></div></div></div>


<p><strong>Type : </strong><br />
La manipulation des fichiers &#8216;haut niveau&#8217; avec le C se fait via le type &laquo;&nbsp;FILE&nbsp;&raquo;. Voici la déclaration d&#8217;une variable de type fichier :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1">FILE <span class="sy0">*</span>f <span class="sy0">=</span> NULL<span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p><strong>Ouverture d&#8217;un fichier</strong><br />
L&#8217;ouverture d&#8217;un fichier se fait via la fonction suivante :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"> FILE <span class="sy0">*</span><span class="kw3">fopen</span> <span class="br0">&#40;</span> <span class="kw4">const</span> <span class="kw4">char</span> <span class="sy0">*</span> filename<span class="sy0">,</span> <span class="kw4">const</span> <span class="kw4">char</span> <span class="sy0">*</span> mode <span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>Le premier paramètre est le chemin du fichier et le second est le mode d&#8217;ouverture que l&#8217;on souhaite utiliser (écriture, lecture &#8230;).<br />
Voici une liste non exhaustive des modes d&#8217;ouverture :</p>
<ul>
<li>&#8216;r&#8217; : Lecture seule. Le fichier doit déjà exister</li>
<li>&#8216;w&#8217; : Ecriture seule. Si le fichier n&#8217;existe pas il est créé.</li>
<li>&#8216;a&#8217; : Ajout. Vous commencé à écrire à la fin du fichier. Si le fichier n&#8217;existe pas il est créé.</li>
<li>&#8216;r+&#8217; : Lecture et écriture. Le fichier doit déjà exister</li>
<li>&#8216;w+&#8217; : Lecture et écriture avec suppression du contenu à l&#8217;ouverture. Si le fichier n&#8217;existe pas il est créé.</li>
<li>&#8216;a+&#8217; : Ajout en lecture/écriture à partir de la fin du fichier. Si le fichier n&#8217;existe pas il est créé.</li>
</ul>
<p>Tous ces modes permettent d&#8217;ouvrir des fichiers textes. Pour ouvrir en mode binaire il suffit de rajouter &#8216;b&#8217; (&#8216;rb&#8217;, &#8216;rb+&#8217; &#8230;).</p>
<p>La fonction <em>fopen</em> renvoie un pointeur du type <em>FILE</em> si l&#8217;ouverture c&#8217;est correctement déroulé, ou alors un pointeur <em>NULL</em>. Voici un exemple d&#8217;utilisation :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    FILE <span class="sy0">*</span>f <span class="sy0">=</span> NULL<span class="sy0">;</span>
    <span class="co1">// Ouverture en mode lecture seule</span>
    f <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="st0">&quot;mon_fichier.txt&quot;</span><span class="sy0">,</span> <span class="st0">&quot;r&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw1">if</span> <span class="br0">&#40;</span> f <span class="sy0">==</span> NULL<span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="kw3">printf</span> <span class="br0">&#40;</span> <span class="st0">&quot;Ouverture du fichier échoué!&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw1">else</span>
    <span class="br0">&#123;</span>
        <span class="kw3">printf</span> <span class="br0">&#40;</span> <span class="st0">&quot;Ouverture du fichier réussis !&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p><strong>Fermeture du fichier : </strong><br />
Il faut TOUJOURS fermer un fichier que l&#8217;on a ouvert. On utilise la fonction suivante :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="kw4">int</span> <span class="kw3">fclose</span> <span class="br0">&#40;</span> FILE <span class="sy0">*</span> stream <span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>On reprend l&#8217;exemple précédent :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    FILE <span class="sy0">*</span>f <span class="sy0">=</span> NULL<span class="sy0">;</span>
    <span class="co1">// Ouverture en mode lecture seule</span>
    f <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="st0">&quot;mon_fichier.txt&quot;</span><span class="sy0">,</span> <span class="st0">&quot;r&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw1">if</span> <span class="br0">&#40;</span> f <span class="sy0">==</span> NULL<span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="kw3">printf</span> <span class="br0">&#40;</span> <span class="st0">&quot;Ouverture du fichier échoué!&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="co1">// Ici pas besoin de fermer car le fichier n'a pas </span>
        <span class="co1">// été ouvert !</span>
    <span class="br0">&#125;</span>
    <span class="kw1">else</span>
    <span class="br0">&#123;</span>
        <span class="kw3">printf</span> <span class="br0">&#40;</span> <span class="st0">&quot;Ouverture du fichier réussis !&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw3">fclose</span><span class="br0">&#40;</span>f<span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// On ferme notre fichier</span>
    <span class="br0">&#125;</span>
    <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p><strong>Lire dans un fichier : </strong><br />
Avant tout il faut expliquer comment on se balade dans le fichier. La manière la plus simple va être d&#8217;utiliser les fonctions de lecture fournit par la librairie standard. Ces fonctions utiliserons un &laquo;&nbsp;pointeur&nbsp;&raquo; qui leur permet de savoir ou elles se trouvent dans le fichier.<br />
Il existe 3 fonctions différentes pour lire dans un fichier.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="co1">// Retourne 1 caractère</span>
<span class="kw4">int</span> <span class="kw3">fgetc</span> <span class="br0">&#40;</span> FILE <span class="sy0">*</span> stream <span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="co1">// Lit une ligne du fichier sur num caractère </span>
<span class="kw4">char</span> <span class="sy0">*</span> <span class="kw3">fgets</span> <span class="br0">&#40;</span> <span class="kw4">char</span> <span class="sy0">*</span> str<span class="sy0">,</span> <span class="kw4">int</span> num<span class="sy0">,</span> FILE <span class="sy0">*</span> stream <span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="co1">// Equivalent à scanf mais ur les fichiers</span>
<span class="kw4">int</span> <span class="kw3">fscanf</span> <span class="br0">&#40;</span> FILE <span class="sy0">*</span> stream<span class="sy0">,</span> <span class="kw4">const</span> <span class="kw4">char</span> <span class="sy0">*</span> format<span class="sy0">,</span> ... <span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>Voici des exemples pour <em>fgetc</em> et <em>fgets</em>. Ces deux exemples font la même chose, ils lisent l&#8217;ensemble du fichier et l&#8217;écrivent dans la console.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="coMULTI">/**
 * Pour la fonction fgetc
 */</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    FILE<span class="sy0">*</span> f <span class="sy0">=</span> NULL<span class="sy0">;</span>
    <span class="co1">// La var c va contenir ce que revoie fgetc</span>
    <span class="kw4">int</span> c <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
    f <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="st0">&quot;mon_fichier.txt&quot;</span><span class="sy0">,</span> <span class="st0">&quot;r&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> 
    <span class="co1">// Ci-dessous on utilise une subtilitée du C</span>
    <span class="co1">// En effet NULL = (void *)0</span>
    <span class="co1">// Donc on peut remplacer if(f != NULL) par if(f)</span>
    <span class="kw1">if</span> <span class="br0">&#40;</span>f<span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        c <span class="sy0">=</span> <span class="kw3">fgetc</span><span class="br0">&#40;</span>f<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw1">while</span> <span class="br0">&#40;</span>c <span class="sy0">!=</span> EOF<span class="br0">&#41;</span>
        <span class="br0">&#123;</span>
            <span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;%c&quot;</span><span class="sy0">,</span> c<span class="br0">&#41;</span><span class="sy0">;</span>
            c <span class="sy0">=</span> <span class="kw3">fgetc</span><span class="br0">&#40;</span>f<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <span class="kw3">fclose</span><span class="br0">&#40;</span>f<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="coMULTI">/**
 * Pour la fonction fgetcs
 */</span>
<span class="co1">// On défini une valeur maximale de caractère</span>
<span class="co1">// à lire par ligne. Donc si une ligne fait 1050 caractères</span>
<span class="co1">// les 26 derniers caractères ne seront pas lus</span>
<span class="co2">#define LEN_LINE_MAX 1024</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    FILE<span class="sy0">*</span> f <span class="sy0">=</span> NULL<span class="sy0">;</span>
    <span class="co1">// Variable qui va contenir la ligne</span>
    <span class="kw4">char</span> str<span class="br0">&#91;</span>LEN_LINE_MAX<span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span>
    f <span class="sy0">=</span> f<span class="br0">&#40;</span><span class="st0">&quot;mon_fichier.txt&quot;</span><span class="sy0">,</span> <span class="st0">&quot;r&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw1">if</span> <span class="br0">&#40;</span>f<span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
	    <span class="co1">// fgets renvoie NULL quand elle arrive</span>
        <span class="co1">// en fin de fichier. Donc on utilise ici aussi</span>
        <span class="co1">// l'astuce précédente ou NULL = (void *)0</span>
        <span class="kw1">while</span> <span class="br0">&#40;</span><span class="kw3">fgets</span><span class="br0">&#40;</span>str<span class="sy0">,</span> LEN_LINE_MAX<span class="sy0">,</span> f<span class="br0">&#41;</span><span class="br0">&#41;</span>
        <span class="br0">&#123;</span>
            <span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;%s&quot;</span><span class="sy0">,</span> str<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
&nbsp;
        <span class="kw3">fclose</span><span class="br0">&#40;</span>f<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p><em>fscanf</em> une manière un peut différente de travailler, il faut en effet que le fichier est une forme bien précise. Par exemple le fichier contient deux nombres de la manière suivante :</p>
<pre>1502 3560</pre>
<p>Voici le code qui permet de récupérer ces deux valeurs dans deux variables différentes avec <em>fscanf</em> :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    FILE<span class="sy0">*</span> f <span class="sy0">=</span> NULL<span class="sy0">;</span>
    <span class="co1">// Les deux viriables dans lesquelles</span>
    <span class="co1">// on va sauver les valeurs</span>
    <span class="kw4">int</span> nombre_1<span class="sy0">;</span>
    <span class="kw4">int</span> nombre_2<span class="sy0">;</span>
    f <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="st0">&quot;mon_fichier.txt&quot;</span><span class="sy0">,</span> <span class="st0">&quot;r&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw1">if</span> <span class="br0">&#40;</span>f <span class="sy0">!=</span> NULL<span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="kw3">fscanf</span><span class="br0">&#40;</span>f<span class="sy0">,</span> <span class="st0">&quot;%d %d&quot;</span><span class="sy0">,</span> <span class="sy0">&amp;</span>nombre_1<span class="sy0">,</span> <span class="sy0">&amp;</span>nombre_2<span class="br0">&#41;</span><span class="sy0">;</span>
	    <span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;Les deux valeurs enregistrées dans 
                     le fichier sont : %d et %d&quot;</span><span class="sy0">,</span>
                     nombre_1<span class="sy0">,</span> nombre_2<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw3">fclose</span><span class="br0">&#40;</span>f<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p><strong>Ecriture dans un fichier : </strong><br />
Pour écrire dans un fichier il y a trois fonctions importantes qui sont les équivalentes des fonctions que l&#8217;on a déjà vu pour la lecture.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="co1">// Ecrit un caractère dans le fichier</span>
<span class="kw4">int</span> <span class="kw3">fputc</span> <span class="br0">&#40;</span> <span class="kw4">int</span> character<span class="sy0">,</span> FILE <span class="sy0">*</span> stream <span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="co1">// Ecrit une chaîne de caractère dans le fichier.</span>
<span class="kw4">int</span> <span class="kw3">fputs</span> <span class="br0">&#40;</span> <span class="kw4">const</span> <span class="kw4">char</span> <span class="sy0">*</span> str<span class="sy0">,</span> FILE <span class="sy0">*</span> stream <span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="co1">// Equivalent à printf mais pour les fichiers</span>
<span class="kw4">int</span> <span class="kw3">fprintf</span> <span class="br0">&#40;</span> FILE <span class="sy0">*</span> stream<span class="sy0">,</span> <span class="kw4">const</span> <span class="kw4">char</span> <span class="sy0">*</span> format<span class="sy0">,</span> ... <span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>Voici trois exemples de code qui utilise ces fonctions. Dans leur fonctionnements elles sont entièrement similaires au fonction de lecture.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    FILE<span class="sy0">*</span> f <span class="sy0">=</span> NULL<span class="sy0">;</span>
    f <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="st0">&quot;my_file.txt&quot;</span><span class="sy0">,</span> <span class="st0">&quot;w&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw1">if</span> <span class="br0">&#40;</span>f <span class="sy0">!=</span> NULL<span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="co1">// On écrit le caractère 'x'</span>
        <span class="kw3">fputc</span><span class="br0">&#40;</span><span class="st0">'x'</span><span class="sy0">,</span> f<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw3">fclose</span><span class="br0">&#40;</span>f<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    FILE<span class="sy0">*</span> f <span class="sy0">=</span> NULL<span class="sy0">;</span>
    f <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="st0">&quot;my_file.txt&quot;</span><span class="sy0">,</span> <span class="st0">&quot;w&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw1">if</span> <span class="br0">&#40;</span>f <span class="sy0">!=</span> NULL<span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="kw3">fputs</span><span class="br0">&#40;</span><span class="st0">&quot;Coucou, ça code dure ?&quot;</span><span class="sy0">,</span> f<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw3">fclose</span><span class="br0">&#40;</span>f<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>




<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    <span class="co1">// valeur que l'on va sauver dans le fichier</span>
    <span class="kw4">int</span> age <span class="sy0">=</span> <span class="nu0">42</span><span class="sy0">;</span>
    <span class="kw4">char</span> <span class="sy0">*</span>name <span class="sy0">=</span> <span class="st0">&quot;Pascal&quot;</span><span class="sy0">;</span>
    FILE<span class="sy0">*</span> f <span class="sy0">=</span> NULL<span class="sy0">;</span>
    f <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="st0">&quot;my_file.txt&quot;</span><span class="sy0">,</span> <span class="st0">&quot;w&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="kw1">if</span> <span class="br0">&#40;</span>fichier <span class="sy0">!=</span> NULL<span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="co1">// On l'écrit dans le fichier en utilisant</span>
        <span class="co1">// fprintf comme printf pour la console</span>
        <span class="kw3">fprintf</span><span class="br0">&#40;</span>f<span class="sy0">,</span> <span class="st0">&quot;nom : %s <span class="es1">\n</span> age %d&quot;</span><span class="sy0">,</span> name<span class="sy0">,</span> age<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw3">fclose</span><span class="br0">&#40;</span>f<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p><strong>Se déplacer dans un fichier : </strong><br />
Il existe trois fonctions qui permettent de se déplacer dans un fichier.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="kw4">long</span> <span class="kw4">int</span> <span class="kw3">ftell</span> <span class="br0">&#40;</span> FILE <span class="sy0">*</span> stream <span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw4">int</span> <span class="kw3">fseek</span> <span class="br0">&#40;</span> FILE <span class="sy0">*</span> stream<span class="sy0">,</span> <span class="kw4">long</span> <span class="kw4">int</span> offset<span class="sy0">,</span> <span class="kw4">int</span> origin <span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw4">void</span> <span class="kw3">rewind</span> <span class="br0">&#40;</span> FILE <span class="sy0">*</span> stream <span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>La première <em>ftell</em> renvoie la position du pointeur dans le fichier (la position courante). La deuxième <em>fseek</em> permet de déplacer ce pointeur pour changer la position courante. Enfin la dernière <em>rewind</em> permet de placer le pointeur en début de fichier, cette fonction pouvant être remplacer par <em>fseek</em> avec les paramètres qui vont bien.<br />
Voici divers exemples avec des commentaires pour mieux comprendre.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    FILE<span class="sy0">*</span> f <span class="sy0">=</span> NULL<span class="sy0">;</span>
    f <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="st0">&quot;my_file.txt&quot;</span><span class="sy0">,</span> <span class="st0">&quot;w&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="kw1">if</span> <span class="br0">&#40;</span>fichier <span class="sy0">!=</span> NULL<span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span class="co1">// SEEK_SET indique l'origine du fichier donc</span>
        <span class="co1">// cette ligne positionne le pointeur à la </span>
        <span class="co1">// cinquième positions du fichier</span>
        <span class="kw3">fseek</span><span class="br0">&#40;</span>f<span class="sy0">,</span> <span class="nu0">5</span><span class="sy0">,</span> SEEK_SET<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="co1">// SEEK_CUR indique la position du pointeur</span>
        <span class="co1">// cette ligne positionne le pointeur à la </span>
        <span class="co1">// cinquième positions après la position courante</span>
        <span class="kw3">fseek</span><span class="br0">&#40;</span>fichier<span class="sy0">,</span>  <span class="nu0">5</span><span class="sy0">,</span> SEEK_CUR<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="co1">// SEEK_END indique la fin du fichier donc</span>
        <span class="co1">// cette ligne positionne le pointeur à </span>
        <span class="co1">// l'avant dernière position du fichier</span>
        <span class="kw3">fseek</span><span class="br0">&#40;</span>fichier<span class="sy0">,</span> <span class="sy0">-</span><span class="nu0">1</span><span class="sy0">,</span> SEEK_END<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw3">fclose</span><span class="br0">&#40;</span>f<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p><strong>Supprimer, Renommer, Copier/Coller &#8230;</strong><br />
Pour supprimer un fichier :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="co1">// Retourne 0 si correctement supprimé</span>
<span class="kw4">int</span> <span class="kw3">remove</span> <span class="br0">&#40;</span> <span class="kw4">const</span> <span class="kw4">char</span> <span class="sy0">*</span> filename <span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">// exemple :</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    <span class="kw1">return</span> <span class="kw3">remove</span><span class="br0">&#40;</span><span class="st0">&quot;my_file.txt&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Pour renommer :</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="c"><pre class="de1"><span class="co1">// Retourne 0 si correctement renommé</span>
<span class="kw4">int</span> <span class="kw3">rename</span> <span class="br0">&#40;</span> <span class="kw4">const</span> <span class="kw4">char</span> <span class="sy0">*</span> oldname<span class="sy0">,</span> <span class="kw4">const</span> <span class="kw4">char</span> <span class="sy0">*</span> newname <span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">// exemple :</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    <span class="kw1">return</span> <span class="kw4">int</span> <span class="kw3">rename</span> <span class="br0">&#40;</span> <span class="st0">&quot;my_file.txt&quot;</span><span class="sy0">,</span> <span class="st0">&quot;my_new_name_file.txt&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Pour copier/coller :<br />
Il n&#8217;ya pas de fonction pour copier/coller ou couper/coller un fichier, mais vous pouvez faire votre propre fonction <img src='http://www.mazikim.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>J’essaierais d&#8217;étoffer ce document d&#8217;ici quelques semaines. Cependant ce document est un bon début lorsque l&#8217;on souhaite travailler avec les fichiers en C !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mazikim.com/c/les-fichiers-en-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

