<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/features.commandline.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'features.commandline.differences.php',
    1 => 'Unterschiede zu anderen SAPIs',
    2 => 'Unterschiede zu anderen SAPIs',
  ),
  'up' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Nutzung der Kommandzeile',
  ),
  'prev' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Nutzung der Kommandzeile',
  ),
  'next' => 
  array (
    0 => 'features.commandline.options.php',
    1 => 'Optionen',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'features/commandline.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="features.commandline.differences" class="section">
  <h2 class="title">Unterschiede zu anderen <abbr title="Server Application Programming Interface">SAPI</abbr>s</h2>
  <p class="para">
   Wesentliche Unterschiede der <abbr title="Command Line Interpreter/Interface">CLI</abbr>-<abbr title="Server Application Programming Interface">SAPI</abbr> zu anderen
   <abbr title="Server Application Programming Interface">SAPI</abbr>s:
   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      Anders als bei der <abbr title="Common Gateway Interface">CGI</abbr>-<abbr title="Server Application Programming Interface">SAPI</abbr> werden
      keine Header ausgegeben.
     </p>
     <p class="para">
      Obwohl die <abbr title="Common Gateway Interface">CGI</abbr>-<abbr title="Server Application Programming Interface">SAPI</abbr> eine Option
      bietet, HTTP-Header zu unterdrücken, gibt es keine gleichwertige Option,
      sie in der <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> anzuzeigen.
     </p>
     <p class="para">
      <abbr title="Command Line Interpreter/Interface">CLI</abbr> wird standardmäßig im stillen Modus gestartet, dennoch gibt es die
      Optionen <strong class="option unknown">-q</strong> und <strong class="option unknown">--no-header</strong> aus
      Kompatibilitätsgründen noch, sodass auch ältere
      <abbr title="Common Gateway Interface">CGI</abbr>-Skripte noch verwendet werden können.
     </p>
     <p class="para">
      Es wechselt das Arbeitsverzeichnis nicht in das des Skriptes. (Die
      Optionen <strong class="option unknown">-C</strong> und <strong class="option unknown">--no-chdir</strong> wurden aus
      Kompatibilitätsgründen beibehalten.)
     </p>
     <p class="para">
      Fehlermeldungen im Klartext (keine <abbr title="Hyper Text Markup Language">HTML</abbr>-Formatierung).
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Es gibt bestimmte <var class="filename">php.ini</var>-Direktiven, die von der <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> außer
      Kraft gesetzt werden, weil sie in einer Kommandozeilenumgebung keinen
      Sinn ergeben.
     </p>
     <p class="para">
      <table class="doctable table">
       <caption><strong>Überschriebene <var class="filename">php.ini</var>-Direktiven</strong></caption>
       
        <thead>
         <tr>
          <th>Direktive</th>
          <th><abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr>-Standardwert</th>
          <th>Kommentar</th>
         </tr>

        </thead>

        <tbody class="tbody">
         <tr>
          <td><a href="errorfunc.configuration.php#ini.html-errors" class="link">html_errors</a></td>
          <td><strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></td>
          <td>
           Die Standardeinstellung ist <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, weil es sehr schwierig sein
           kann, Fehlermeldunge auf der Kommandozeile zu lesen, wenn sie
           mit bedeutungslosen <abbr title="Hyper Text Markup Language">HTML</abbr>-Tags vollgestopft ist.
          </td>
         </tr>

         <tr>
          <td><a href="outcontrol.configuration.php#ini.implicit-flush" class="link">implicit_flush</a></td>
          <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
          <td>
           Auf der Kommandozeile ist es normalerweise erwünscht, dass alle
           Ausgaben, die von <span class="function"><a href="function.print.php" class="function">print</a></span>,
           <span class="function"><a href="function.echo.php" class="function">echo</a></span> und Konsorten kommen, sofort angezeigt
           werden und nicht in einem Puffer zwischengespeichert werden. Es ist
           jedoch immer noch möglich,
           <a href="ref.outcontrol.php" class="link">output buffering</a> zu
           verwenden, um die Standardausgabe aufzuschieben oder zu
           manipulieren.
          </td>
         </tr>

         <tr>
          <td><a href="info.configuration.php#ini.max-execution-time" class="link">max_execution_time</a></td>
          <td>0 (unendlich)</td>
          <td>
           Da die Anwendungsbereiche von PHP auf der Kommandozeile wesentlich
           vielfältiger sind als in webbasierten Anwendungen und oft lange
           Laufzeiten besitzen, wird die maximale Ausführungszeit auf
           unendlich gesetzt.
          </td>
         </tr>

         <tr>
          <td><a href="ini.core.php#ini.register-argc-argv" class="link">register_argc_argv</a></td>
          <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
          <td>
           <p class="para">
            Weil diese Einstellung auf <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> gesetzt ist, haben Skripte, die
            über die <abbr title="Command Line Interpreter/Interface">CLI</abbr>-<abbr title="Server Application Programming Interface">SAPI</abbr> ausgeführt werden, immer
            Zugriff auf <em>argc</em> (die Anzahl der Argumente,
            die der Anwendung übergeben wurden) und <em>argv</em>
            (das Array mit den übergebenen Argumenten).
           </p>
           <p class="para">
            Die PHP-Variablen <var class="varname"><a href="reserved.variables.argc.php" class="classname">$argc</a></var> und
            <var class="varname"><a href="reserved.variables.argv.php" class="classname">$argv</a></var> werden automatisch mit den entsprechenden
            Werten gefüllt, wenn die <abbr title="Command Line Interpreter/Interface">CLI</abbr>-<abbr title="Server Application Programming Interface">SAPI</abbr> verwendet
            wird. Diese Werte können auch im Array <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER</a></var>
            gefunden werden, beispielsweise:
            <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER['argv']</a></var>.
           </p>
           <div class="warning"><strong class="warning">Warnung</strong>
            <p class="para">
             Wenn
             <a href="ini.core.php#ini.register-argc-argv" class="link">register_argc_argv</a>
             aktiviert ist, ist das Vorhandensein von <var class="varname"><a href="reserved.variables.argv.php" class="classname">$argv</a></var>
             oder <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER['argv']</a></var> kein zuverlässiger
             Hinweis darauf, dass ein Skript von der Kommandozeile aus
             ausgeführt wird, da diese Variablen auch in anderen Kontexten
             gesetzt werden können.
             Stattdessen sollte der von <span class="function"><a href="function.php-sapi-name.php" class="function">php_sapi_name()</a></span>
             zurückgegebene Wert überprüft werden.
             <div class="informalexample">
              <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">php_sapi_name</span><span style="color: #007700">() === </span><span style="color: #DD0000">'cli'</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"Dies wird von der Befehlszeile aus ausgeführt!\n"</span><span style="color: #007700">;<br />}</span></span></code></div>
              </div>

             </div>
            </p>
           </div>
          </td>
         </tr>

         <tr>
          <td><a href="outcontrol.configuration.php#ini.output-buffering" class="link">output_buffering</a></td>
          <td><strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></td>
          <td>
           <p class="para">
            Auch wenn diese <var class="filename">php.ini</var>-Option fest auf <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> gesetzt ist,
            sind die Funktionen der
            <a href="book.outcontrol.php" class="link">Ausgabepufferung</a> verfügbar.
           </p>
          </td>
         </tr>

         <tr>
          <td><a href="info.configuration.php#ini.max-input-time" class="link">max_input_time</a></td>
          <td><strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></td>
          <td>
           <p class="para">
            Die PHP-<abbr title="Command Line Interpreter/Interface">CLI</abbr> unterstützt GET, POST und Dateiuploads nicht.
           </p>
          </td>
         </tr>

        </tbody>
       
      </table>

     </p>
     <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
      <p class="para">
       Diese Direktiven können nicht mit einem anderen Wert aus der
       Konfigurationsdatei <var class="filename">php.ini</var> oder einer eigenen (falls angegeben)
       initialisiert werden. Diese Einschränkung ergibt sich dadurch, dass
       diese Standardwerte angewandt werden, nachdem alle
       Konfigurationsdateien gelesen wurden. Dennoch können die Werte zur
       Laufzeit verändert werden (was aber nicht für alle dieser Direktiven
       einen Sinn ergibt, beispielsweise
       <a href="ini.core.php#ini.register-argc-argv" class="link">register_argc_argv</a>).
      </p>
     </p></blockquote>
     <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
      <p class="para">
       Es wird empfohlen
       <a href="misc.configuration.php#ini.ignore-user-abort" class="link">ignore_user_abort</a> für
       Kommandozeilenanwendungen zu setzen. Siehe
       <span class="function"><a href="function.ignore-user-abort.php" class="function">ignore_user_abort()</a></span> für weitere Informationen.
      </p>
     </p></blockquote>
    </li>
    <li class="listitem">
     <p class="para">
      Um die Arbeit auf der Kommandozeilenumgebung zu erleichtern, wurden
      einige Konstanten für
      <a href="features.commandline.io-streams.php" class="link">Ein- und Ausgabestreams</a>
      definiert.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Die <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> wechselt das aktuelle Arbeitsverzeichnis <strong>nicht</strong> ins Verzeichnis des ausgeführten Skripts.
     </p>
     <div class="example" id="example-1">
      <p><strong>Beispiel #1 
       Beispiel, welches den Unterschied zur
       <abbr title="Common Gateway Interface">CGI</abbr>-<abbr title="Server Application Programming Interface">SAPI</abbr> verdeutlicht:
      </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">// Unsere einfache Anwendung namens test.php<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">getcwd</span><span style="color: #007700">(), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>
       Bei der <abbr title="Common Gateway Interface">CGI</abbr>-Version ist die Ausgabe folgende:
      </p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
$ pwd
/tmp

$ php -q anderes_verzeichnis/test.php
/tmp/anderes_verzeichnis
</pre></div>
      </div>
      <div class="example-contents"><p>
       Dies zeigt deutlich, dass PHP vom aktuellen Verzeichnis in das des
       ausgeführten Skriptes wechselt.
      </p></div>
      <div class="example-contents"><p>
       Nutzung der <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> führt zu folgender Ausgabe:
      </p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
$ pwd
/tmp

$ php -f anderes_verzeichnis/test.php
/tmp
</pre></div>
      </div>
      <div class="example-contents"><p>
       Dies ermöglicht eine größere Flexibilität beim Erstellen von
       Kommandozeilenanwendungen in PHP.
      </p></div>
     </div>
     <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
      <p class="para">
       Die <abbr title="Common Gateway Interface">CGI</abbr>-<abbr title="Server Application Programming Interface">SAPI</abbr> unterstützt das
       Verhalten der <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> durch Angabe der Option <strong class="option unknown">-C</strong>
       beim Starten von der Kommandozeile.
      </p>
     </p></blockquote>
    </li>
   </ul>
  </p>
 </div><?php manual_footer($setup); ?>