<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.filesystem.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'function.parse-ini-file.php',
    1 => 'parse_ini_file',
    2 => 'Analyse un fichier de configuration',
  ),
  'up' => 
  array (
    0 => 'ref.filesystem.php',
    1 => 'Fonctions sur les syst&egrave;mes de fichiers',
  ),
  'prev' => 
  array (
    0 => 'function.move-uploaded-file.php',
    1 => 'move_uploaded_file',
  ),
  'next' => 
  array (
    0 => 'function.parse-ini-string.php',
    1 => 'parse_ini_string',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/filesystem/functions/parse-ini-file.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.parse-ini-file" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">parse_ini_file</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">parse_ini_file</span> &mdash; <span class="dc-title">Analyse un fichier de configuration</span></p>

 </div>
 
 <div class="refsect1 description" id="refsect1-function.parse-ini-file-description">
  <h3 class="title">Description</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>parse_ini_file</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$filename</code></span>, <span class="methodparam"><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <code class="parameter">$process_sections</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></span></span>, <span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$scanner_mode</code><span class="initializer"> = <strong><code><a href="filesystem.constants.php#constant.ini-scanner-normal">INI_SCANNER_NORMAL</a></code></strong></span></span>): <span class="type"><span class="type"><a href="language.types.array.php" class="type array">array</a></span>|<span class="type"><a href="language.types.singleton.php" class="type false">false</a></span></span></div>

  <p class="para rdfs-comment">
   <span class="function"><strong>parse_ini_file()</strong></span> charge le fichier
   <code class="parameter">filename</code> et retourne les
   configurations qui s&#039;y trouvent sous forme d&#039;un tableau
   associatif.
  </p>
  <p class="para">
   La structure des fichiers de configuration lus est similaire
   à celle de <var class="filename">php.ini</var>.
  </p>
  <div class="warning"><strong class="warning">Avertissement</strong>
   <p class="simpara">
    Cette fonction ne doit pas être utilisée avec des entrées non fiables, sauf si
    <code class="parameter">scanner_mode</code> est <strong><code><a href="filesystem.constants.php#constant.ini-scanner-raw">INI_SCANNER_RAW</a></code></strong>
    car la sortie analysée pourrait contenir les valeurs de constantes sensibles,
    telles que des constantes contenant un mot de passe de base de données.
   </p>
  </div>
 </div>

 
 <div class="refsect1 parameters" id="refsect1-function.parse-ini-file-parameters">
  <h3 class="title">Liste de paramètres</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">filename</code></dt>
     <dd>
      <p class="para">
       Le nom du fichier de configuration à analyser. Si un chemin relatif
       est utilisé, il est évalué relatif au dossier courant actuel, puis
       selon le <a href="ini.core.php#ini.include-path" class="link">include_path</a>.
      </p>
     </dd>
    
    
     <dt><code class="parameter">process_sections</code></dt>
     <dd>
      <p class="para">
       En passant le paramètre <code class="parameter">process_sections</code>
       à <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, le résultat sera
       un tableau multidimensionnel avec les noms des sections.
       La valeur par défaut de ce paramètre est <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>
      </p>
     </dd>
    
    
     <dt><code class="parameter">scanner_mode</code></dt>
     <dd>
      <p class="para">
       Peut être <strong><code><a href="filesystem.constants.php#constant.ini-scanner-normal">INI_SCANNER_NORMAL</a></code></strong> (défaut) ou
       <strong><code><a href="filesystem.constants.php#constant.ini-scanner-raw">INI_SCANNER_RAW</a></code></strong>. Si <strong><code><a href="filesystem.constants.php#constant.ini-scanner-raw">INI_SCANNER_RAW</a></code></strong>
       est fourni, alors les valeurs en option ne seront pas analysées.
      </p>
      <p class="para">
