<?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.interactive.php',
    1 => 'Interaktive Shell',
    2 => 'Interaktive Shell',
  ),
  'up' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Nutzung der Kommandzeile',
  ),
  'prev' => 
  array (
    0 => 'features.commandline.io-streams.php',
    1 => 'I/O Streams',
  ),
  'next' => 
  array (
    0 => 'features.commandline.webserver.php',
    1 => 'Eingebauter Webserver',
  ),
  '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.interactive" class="section">
  <h2 class="title">Interaktive Shell</h2>
  <p class="para">
   Wenn PHP mit der Option <strong class="option configure">--with-readline</strong>
   kompiliert wurde, bietet die <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> mit der Option <strong class="option unknown">-a</strong>
   eine interaktive Shell an. Von PHP 7.1.0 an steht die interaktive Shell
   auch unter Windows zu Verfügung, wenn die
   <a href="book.readline.php" class="link">readline-Erweiterung</a> aktiviert ist.
  </p>
  <p class="para">
   Mittels der interaktiven Shell können Sie PHP-Code eingeben und direkt
   ausführen lassen.
  </p>
  <div class="example" id="example-1">
   <p><strong>Beispiel #1 Ausführung von Code in der interaktiven Shell</strong></p>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">$ php -a
Interactive shell

php &gt; echo 5+8;
13
php &gt; function addTwo($n)
php &gt; {
php { return $n + 2;
php { }
php &gt; var_dump(addtwo(2));
int(4)
php &gt;</pre>
</div>
   </div>

  </div>
  <p class="para">
   Die interaktive Shell bietet auch Tabulator-Autovervollständigung für
   Funktionen, Konstanten, Klassen, Variablen, statische Methoden und
   Klassenkonstanten.
  </p>
  <div class="example" id="example-2">
   <p><strong>Beispiel #2 Tabulator-Autovervollständigung</strong></p>
   <div class="example-contents"><p>
    Wenn es mehrere mögliche Vervollständigungen gibt, wird durch zweimaliges
    Drücken der Tabulator-Taste eine Liste dieser Vervollständigungen
    angezeigt:
   </p></div>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">php &gt; strp[TAB][TAB]
strpbrk   strpos    strptime
php &gt; strp</pre>
</div>
   </div>

   <div class="example-contents"><p>
    Wenn es nur eine mögliche Vervollständigung gibt, führt ein einmaliges
    Drücken der Tabulator-Taste zur Vervollständigung der Zeile:
   </p></div>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">php &gt; strpt[TAB]ime(</pre>
</div>
   </div>

   <div class="example-contents"><p>
    Autovervollständigung funktioniert auch für Namen, welche bereits während
    dieser interaktiven Session definiert wurden:
   </p></div>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">php &gt; $fooThisIsAReallyLongVariableName = 42;
php &gt; $foo[TAB]ThisIsAReallyLongVariableName</pre>
</div>
   </div>

  </div>
  <p class="simpara">
   Die interaktive Shell speichert den Verlauf von zuletzt eingegeben Zeilen,
   auf die mittels der Pfeiltasten zugegriffen werden kann. Der Verlauf wird
   in der Datei <var class="filename">~/.php_history</var> gespeichert.
   Seit PHP 8.4.0 kann der Pfad zur History-Datei mit der Umgebungsvariablen
   <var class="envar">PHP_HISTFILE</var> festgelegt werden.
  </p>
  <p class="para">
   Die <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> bietet die <var class="filename">php.ini</var>-Optionen
   <code class="parameter">cli.pager</code> und <code class="parameter">cli.prompt</code>. Die
   Option <code class="parameter">cli.pager</code> erlaubt einem externen Programm
   (wie etwa <var class="filename">less</var>) als Pager für die Ausgabe zu agieren,
   anstatt dass diese direkt ausgegeben wird. Die Option
   <code class="parameter">cli.prompt</code> erlaubt das Ändern der
   <code class="literal">php &gt;</code>-Eingabeaufforderung.
  </p>
  <p class="para">
   Es ist auch möglich, die <var class="filename">php.ini</var>-Optionen in der interaktiven Shell zu
   setzen, indem man eine Kurzschreibweise verwendet.
  </p>
  <div class="example" id="example-3">
   <p><strong>Beispiel #3 Setzen von <var class="filename">php.ini</var>-Optionen in der interaktiven Shell</strong></p>
   <div class="example-contents"><p>
    Die Option <code class="parameter">cli.prompt</code>:
   </p></div>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">php &gt; #cli.prompt=hello world :&gt;
hello world :&gt;</pre>
</div>
   </div>

   <div class="example-contents"><p>
    Mittels Backticks kann PHP-Code in der Eingabeaufforderung ausgeführt
    werden:
   </p></div>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">php &gt; #cli.prompt=`echo date(&#039;H:i:s&#039;);` php &gt;
15:49:35 php &gt; echo &#039;hi&#039;;
hi
15:49:43 php &gt; sleep(2);
15:49:45 php &gt;</pre>
</div>
   </div>

   <div class="example-contents"><p>
    Setzen des Pagers auf <var class="filename">less</var>:
   </p></div>
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">php &gt; #cli.pager=less
php &gt; phpinfo();
(output displayed in less)
php &gt;</pre>
</div>
   </div>

  </div>
  <p class="para">
   Die Option <code class="parameter">cli.prompt</code> unterstützt einige
   Escape-Sequenzen.
   <table class="doctable table">
    <caption><strong><code class="parameter">cli.prompt</code>-Escape-Sequenzen</strong></caption>
    
     <thead>
      <tr>
       <th>Sequenzen</th>
       <th>Beschreibung</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td><code class="literal">\e</code></td>
       <td>
        Wird verwendet, um Farben zur Eingabeaufforderung hinzuzufügen. Ein
        Beispiel: <code class="literal">\e[032m\v \e[031m\b \e[34m\&gt; \e[0m</code>
       </td>
      </tr>

      <tr>
       <td><code class="literal">\v</code></td>
       <td>Die PHP-Version.</td>
      </tr>

      <tr>
       <td><code class="literal">\b</code></td>
       <td>
        Gibt an, in welchem Block sich PHP befindet. Zum Beispiel gibt
        <code class="literal">/*</code> an, dass man sich gerade in einem mehrzeiligen
        Kommentar befindet. Der äußerste Block ist <code class="literal">php</code>.
       </td>
      </tr>

      <tr>
       <td><code class="literal">\&gt;</code></td>
       <td>
        Gibt das Eingabeaufforderungszeichen an. Standardmäßig ist dies
        <code class="literal">&gt;</code>, ändert sich jedoch, wenn sich die Shell
        innerhalb eines nicht beendeten Blocks oder Strings befindet. Mögliche
        Zeichen sind: <code class="literal">&#039; &quot; { ( &gt;</code>
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Dateien, die mit
    <a href="ini.core.php#ini.auto-prepend-file" class="link">auto_prepend_file</a> und
    <a href="ini.core.php#ini.auto-append-file" class="link">auto_append_file</a> eingebunden
    wurden, werden in diesem Modus mit einigen Einschränkungen geparst - z. B.
    müssen Funktionen vor dem Aufruf definiert werden.
   </p>
  </p></blockquote>

  <div class="section" id="features.commandline.interactive.mode">
   <h2 class="title">Interaktiver Modus</h2>
   <p class="para">
    Wenn die readline-Erweiterung nicht verfügbar ist, wurde vor PHP 8.1.0
    durch den Aufruf von <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> mit der Option <strong class="option unknown">-a</strong> in den
    interaktiven Modus gewechselt. In diesem Modus muss ein komplettes
    PHP-Skript über STDIN übergeben werden, das nach dem Beenden mit
    <kbd class="keycombo">
     <kbd class="keycap">CTRL</kbd>
     +<kbd class="keycap">D</kbd>
    </kbd>
    (POSIX) oder
    <kbd class="keycombo">
     <kbd class="keycap">CTRL</kbd>
     +<kbd class="keycap">Z</kbd>
    </kbd>
    gefolgt von <code class="literal">ENTER</code> (Windows) ausgewertet wird.
    Dies ist im Grunde dasselbe wie der Aufruf von <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> ohne die Option
    <strong class="option unknown">-a</strong>.
   </p>
   <p class="para">
    Seit PHP 8.1.0 schlägt der Aufruf von <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> mit der Option
    <strong class="option unknown">-a</strong> fehl, wenn die readline-Erweiterung nicht verfügbar
    ist.
   </p>
  </div>
 </div><?php manual_footer($setup); ?>