<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'function.parse-ini-file.php',
    1 => 'parse_ini_file',
    2 => 'Analiza un archivo de configuraci&oacute;n',
  ),
  'up' => 
  array (
    0 => 'ref.filesystem.php',
    1 => 'Funciones del Sistema de Archivos',
  ),
  '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' => 'es',
    '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">Analiza un archivo de configuración</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.parse-ini-file-description">
  <h3 class="title">Descripción</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> carga el archivo
   <code class="parameter">filename</code> y devuelve las
   configuraciones que contiene como un array asociativo.
  </p>
  <p class="para">
   La estructura de los archivos de configuración leídos es similar a la de <var class="filename">php.ini</var>.
  </p>
   <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="simpara">
    Esta función no debe ser utilizada con entradas no confiables, a menos que
    <code class="parameter">scanner_mode</code> sea <strong><code><a href="filesystem.constants.php#constant.ini-scanner-raw">INI_SCANNER_RAW</a></code></strong>,
    ya que la salida analizada podría contener los valores de constantes sensibles,
    como constantes que contienen una contraseña de base de datos.
   </p>
  </div>
</div>


 <div class="refsect1 parameters" id="refsect1-function.parse-ini-file-parameters">
  <h3 class="title">Parámetros</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">filename</code></dt>
     <dd>
      <p class="para">
       El nombre del archivo de configuración a analizar. Si se utiliza una ruta relativa,
       se evalúa relativa a la carpeta actual, luego según el <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">
       Al pasar el argumento <code class="parameter">process_sections</code>
       a <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, se obtendrá
       un array multidimensional con los nombres de las secciones.
       El valor por omisión de este argumento es <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">
       Puede ser <strong><code><a href="filesystem.constants.php#constant.ini-scanner-normal">INI_SCANNER_NORMAL</a></code></strong> (por omisión) o
       <strong><code><a href="filesystem.constants.php#constant.ini-scanner-raw">INI_SCANNER_RAW</a></code></strong>. Si se proporciona <strong><code><a href="filesystem.constants.php#constant.ini-scanner-raw">INI_SCANNER_RAW</a></code></strong>,
       entonces los valores en opción no serán analizados.
      </p>
      <p class="para">
A partir de PHP 5.6.1 también puede ser especificado como <strong><code><a href="filesystem.constants.php#constant.ini-scanner-typed">INI_SCANNER_TYPED</a></code></strong>.
En este modo los booleanos, null y enteros son preservados tanto como sea posible.
Las cadenas de caracteres <code class="literal">&quot;true&quot;</code>, <code class="literal">&quot;on&quot;</code> y <code class="literal">&quot;yes&quot;</code>
son convertidas a <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>
y <code class="literal">&quot;none&quot;</code> son considerados como <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>. <code class="literal">&quot;null&quot;</code> es convertido a <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> en este modo. Además todas las cadenas de caracteres numéricas son convertidas a entero si es posible.
</p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.parse-ini-file-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="para">
   La configuración se devuelve en forma de un array asociativo
   en caso de éxito, y <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> si ocurre un error.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.parse-ini-file-examples">
  <h3 class="title">Ejemplos</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Contenido del archivo <var class="filename">sample.ini</var></strong></p>
    <div class="example-contents">
<div class="cdata"><pre>
; Este es un archivo de configuración
; Los comentarios comienzan con &#039;;&#039;, como en 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>Ejemplo #2 Ejemplo con <span class="function"><strong>parse_ini_file()</strong></span></strong></p>
    <div class="example-contents"><p>
     Las <a href="language.constants.php" class="link">constantes</a> (pero no las
     &quot;constantes mágicas&quot; como <strong><code><a href="language.constants.magic.php#constant.file">__FILE__</a></code></strong>) también
     pueden ser utilizadas en el archivo .ini, por lo que si se define
     una constante antes de ejecutar <span class="function"><strong>parse_ini_file()</strong></span>, será
     integrada en los resultados. Solo se evalúan los valores de configuración,
     y el valor debe ser simplemente la constante. Por ejemplo:
    </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">// Análisis sin secciones<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">// Análisis con secciones<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>Resultado del ejemplo anterior es similar a:</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>Ejemplo #3 <span class="function"><strong>parse_ini_file()</strong></span> para analizar un archivo 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">// Una función simple para comparar los resultados a continuación<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">// Lee la ruta del php.ini utilizando 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">// Análisis 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">// Visualización y comparativo de los valores. Observe que get_cfg_var()<br />// dará los mismos resultados entre los resultados analizados y cargados<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'(analizado) 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">'(cargado ) 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>Resultado del ejemplo anterior es similar a:</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">(analizado) magic_quotes_gpc = Yes
(cargado ) magic_quotes_gpc = Yes</pre>
</div>
    </div>
   </div>
  </p>
  <p class="para">
   <div class="example" id="example-4">
    <p><strong>Ejemplo #4 Interpolación de Valor</strong></p>
    <div class="example-contents"><p>
     Además de evaluar las constantes, ciertos caracteres tienen un significado
     particular en un valor ini.
     Adicionalmente, las variables de entorno y opciones de configuración
     definidas previamente (ver <span class="function"><a href="function.get-cfg-var.php" class="function">get_cfg_var()</a></span>) pueden ser
     leídas utilizando la sintaxis <code class="code">${}</code>.
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
; | se utiliza para OR a nivel de bits
three = 2|3

