<?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 => 'de',
  ),
  'this' => 
  array (
    0 => 'function.parse-ini-file.php',
    1 => 'parse_ini_file',
    2 => 'Parst eine Konfigurationsdatei',
  ),
  'up' => 
  array (
    0 => 'ref.filesystem.php',
    1 => 'Dateisystem',
  ),
  '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' => 'de',
    '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">Parst eine Konfigurationsdatei</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.parse-ini-file-description">
  <h3 class="title">Beschreibung</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> lädt die in
   <code class="parameter">filename</code> angegebene Datei, und gibt
   die darin enthaltenen Einstellungen in einem assoziativen
   Array zurück.
  </p>
  <p class="para">
   Die Struktur der Ini-Datei ist identisch zur <var class="filename">php.ini</var>.
  </p>
  <div class="warning"><strong class="warning">Warnung</strong>
   <p class="simpara">
    Diese Funktion darf nicht mit unvertrauenswürdigen Eingaben verwendet werden,
    es sei denn, <code class="parameter">scanner_mode</code> ist <strong><code><a href="filesystem.constants.php#constant.ini-scanner-raw">INI_SCANNER_RAW</a></code></strong>,
    da die geparste Ausgabe Werte von sensiblen Konstanten enthalten könnte,
    wie beispielsweise Konstanten, die ein Datenbank-Passwort enthalten.
   </p>
  </div>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.parse-ini-file-parameters">
  <h3 class="title">Parameter-Liste</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">filename</code></dt>
     <dd>
      <p class="para">
       Der Dateiname der zu parsenden ini-Datei. Wenn ein relativer Pfad
       verwendet wird, wird er relativ zum aktuellen Arbeitsverzeichnis
       ausgewertet und dann entsprechend dem
       <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">
       Setzt man den Parameter <code class="parameter">process_sections</code>
       auf <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, erhält man ein mehrdimensionales Array mit den
       Gruppennamen und Einstellungen. Der Standardwert für
       <code class="parameter">process_sections</code> ist <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">
       Kann entweder <strong><code><a href="filesystem.constants.php#constant.ini-scanner-normal">INI_SCANNER_NORMAL</a></code></strong> (Standard) oder
       <strong><code><a href="filesystem.constants.php#constant.ini-scanner-raw">INI_SCANNER_RAW</a></code></strong> sein. Ist
       <strong><code><a href="filesystem.constants.php#constant.ini-scanner-raw">INI_SCANNER_RAW</a></code></strong> gesetzt, so werden die Werte der
       Optionen nicht geparst.
      </p>
      <p class="para">
    Seit PHP 5.6.1 kann auch <strong><code><a href="filesystem.constants.php#constant.ini-scanner-typed">INI_SCANNER_TYPED</a></code></strong> angegeben werden.
    In diesem Modus werden soweit möglich die Typen von Boolean-, Null- oder Integer-Werten
    beibehalten. Die Zeichenketten <code class="literal">&quot;true&quot;</code>, <code class="literal">&quot;on&quot;</code> und
    <code class="literal">&quot;yes&quot;</code> werden zu <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> konvertiert. <code class="literal">&quot;false&quot;</code>,
    <code class="literal">&quot;off&quot;</code>, <code class="literal">&quot;no&quot;</code> und <code class="literal">&quot;none&quot;</code> werden
    als <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> angesehen. <code class="literal">&quot;null&quot;</code> wird in diesem Modus zu <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
    Soweit möglich werden alle numerischen Zeichenketten zu Integertypen umgewandelt.
   </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.parse-ini-file-returnvalues">
  <h3 class="title">Rückgabewerte</h3>
  <p class="para">
   Im Erfolgsfall werden die Einstellungen als assoziatives <span class="type"><a href="language.types.array.php" class="type Array">Array</a></span>
   zurückgegeben, ansonsten <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.parse-ini-file-examples">
  <h3 class="title">Beispiele</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Beispiel #1 Inhalt der <var class="filename">sample.ini</var></strong></p>
    <div class="example-contents">
<div class="cdata"><pre>
; Dies ist ein Beispiel für eine Konfigurationsdatei
; Kommentare beginnen wie in der php.ini mit &#039;;&#039;

[erste_gruppe]
eins = 1
fünf = 5
tier = VOGEL

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