À parti de PHP 5.6.1 peut aussi être spécifié comme <strong><code><a href="filesystem.constants.php#constant.ini-scanner-typed">INI_SCANNER_TYPED</a></code></strong>.
Dans ce mode les booléens, null et entiers sont préservés tant que possible.
Les chaines de caractères <code class="literal">&quot;true&quot;</code>, <code class="literal">&quot;on&quot;</code> et <code class="literal">&quot;yes&quot;</code>
sont converties vers <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>. <code class="literal">&quot;false&quot;</code>, <code class="literal">&quot;off&quot;</code>, <code class="literal">&quot;no&quot;</code>
et <code class="literal">&quot;none&quot;</code> sont considérés comme <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>. <code class="literal">&quot;null&quot;</code> est converti en <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> dans ce mode. De plus toutes les chaines de caractères numériques sont converties en entier si possible.
</p>
     </dd>
    
   </dl>
  </p>
 </div>

 
 <div class="refsect1 returnvalues" id="refsect1-function.parse-ini-file-returnvalues">
  <h3 class="title">Valeurs de retour</h3>
  <p class="para">
   La configuration est retournée sous la forme d&#039;un tableau associatif
   en cas de succès, et <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> si une erreur survient.
  </p>
 </div>

 
 <div class="refsect1 examples" id="refsect1-function.parse-ini-file-examples">
  <h3 class="title">Exemples</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Exemple #1 Contenu du fichier <var class="filename">sample.ini</var></strong></p>
    <div class="example-contents">
<div class="cdata"><pre>
; Ceci est un fichier de configuration
; Les commentaires commencent par &#039;;&#039;, comme dans php.ini

[first_section]
one = 1
five = 5
animal = BIRD

[second_section]
path = &quot;/usr/local/bin&quot;
URL = &quot;http://www.example.com/~username&quot;

[third_section]
phpversion[] = &quot;5.0&quot;
phpversion[] = &quot;5.1&quot;
phpversion[] = &quot;5.2&quot;
phpversion[] = &quot;5.3&quot;