; &amp; se utiliza para AND a nivel de bits
four = 6&amp;5

; ^ se utiliza para XOR a nivel de bits
five = 3^6

; ~ se utiliza para negación a nivel de bits
negative_two = ~1

; () se utiliza para agrupación
seven = (8|7)&amp;(6|5)

; Interpolar la variable de entorno PATH
path = ${PATH}

; Interpolar la opción de configuración &#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>Ejemplo #5 Escapar Caracteres</strong></p>
    <div class="example-contents"><p>
     Ciertos caracteres tienen un significado particular en las cadenas entre comillas dobles y deben
     ser escapados prefijándolos con un backslash.
     Primero, son las comillas dobles <code class="code">&quot;</code> como marcador de frontera,
     y el backslash <code class="code">\</code> mismo (si está seguido de uno de los caracteres especiales):
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
quoted = &quot;She said \&quot;Exactly my point\&quot;.&quot; ; Resultados en una cadena con marcas de comillas en ella.
hint = &quot;Use \\\&quot; to escape double quote&quot; ; Resultados en: Use \&quot; to escape double quote
</pre></div>
    </div>

    <div class="example-contents"><p>
     Hay una excepción para las rutas estilo Windows: es posible no escapar
     el backslash final si la cadena citada es seguida directamente por un retorno de línea:
    </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 se debe escapar una comilla doble seguida de un retorno de línea en un
     valor multilínea, es posible utilizar la concatenación de valor de la siguiente manera
     (hay una cadena de comillas dobles seguida directamente de otra):
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
long_text = &quot;Lorem \&quot;ipsum\&quot;&quot;&quot;
 dolor&quot; ; Resultados en: Lorem &quot;ipsum&quot;\n dolor
</pre></div>
    </div>

    <div class="example-contents"><p>
     Otro carácter con un significado particular es <code class="code">$</code> (el signo de dólar).
     Debe ser escapado si está seguido de una llave abierta:
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
code = &quot;\${test}&quot;
</pre></div>
    </div>

    <div class="example-contents"><p>
     El escape de caracteres no es soportado en el modo <strong><code><a href="filesystem.constants.php#constant.ini-scanner-raw">INI_SCANNER_RAW</a></code></strong>
     (en este modo todos los caracteres son tratados &quot;tal cual&quot;).
    </p></div>
    <div class="example-contents"><p>
     Es de notar que el analizador INI no soporta las secuencias de escape estándar
     (<code class="code">\n</code>, <code class="code">\t</code>, etc.).
     Si es necesario, el resultado de <span class="function"><strong>parse_ini_file()</strong></span> debe
     ser post-procesado con la función <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">Notas</h3>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Esta función no tiene nada que ver con el archivo
    <var class="filename">php.ini</var>. Este último ya ha sido procesado cuando
    se comienza a ejecutar el script. Esta función
    puede permitir leer sus propios archivos de configuración.
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Si un valor del archivo ini contiene
    datos no-alfanuméricos, debe ser protegido colocándolo
    entre comillas dobles (&quot;).
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    Existen palabras reservadas que no deben ser utilizadas como claves
    en los archivos ini. Esto incluye: <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> y <code class="literal">off</code>.
    Los valores <code class="literal">null</code>, <code class="literal">off</code>, <code class="literal">no</code>
    y <code class="literal">false</code> dan &quot;&quot; (cadena vacía). Los valores
    <code class="literal">on</code>, <code class="literal">yes</code> y
    <code class="literal">true</code> dan &quot;1&quot;, a menos que se utilice el modo
    <strong><code><a href="filesystem.constants.php#constant.ini-scanner-typed">INI_SCANNER_TYPED</a></code></strong>.
    Los caracteres <code class="literal">?{}|&amp;~!()^&quot;</code> no deben ser utilizados
    en ninguna parte de la clave y tienen un significado especial en el valor.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Las entradas sin un signo igual serán ignoradas. Por ejemplo, &quot;foo&quot;
    será ignorado mientras que &quot;bar =&quot; será analizado y añadido con un valor vacío.
    Por ejemplo, MySQL tiene una opción de configuración &quot;no-auto-rehash&quot; en
    el archivo <var class="filename">my.cnf</var> que no toma valor, por lo tanto,
    será ignorada.
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Los archivos ini son generalmente tratados como archivos de texto sin formato
    por los servidores web, y por lo tanto enviados al navegador si se solicita. Esto significa
    que para la seguridad, los archivos ini deben ser almacenados fuera
    de la raíz docroot, o reconfigurar el servidor web para no servirlos.
    El fracaso de realizar una de estas medidas puede introducir un riesgo de seguridad.
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.parse-ini-file-seealso">
  <h3 class="title">Ver también</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> - Analiza una cadena de configuraci&oacute;n</span></li>
   </ul>
  </p>
 </div>


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