[dritte_gruppe]
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>Beispiel #2 <span class="function"><strong>parse_ini_file()</strong></span>-Beispiel</strong></p>
    <div class="example-contents"><p>
     Abgesehen von &quot;magischen Konstanten&quot; wie <strong><code><a href="language.constants.magic.php#constant.file">__FILE__</a></code></strong>
     können auch <a href="language.constants.php" class="link">Konstanten</a> in einer
     Ini-Datei geparst werden, indem man einen INI-Wert als Konstante
     definiert, bevor <span class="function"><strong>parse_ini_file()</strong></span> aufgerufen wird.
     Diese Konstante wird in die Ergebnisse integriert. Dabei werden nur
     INI-Werte ausgewertet und der Wert muss genau die Konstante sein. Zum
     Beispiel:
    </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">'VOGEL'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Amsel'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Ohne Gruppen analysieren<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">// Mit Gruppen analysieren<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>Das oben gezeigte Beispiel erzeugt
eine ähnliche Ausgabe wie:</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Array
(
    [eins] =&gt; 1
    [fünf] =&gt; 5
    [tier] =&gt; Amsel
    [pfad] =&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
(
    [erste_gruppe] =&gt; Array
        (
            [eins] =&gt; 1
            [fünf] =&gt; 5
            [tier] =&gt; Amsel
        )

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

    [dritte_gruppe] =&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>Beispiel #3 <span class="function"><strong>parse_ini_file()</strong></span> parst eine 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">// Eine einfache Funktion, um das Ergebnis zu vergleichen<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">janein</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">'Ja' </span><span style="color: #007700">: </span><span style="color: #DD0000">'Nein'</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #FF8000">// Pfad der php.ini mittels der Funktion php_ini_loaded_file() holen<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">// Parsen der 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">// Werte ausgeben und vergleichen. Beachten Sie dass die Verwendung von<br />// get_cfg_var() die gleichen Ergebnisse für geparste und geladene<br />// Werte geben wird<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'(geparst) magic_quotes_gpc = ' </span><span style="color: #007700">. </span><span style="color: #0000BB">janein</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">'(geladen) magic_quotes_gpc = ' </span><span style="color: #007700">. </span><span style="color: #0000BB">janein</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>Das oben gezeigte Beispiel erzeugt
eine ähnliche Ausgabe wie:</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">(geparst) magic_quotes_gpc = Ja
(geladen) magic_quotes_gpc = Nein</pre>
</div>
    </div>
   </div>
  </p>
  <p class="para">
   <div class="example" id="example-4">
    <p><strong>Beispiel #4 Wert-Interpolation</strong></p>
    <div class="example-contents"><p>
     Neben der Auswertung von Konstanten haben bestimmte Zeichen eine
     besondere Bedeutung in einem ini-Wert. Darüber hinaus können
     Umgebungsvariablen und zuvor definierte Konfigurationsoptionen (siehe
     <span class="function"><a href="function.get-cfg-var.php" class="function">get_cfg_var()</a></span>) mit der <code class="code">${}</code>-Syntax gelesen
     werden.
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
; | wird für bitweises OR verwendet
three = 2|3

; &amp; wird für bitweises AND verwendet
four = 6&amp;5

; ^ wird für bitweises XOR verwendet
five = 3^6

; ~ wird für bitweises Negieren verwendet
negative_two = ~1

; () wird für die Gruppierung verwendet
seven = (8|7)&amp;(6|5)

; Auswerten der Umgebungsvariablen PATH
path = ${PATH}

; Auswerten der Konfigurationsoption &quot;memory_limit&quot;.
configured_memory_limit = ${memory_limit}

</pre></div>
    </div>

   </div>
  </p>
  <p class="para">
   <div class="example" id="example-5">
    <p><strong>Beispiel #5 Zeichen maskieren</strong></p>
    <div class="example-contents"><p>
     Einige Zeichen haben in Zeichenketten in doppelten Anführungszeichen eine
     besondere Bedeutung und müssen durch das Backslash-Präfix maskiert
     werden. Dies sind vor allem das doppelte Anführungszeichen <code class="code">&quot;</code>
     als Begrenzungszeichen und der Backslash <code class="code">\</code> selbst (wenn
     darauf ein Sonderzeichen folgt):
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
quoted = &quot;She said \&quot;Exactly my point\&quot;.&quot; ; Ergibt eine Zeichenkette mit Anführungszeichen darin.
hint = &quot;Use \\\&quot; to escape double quote&quot; ; Ergibt: Use \&quot; to escape double quote
</pre></div>
    </div>

    <div class="example-contents"><p>
     Es gibt eine Ausnahme für Windows-ähnliche Pfade: Es ist möglich, den
     abschließenden Backslash nicht zu maskieren, wenn auf die Zeichenkette in
     Anführungsstrichen direkt ein Zeilenumbruch folgt:
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
save_path = &quot;C:\Temp\&quot;
</pre></div>
    </div>

    <div class="example-contents"><p>
     Wenn man doppelte Anführungszeichen gefolgt von einem Zeilenumbruch in
     einem mehrzeiligen Wert vermeiden muss, ist es möglich, die Verkettung
     von Werten auf folgende Weise zu verwenden (eine Zeichenkette mit zwei
     direkt aufeinanderfolgenden Anführungszeichen):
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
long_text = &quot;Lorem \&quot;ipsum\&quot;&quot;&quot;
 dolor&quot; ; Ergibt: Lorem &quot;ipsum&quot;\n dolor
</pre></div>
    </div>

    <div class="example-contents"><p>
     Ein weiteres Zeichen mit besonderer Bedeutung ist <code class="code">$</code> (das
     Dollarzeichen). Wenn darauf eine öffnende geschweifte Klammer folgt, muss
     es maskiert werden:
    </p></div>
    <div class="example-contents">
<div class="cdata"><pre>
code = &quot;\${test}&quot;
</pre></div>
    </div>

    <div class="example-contents"><p>
     Das Maskieren von Zeichen wird im Modus
     <strong><code><a href="filesystem.constants.php#constant.ini-scanner-raw">INI_SCANNER_RAW</a></code></strong> nicht unterstützt (in diesem Modus
     werden alle Zeichen verarbeitet wie sie sind).
    </p></div>
    <div class="example-contents"><p>
     Zu beachten ist, dass der ini-Parser keine Standard-Maskierungssequenzen
     unterstützt (<code class="code">\n</code>, <code class="code">\t</code> etc.). Falls erforderlich,
     muss das Ergebnis von <span class="function"><strong>parse_ini_file()</strong></span> mit der
     Funktion <span class="function"><a href="function.stripcslashes.php" class="function">stripcslashes()</a></span> nachbearbeitet werden.
    </p></div>
   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.parse-ini-file-notes">
  <h3 class="title">Anmerkungen</h3>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Diese Funktion hat nichts mit dem Laden der <var class="filename">php.ini</var>-Datei zu tun. Diese
    ist zum Ausführungszeitpunkt Ihres Skriptes bereits vollständig
    verarbeitet. Diese Funktion kann verwendet werden, um die
    Konfigurationsdateien Ihrer eigenen Anwendung zu lesen.
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Falls ein Wert der Ini-Datei ein nicht alphanumerisches Zeichen enthält
    muss dieser Wert in doppelte Anführungszeichen (&quot;) eingeschlossen werden.
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <span class="simpara">
    Es gibt reservierte Schlüsselwörter, welche nicht als Schlüssel in
    Ini-Dateien verwendet werden dürfen. Diese umfassen:
    <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>, <code class="literal">none</code>. Die Werte
    <code class="literal">null</code>, <code class="literal">off</code>, <code class="literal">no</code> und
    <code class="literal">false</code> ergeben <code class="literal">&quot;&quot;</code> und die Werte
    <code class="literal">on</code>, <code class="literal">yes</code> and <code class="literal">true</code>
    ergeben <code class="literal">&quot;1&quot;</code>, solange der Modus
    <strong><code><a href="filesystem.constants.php#constant.ini-scanner-typed">INI_SCANNER_TYPED</a></code></strong> nicht verwendet wird . Die Zeichen
    <code class="literal">?{}|&amp;~!()^&quot;</code> dürfen in einem Schlüssel nicht
    verwendet werden und haben im Wert besondere Bedeutung.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Einträge ohne Gleichheitszeichen werden ignoriert. Beispielsweise würde
    &quot;foo&quot; ignoriert werden, während &quot;bar =&quot; geparst und mit einem leeren Wert
    hinzugefügt würde. Beispielsweise hat MySQL eine Einstellung
    &quot;no-auto-rehash&quot; in der <var class="filename">my.cnf</var> welche keinen Wert
    enthält und somit ignoriert würde.
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Ini-Dateien werden von Webservern in der Regel als reiner Text behandelt
    und daher den Browsern auf Anfrage zur Verfügung gestellt. Das bedeutet,
    dass Sie aus Sicherheitsgründen entweder Ihre ini-Dateien außerhalb des
    Web-Wurzelverzeichnisses (DocRoot) aufbewahren müssen oder Ihren Webserver
    so umkonfigurieren, dass sie nicht ausgeliefert werden. Wenn Sie beides
    nicht tun, kann dies ein Sicherheitsrisiko darstellen.
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.parse-ini-file-seealso">
  <h3 class="title">Siehe auch</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> - Analysiert einen Konfigurations-String</span></li>
   </ul>
  </p>
 </div>


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