urls[svn] = &quot;http://svn.php.net&quot;
urls[git] = &quot;http://git.php.net&quot;
</pre></div>
    </div>

   </div>
   <div class="example" id="example-2">
    <p><strong>Exemple #2 Exemple avec <span class="function"><strong>parse_ini_file()</strong></span></strong></p>
    <div class="example-contents"><p>
     Les <a href="language.constants.php" class="link">constantes</a> (mais pas les
     &quot;constantes magiques&quot; telles que <strong><code><a href="language.constants.magic.php#constant.file">__FILE__</a></code></strong>) peuvent aussi
     être utilisées dans le fichier .ini, ce qui fait que si l&#039;on définit
     une constante avant d&#039;exécuter <span class="function"><strong>parse_ini_file()</strong></span>, elle
     sera intégrée dans les résultats. Seules les valeurs de configuration
     sont évaluées, et la valeur doit juste être la constante. Par exemple :
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />define</span><span style="color: #007700">(</span><span style="color: #DD0000">'BIRD'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Dodo bird'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Analyse sans sections<br /></span><span style="color: #0000BB">$ini_array </span><span style="color: #007700">= </span><span style="color: #0000BB">parse_ini_file</span><span style="color: #007700">(</span><span style="color: #DD0000">"sample.ini"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$ini_array</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Analyse avec sections<br /></span><span style="color: #0000BB">$ini_array </span><span style="color: #007700">= </span><span style="color: #0000BB">parse_ini_file</span><span style="color: #007700">(</span><span style="color: #DD0000">"sample.ini"</span><span style="color: #007700">, </span><span style="color: #0000BB">true</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$ini_array</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Résultat de l&#039;exemple ci-dessus est similaire à :</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Array
(
    [one] =&gt; 1
    [five] =&gt; 5
    [animal] =&gt; Dodo bird
    [path] =&gt; /usr/local/bin
    [URL] =&gt; http://www.example.com/~username
    [phpversion] =&gt; Array
        (
            [0] =&gt; 5.0
            [1] =&gt; 5.1
            [2] =&gt; 5.2
            [3] =&gt; 5.3
        )

    [urls] =&gt; Array
        (
            [svn] =&gt; http://svn.php.net
            [git] =&gt; http://git.php.net
        )

)
Array
(
    [first_section] =&gt; Array
        (
            [one] =&gt; 1
            [five] =&gt; 5
            [animal] =&gt; Dodo bird
        )

    [second_section] =&gt; Array
        (
            [path] =&gt; /usr/local/bin
            [URL] =&gt; http://www.example.com/~username
        )

    [third_section] =&gt; Array
        (
            [phpversion] =&gt; Array
                (
                    [0] =&gt; 5.0
                    [1] =&gt; 5.1
                    [2] =&gt; 5.2
                    [3] =&gt; 5.3
                )
            [urls] =&gt; Array
                (
                    [svn] =&gt; http://svn.php.net
                    [git] =&gt; http://git.php.net
                )

        )

)</pre>
</div>
    </div>
   </div>
  </p>
  <p class="para">
   <div class="example" id="example-3">
    <p><strong>Exemple #3 <span class="function"><strong>parse_ini_file()</strong></span> pour analyser un fichier php.ini</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Une fonction simple pour comparer les résultats ci-dessous<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">yesno</span><span style="color: #007700">(</span><span style="color: #0000BB">$expression</span><span style="color: #007700">)<br />{<br />    return(</span><span style="color: #0000BB">$expression </span><span style="color: #007700">? </span><span style="color: #DD0000">'Yes' </span><span style="color: #007700">: </span><span style="color: #DD0000">'No'</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #FF8000">// Lit le chemin du php.ini en utilisant php_ini_loaded_file()<br /></span><span style="color: #0000BB">$ini_path </span><span style="color: #007700">= </span><span style="color: #0000BB">php_ini_loaded_file</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// Analyse de php.ini<br /></span><span style="color: #0000BB">$ini </span><span style="color: #007700">= </span><span style="color: #0000BB">parse_ini_file</span><span style="color: #007700">(</span><span style="color: #0000BB">$ini_path</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Affichage et comparatif des valeurs. Il est à noter que get_cfg_var()<br />// va donner les mêmes résultats entre les résultats analysés et chargés<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'(analysé) magic_quotes_gpc = ' </span><span style="color: #007700">. </span><span style="color: #0000BB">yesno</span><span style="color: #007700">(</span><span style="color: #0000BB">$ini</span><span style="color: #007700">[</span><span style="color: #DD0000">'magic_quotes_gpc'</span><span style="color: #007700">]) . </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">'(chargé ) magic_quotes_gpc = ' </span><span style="color: #007700">. </span><span style="color: #0000BB">yesno</span><span style="color: #007700">(</span><span style="color: #0000BB">get_cfg_var</span><span style="color: #007700">(</span><span style="color: #DD0000">'magic_quotes_gpc'</span><span style="color: #007700">)) . </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Résultat de l&#039;exemple ci-dessus est similaire à :</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">(analysé) magic_quotes_gpc = Yes
(chargé ) magic_quotes_gpc = Yes</pre>
</div>
    </div>
   </div>
  </p>
  <p class="para">
   <div class="example" id="example-4">
    <p><strong>Exemple #4 Interpolation de Valeur</strong></p>
    <div class="example-contents"><p>
     En plus d&#039;évaluer les constantes, certains caractères ont une signification
     particulière dans une valeur ini.
     Additionnellement, les variables d&#039;environnement et options de configuration
     définies précédemment (voir <span class="function"><a href="function.get-cfg-var.php" class="function">get_cfg_var()</a></span>) peuvent être
     lues en utilisant la syntaxe <code class="code">${}</code>.
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
; | is used for bitwise OR
three = 2|3

; &amp; is used for bitwise AND
four = 6&amp;5

; ^ is used for bitwise XOR
five = 3^6

; ~ is used for bitwise negate
negative_two = ~1

; () is used for grouping
seven = (8|7)&amp;(6|5)

; Interpoler la variable d&#039;environnement PATH
path = ${PATH}

; Interpoler l&#039;option de configuration &#039;memory_limit&#039;
configured_memory_limit = ${memory_limit}
</pre></div>
    </div>

   </div>
  </p>
  <p class="para">
   <div class="example" id="example-5">
    <p><strong>Exemple #5 Échapper des Caractères</strong></p>
    <div class="example-contents"><p>
     Certains caractères ont une signification particulière dans les chaînes à guillemets doubles et doivent
     être échappés en les préfixant d&#039;un antislash.
     Tout d&#039;abord, ce sont les guillemets double <code class="code">&quot;</code> comme le marqueur de frontière,
     et l&#039;antislash <code class="code">\</code> lui-même (si suivi d&#039;un des caractères spéciaux) :
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
quoted = &quot;She said \&quot;Exactly my point\&quot;.&quot; ; Results in a string with quote marks in it.
hint = &quot;Use \\\&quot; to escape double quote&quot; ; Results in: Use \&quot; to escape double quote
</pre></div>
    </div>

    <div class="example-contents"><p>
     Il y a une exception pour les chemins Windows-esque : il est possible de ne pas échapper
     l&#039;antislash traînant si la chaîne citée est directement suivie d&#039;un retour à la ligne :
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
save_path = &quot;C:\Temp\&quot;
</pre></div>
    </div>

    <div class="example-contents"><p>
     Si l&#039;on doit échapper un guillemet double suivi d&#039;un retour à la ligne dans une
     valeur multiligne, il est possible d&#039;utiliser la concaténation de valeur de la manière
     suivante (il y a une chaîne à guillemet double directement suivie d&#039;une autre) :
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
long_text = &quot;Lorem \&quot;ipsum\&quot;&quot;&quot;
 dolor&quot; ; Results in: Lorem &quot;ipsum&quot;\n dolor
</pre></div>
    </div>

    <div class="example-contents"><p>
     Un autre caractère avec une signification particulière est <code class="code">$</code> (le signe dollar).
     Il doit être échappé s&#039;il est suivi d&#039;une accolade ouvrante :
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
code = &quot;\${test}&quot;
</pre></div>
    </div>

    <div class="example-contents"><p>
     L&#039;échappement de caractères n&#039;est pas supporté dans le mode <strong><code><a href="filesystem.constants.php#constant.ini-scanner-raw">INI_SCANNER_RAW</a></code></strong>
     (dans ce mode tous les caractères sont traités &quot;tels quels&quot;).
    </p></div>
    <div class="example-contents"><p>
     Il est à noter que l&#039;analyseur INI ne supporte pas les séquences d&#039;échappement standard
     (<code class="code">\n</code>, <code class="code">\t</code>, etc.).
     Si nécessaire, le résultat de <span class="function"><strong>parse_ini_file()</strong></span> doit
     être post-procédé avec la fonction <span class="function"><a href="function.stripcslashes.php" class="function">stripcslashes()</a></span>.
    </p></div>
   </div>
  </p>
 </div>

 
 <div class="refsect1 notes" id="refsect1-function.parse-ini-file-notes">
  <h3 class="title">Notes</h3>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    Cette fonction n&#039;a rien à voir avec le fichier
    <var class="filename">php.ini</var>. Ce dernier a déjà été traité lorsque
    l&#039;on commence à exécuter le script. Cette fonction
    peut permettre de lire ses propres fichiers de
    configuration.
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    Si une valeur du fichier ini contient des
    données non-alphanumériques, il faut la protéger en la plaçant 
    entre guillemets doubles (&quot;).
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <span class="simpara">
    Il existe des mots réservés qui ne doivent pas être utilisés en tant que clés
    dans les fichiers ini. Cela inclut : <code class="literal">null</code>,
    <code class="literal">yes</code>, <code class="literal">no</code>, <code class="literal">true</code>,
    <code class="literal">false</code>, <code class="literal">on</code>, <code class="literal">off</code> et <code class="literal">none</code>.
    Les valeurs <code class="literal">null</code>, <code class="literal">off</code>, <code class="literal">no</code>
    et <code class="literal">false</code> donnent <code class="literal">&quot;&quot;</code>, et les valeurs
    <code class="literal">on</code>, <code class="literal">yes</code> et
    <code class="literal">true</code> donnent <code class="literal">&quot;1&quot;</code>, à moins que le mode
    <strong><code><a href="filesystem.constants.php#constant.ini-scanner-typed">INI_SCANNER_TYPED</a></code></strong> ne soit utilisé.
    Les caractères <code class="literal">?{}|&amp;~!()^&quot;</code> ne doivent pas être utilisés
    n&#039;importe où dans la clé et ont une signification spéciale dans la valeur.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    Les entrées sans un signal égal seront ignorées. Par exemple, &quot;foo&quot;
    sera ignoré alors que &quot;bar =&quot; sera analysé et ajouté avec une valeur vide.
    Par exemple, MySQL a une option de configuration &quot;no-auto-rehash&quot; dans
    le fichier <var class="filename">my.cnf</var> qui ne prend pas de valeur, aussi,
    elle sera ignorée.
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    Les fichiers ini sont généralement traités comme des fichiers de texte brut
    par les serveurs web, et donc envoyés au navigateur si demandé. Ceci signifie
    que pour la sécurité soit les fichiers ini doivent être stockés en dehors
    de la racine docroot, soit reconfigurer le serveur web pour ne pas les servir.
    L&#039;échec de faire l&#039;une de ces mesures peut introduire un risque de sécurité.
   </p>
  </p></blockquote>
 </div>

 
 <div class="refsect1 seealso" id="refsect1-function.parse-ini-file-seealso">
  <h3 class="title">Voir aussi</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.parse-ini-string.php" class="function" rel="rdfs-seeAlso">parse_ini_string()</a> - Analyse une cha&icirc;ne de configuration</span></li>
   </ul>
  </p>
 </div>

 
</div><?php manual_footer($setup); ?>