<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'features.commandline.interactive.php',
    1 => 'Shell interativo',
    2 => 'Shell interativo',
  ),
  'up' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Uso da linha de Comando',
  ),
  'prev' => 
  array (
    0 => 'features.commandline.io-streams.php',
    1 => 'Fluxos de E/S',
  ),
  'next' => 
  array (
    0 => 'features.commandline.webserver.php',
    1 => 'Servidor web embutido',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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 interativo</h2>

  <p class="para">
   O <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> fornece um shell interativo usando a opção
   <strong class="option unknown">-a</strong> se o PHP for compilado com a opção
   <strong class="option configure">--with-readline</strong>.
   A partir do PHP 7.1.0 o shell interativo também está disponível no Windows, se a
   extensão <a href="book.readline.php" class="link">readline</a> estiver habilitada.
  </p>

  <p class="para">
   Usando o shell interativo você será capaz de escrever código PHP e
   executá-lo diretamente.
  </p>

  <div class="example" id="example-1">
   <p><strong>Exemplo #1 Executando código usando o shell interativo</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">
   O shell interativo também possui sugestões de complemento com tab para funções,
   constantes, nomes de classes, variáveis, chamadas para métodos estáticos e constantes
   de classe.
  </p>

  <div class="example" id="example-2">
   <p><strong>Exemplo #2 Sugestões de complemento com tab</strong></p>
   <div class="example-contents"><p>
    Pressionar a tecla tab duas vezes quando tiver mais de uma sugestão de complemento
    resultará numa lista desses complementos.
   </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>
    Quando existir apenas um possível complemento, pressionar a tecla tab uma vez
    irá completar o restante da mesma linha:
   </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>
    Complementos também funcionarão para nomes que forem definidos durante
    a mesma sessão do shell interativo:
   </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">
   O shell interativo armazena seu histórico que pode ser acessado usando as
   teclas para cima e para baixo. O histórico é salvo no arquivo
   <var class="filename">~/.php_history</var>.
   A partir do PHP 8.4.0, o caminho para o arquivo de histórico pode ser definido usando a
   variável de ambiente <var class="envar">PHP_HISTFILE</var>.
  </p>

  <p class="para">
   O <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> fornece as configurações do
   <var class="filename">php.ini</var> <code class="parameter">cli.pager</code> e
   <code class="parameter">cli.prompt</code>. A configuração <code class="parameter">cli.pager</code>
   permite que um programa externo (como o <var class="filename">less</var>) aja como
   uma alternativa para a saída ao invés dela ser exibida diretamente na tela.
   A configuração <code class="parameter">cli.prompt</code> faz com que seja possível alterar
   a saída <code class="literal">php &gt;</code>.
  </p>

  <p class="para">
   Também é possível definir configurações
   <var class="filename">php.ini</var> no shell interativo usando uma notação abreviada.
  </p>

  <div class="example" id="example-3">
   <p><strong>Exemplo #3 Definindo configurações <var class="filename">php.ini</var> no shell interativo</strong></p>
   <div class="example-contents"><p>
    A opção <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>
    Usando acento grave é possível executar o PHP diretamente no terminal:
   </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>
    Setando o paginador para<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">
   A configuração <code class="parameter">cli.prompt</code> suporta algumas sequências de
   escape:
   <table class="doctable table">
    <caption><strong>Sequências de escape do <code class="parameter">cli.prompt</code></strong></caption>
    
     <thead>
      <tr>
       <th>Sequência</th>
       <th>Descrição</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td><code class="literal">\e</code></td>
       <td>
        Usada para adicionar cores ao terminal. Um exemplo pode ser
        <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>A versão do PHP.</td>
      </tr>

      <tr>
       <td><code class="literal">\b</code></td>
       <td>
        Indica em qual bloco o PHP está. Por exemplo <code class="literal">/*</code> irá indicar
        que o PHP está dentro de um comentário de múltiplas linhas. O escopo externo será denominado
        por <code class="literal">php</code>.
       </td>
      </tr>

      <tr>
       <td><code class="literal">\&gt;</code></td>
       <td>
        Indica o caractere do terminal. Por padrão é
        <code class="literal">&gt;</code>, mas pode alterar quando o shell estiver dentro de um bloco
        indeterminado ou de uma string. Possíveis caracteres são: <code class="literal">&#039; &quot; {
        ( &gt;</code>
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Arquivos incluídos através de <a href="ini.core.php#ini.auto-prepend-file" class="link">auto_prepend_file</a> e <a href="ini.core.php#ini.auto-append-file" class="link">auto_append_file</a> são interpretados
    nesse modo porém com algumas restrições - Exemplo: funções devem ser
    definidas antes de sua chamada.
   </p>
  </p></blockquote>

  <div class="section" id="features.commandline.interactive.mode">
   <h2 class="title">Modo interarativo</h2>
   <p class="para">
    Se a extensão readline não estiver disponível, anteriormente ao PHP 8.1.0, chamar o <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> com a opção
    <strong class="option unknown">-a</strong> fornecia o modo interativo. Nesse modo, um script
    PHP completo deveria ser fornecido via STDIN, terminado por uma sequência
    de
    <kbd class="keycombo">
     <kbd class="keycap">CTRL</kbd>
     +<kbd class="keycap">D</kbd>
    </kbd>
    (POSIX) ou
    <kbd class="keycombo">
     <kbd class="keycap">CTRL</kbd>
     +<kbd class="keycap">Z</kbd>
    </kbd>
    seguido de +<kbd class="keycap">ENTER</kbd> (Windows), para que o script seja avaliado.
    Isto é basicamente o mesmo que invocar <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> sem a opção <strong class="option unknown">-a</strong>.
    
   </p>
   <p class="para">
    A partir do PHP 8.1.0, chamar a <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> com a opção <strong class="option unknown">-a</strong>
    falhará na ausência da extensão readline.
   </p>
  </div>
 </div><?php manual_footer($setup); ?>