<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'features.commandline.interactive.php',
    1 => 'Shell Interactivo',
    2 => 'Shell Interactivo',
  ),
  'up' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Utilizaci&oacute;n de l&iacute;neas de comando',
  ),
  'prev' => 
  array (
    0 => 'features.commandline.io-streams.php',
    1 => 'Flujos I/O',
  ),
  'next' => 
  array (
    0 => 'features.commandline.webserver.php',
    1 => 'Servidor web interno',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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">Shell Interactivo</h2>

  <p class="para">
   El <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> proporciona un shell interactivo al usar la opción <strong class="option unknown">-a</strong> si PHP se ha compilado con la opción <strong class="option configure">--with-readline</strong>. Desde PHP 7.1.0, el shell interactivo también está disponible en Windows, si la extensión <a href="book.readline.php" class="link">readline</a> está activada.
  </p>

  <p class="para">
   Al usar el shell interactivo, tiene la posibilidad de escribir código PHP y que se ejecute directamente.
  </p>

  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Ejecución de código usando el shell interactivo</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="simpara">
   El shell interactivo también proporciona autocompletado de funciones, constantes, nombres de clases, variables, llamadas a métodos estáticos y constantes de clases utilizando la tecla de tabulación. Desde PHP 8.4.0, la ruta hacia el archivo de historial puede establecerse utilizando la variable de entorno <var class="envar">PHP_HISTFILE</var>.
  </p>

  <div class="example" id="example-2">
   <p><strong>Ejemplo #2 Autocompletado usando la tecla de tabulación</strong></p>
   <div class="example-contents"><p>
    Presionar dos veces la tecla de tabulación cuando hay varias posibles completaciones mostrará una lista de estas completaciones:
   </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>
    Cuando solo hay una posible completación, presionar la tecla de tabulación una vez completará el resto en la misma línea:
   </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>
    La completación también funcionará para los nombres que se han definido durante la sesión actual del shell interactivo:
   </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="para">
   El shell interactivo almacena su historial y puede acceder a él utilizando las teclas arriba y abajo. El historial se guarda en el archivo <var class="filename">~/.php_history</var>.
  </p>

  <p class="para">
   El <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> proporciona 2 directivas del <var class="filename">php.ini</var>: <code class="parameter">cli.pager</code> y <code class="parameter">cli.prompt</code>. La directiva <code class="parameter">cli.pager</code> permite la definición de un programa externo (como <var class="filename">less</var>) a utilizar como pager para la salida en lugar de mostrarla directamente en la pantalla. La directiva <code class="parameter">cli.prompt</code> permite la modificación del prompt <code class="literal">php &gt;</code>.
  </p>

  <p class="para">
   También es posible definir directivas del <var class="filename">php.ini</var> en un shell interactivo utilizando notaciones abreviadas.
  </p>

  <div class="example" id="example-3">
   <p><strong>Ejemplo #3 Definición de directivas del <var class="filename">php.ini</var> en un shell interactivo</strong></p>
   <div class="example-contents"><p>
    La definición de la directiva <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>
    Utilizando comillas invertidas, es posible ejecutar código PHP en el prompt:
   </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>
    Definición del pager a <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();
(salida mostrada con less)
php &gt;</pre>
</div>
   </div>

  </div>

  <p class="para">
   La directiva <code class="parameter">cli.prompt</code> soporta algunas secuencias de escape:
   <table class="doctable table">
    <caption><strong>Secuencias de escape de <code class="parameter">cli.prompt</code></strong></caption>
    
     <thead>
      <tr>
       <th>Secuencia:</th>
       <th>Descripción:</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td><code class="literal">\e</code></td>
       <td>
        utilizado para agregar colores al prompt. Ejemplo:
        <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>La versión de PHP.</td>
      </tr>

      <tr>
       <td><code class="literal">\b</code></td>
       <td>
        Indica en qué bloque de PHP nos encontramos. Por ejemplo, <code class="literal">/*</code> permite indicar que estamos en un comentario multilínea. El ámbito externo se representa por <code class="literal">php</code>.
       </td>
      </tr>

      <tr>
       <td><code class="literal">\&gt;</code></td>
       <td>
        Indica el carácter utilizado para el prompt. Por defecto, será <code class="literal">&gt;</code>, pero puede cambiarse cuando el shell se encuentra en un bloque indeterminado o en una cadena de caracteres. Los caracteres posibles son: <code class="literal">&#039; &quot; {
        ( &gt;</code>
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Los archivos incluidos a través de <a href="ini.core.php#ini.auto-prepend-file" class="link">auto_prepend_file</a> y <a href="ini.core.php#ini.auto-append-file" class="link">auto_append_file</a> se analizan en este modo, pero con algunas restricciones; es decir, las funciones deben haber sido definidas antes de la llamada.
   </p>
  </p></blockquote>

  <div class="section" id="features.commandline.interactive.mode">
   <h2 class="title">Modo interactivo</h2>
   <p class="para">
    Si la extensión readline no está disponible, anterior a PHP 8.1.0, invocar el <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> con la opción <strong class="option unknown">-a</strong> proporciona el modo interactivo. En este modo, se supone que se da un script PHP completo a través de STDIN, y después de la interrupción con
    <kbd class="keycombo">
     <kbd class="keycap">CTRL</kbd>
     +<kbd class="keycap">D</kbd>
    </kbd>
    (POSIX) o
    <kbd class="keycombo">
     <kbd class="keycap">CTRL</kbd>
     +<kbd class="keycap">Z</kbd>
    </kbd>
    seguido de <code class="literal">ENTER</code> (Windows), este script será evaluado. Esto es básicamente idéntico a invocar el <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> sin la opción <strong class="option unknown">-a</strong>.
   </p>
   <p class="para">
    A partir de PHP 8.1.0, invocar el <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> con la opción <strong class="option unknown">-a</strong> falla si la extensión readline no está disponible.
   </p>
  </div>
 </div><?php manual_footer($setup); ?>