<?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.usage.php',
    1 => 'Uso',
    2 => 'Executando arquivos PHP',
  ),
  'up' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Uso da linha de Comando',
  ),
  'prev' => 
  array (
    0 => 'features.commandline.options.php',
    1 => 'Op&ccedil;&otilde;es',
  ),
  'next' => 
  array (
    0 => 'features.commandline.io-streams.php',
    1 => 'Fluxos de E/S',
  ),
  '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.usage" class="section">
  <h2 class="title">Executando arquivos PHP</h2>
  

  <p class="para">
   Existem três formas de fornecer código PHP para ser executado pelo
   <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr>:
   <ol type="1">
    <li class="listitem">
     <p class="para">
      Diga ao PHP para executar determinado arquivo.
     </p>
     <div class="informalexample">
      <div class="example-contents screen">
<div class="cdata"><pre>
$ php my_script.php

$ php -f my_script.php
</pre></div>
      </div>
     </div>
     <p class="para">
      As duas formas (usando ou não a opção <strong class="option unknown">-f</strong>) executam o
      arquivo <var class="filename">my_script.php</var>. Note que não existe
      restrição sobre quais arquivos podem ser executados; em particular, o
      nome do arquivo não precisa conter a extensão <code class="literal">.php</code>.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Passa o código PHP diretamente através da linha de comando.
     </p>
     <div class="informalexample">
      <div class="example-contents screen">
<div class="cdata"><pre>
$ php -r &#039;print_r(get_defined_constants());&#039;
</pre></div>
      </div>
     </div>
     <p class="para">
      Um cuidado especial deve ser tomado em relação a substituição de variáveis
      e o uso de aspas.
     </p>
     <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <p class="para">
       Leia o exemplo cuidadosamente: não existem tags de abertura e fechamento! A
       opção <strong class="option unknown">-r</strong> simplesmente não necessita delas, e usá-las irá gerar
       um erro de interpretação.
      </p>
     </p></blockquote>
    </li>
    <li class="listitem">
     <p class="para">
      Direciona a entrada padrão (<code class="literal">stdin</code>)
      para o código PHP.
     </p>
     <p class="para">
      Isso dá a poderosa habilidade de criar código PHP dinamicamente e alimentar o
      binário, assim como demonstrado nesse exemplo fictício:
     </p>
     <div class="informalexample">
      <div class="example-contents screen">
<div class="cdata"><pre>
$ some_application | some_filter | php | sort -u &gt; final_output.txt
</pre></div>
      </div>
     </div>
    </li>
   </ol>
   Você não pode combinar essas formas de executar o código.
  </p>

  <p class="para">
   Assim como qualquer aplicação de linha de comando, o PHP aceita qualquer quantidade
   de argumentos; entretanto, os scripts PHP também podem receber outros argumentos.
   A quantidade de argumentos que podem ser passados para o script não é limitada pelo
   PHP (e apesar do shell ter um limite no número de caracteres que podem ser
   passados, ele não é geralmente atingido). Os argumentos passados para os scripts
   ficam disponíveis no array global <var class="varname"><a href="reserved.variables.argv.php" class="classname">$argv</a></var>. O primeiro índice
   (zero) sempre contém o nome do script que está sendo chamado pela linha de
   comando. Note que, se o código é executado diretamente usando a opção de linha
   de comando <strong class="option unknown">-r</strong>, o valor de <var class="varname"><a href="reserved.variables.argv.php" class="classname">$argv[0]</a></var>
   será <code class="literal">&quot;Standard input code&quot;</code>; anteriormente ao PHP 7.2.0, isso era um hífen (<code class="literal">&quot;-&quot;</code>). A mesma coisa ocorre se o código é
   executado via um pipe a partir do <strong><code><a href="reserved.constants.php#constant.stdin">STDIN</a></code></strong>.
  </p>

  <p class="para">
   Uma segunda variável global, <var class="varname"><a href="reserved.variables.argc.php" class="classname">$argc</a></var>,
   contém o número de elementos contidos no array<var class="varname"><a href="reserved.variables.argv.php" class="classname">$argv</a></var> array
   (<strong>não</strong> o número de argumentos passados para o
   script).
  </p>

  <p class="para">
   Desde que os argumentos passados pelo script não comecem com o caractere
   <code class="literal">-</code>, não existe nada em especial com que você deva se preocupar.
   Passar um argumento para o script que comece com <code class="literal">-</code>
   irá causar problemas, porque o interpretador do PHP irá pensar que ele mesmo deve
   manipular esse argumento, mesmo antes de executar o script. Para prevenir isso
   use o separador de lista de argumentos <code class="literal">--</code>. Depois que esse
   separador é interpretado pelo PHP, cada argumento seguinte é passado intocado para o script.
  </p>

  <div class="informalexample">
   <div class="example-contents screen">
<div class="cdata"><pre>
# Isto não executará o código, apenas mostrará as opções do PHP
$ php -r &#039;var_dump($argv);&#039; -h
Usage: php [options] [-f] &lt;file&gt; [args...]
[...]

# Isto passará o argumento &#039;-h&#039; para o script, assim evitando do PHP interpretá-lo
$ php -r &#039;var_dump($argv);&#039; -- -h
array(2) {
  [0]=&gt;
  string(1) &quot;-&quot;
  [1]=&gt;
  string(2) &quot;-h&quot;
}
</pre></div>
   </div>
  </div>

  <p class="para">
   Entretanto, em sistemas Unix existe uma outra maneira de usar o PHP em linha
   de comando: fazer com que a primeira linha do script comece com
   <code class="literal">#!/usr/bin/php</code> (ou qualquer que seja o caminho para o binário
   do PHP <abbr title="Command Line Interpreter/Interface">CLI</abbr> caso seja diferente. O restante do arquivo deve conter código PHP normal
   com as já tradicionais tags de abertura e fechamento. Uma vez que os atributos de execução
   do arquivo estejam apropriadamente definidos (exemplo. <strong class="command">chmod +x test</strong>),
   o script poderá ser executado como qualquer outro script shell ou perl:
  </p>

  <div class="example" id="example-1">
   <p><strong>Exemplo #1 Executando scripts PHP como shell scripts</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">#!/usr/bin/php<br /><span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$argv</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>
     Assumindo que esse arquivo tenha o nome <var class="filename">test</var> no diretório
     atual, é possível fazer o seguinte:
   </p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
$ chmod +x test
$ ./test -h -- foo
array(4) {
  [0]=&gt;
  string(6) &quot;./test&quot;
  [1]=&gt;
  string(2) &quot;-h&quot;
  [2]=&gt;
  string(2) &quot;--&quot;
  [3]=&gt;
  string(3) &quot;foo&quot;
}
</pre></div>
   </div>
  </div>

  <p class="para">
   Como pode ser visto, nesse caso nenhum cuidado especial precisa ser tomado ao passar parâmetros
   começando com <code class="literal">-</code>.
  </p>

  <p class="para">
   O executável do PHP pode ser usado para rodar scripts absolutamente independentes do
   servidor web. Em sistemas Unix, a primeira linha especial <code class="literal">#!</code> (ou
   &quot;shebang&quot;) deve ser adicionada a scripts PHP para que o sistema possa automaticamente
   dizer qual programa deve executar o script. Em plataformas Windows,
   é possível associar o <var class="filename">php.exe</var> com um clique duplo no arquivos
   com extensão <code class="literal">.php</code>, ou um arquivo batch pode ser criado para rodar
   scripts através do PHP. A primeira linha especial shebang para Unix não causa nenhum
   efeito no Windows (já que é formatada como um comentário PHP), então programas
   multiplataforma podem ser escritos com a inclusão disso. Um exemplo simples de
   programa de linha de comando em PHP é mostrado abaixo.
  </p>

  <p class="para">
   <div class="example" id="example-2">
    <p><strong>Exemplo #2 Script planejado para ser executado na linha de comando (script.php)</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">#!/usr/bin/php<br /><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">$argc </span><span style="color: #007700">!= </span><span style="color: #0000BB">2 </span><span style="color: #007700">|| </span><span style="color: #0000BB">in_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">], array(</span><span style="color: #DD0000">'--help'</span><span style="color: #007700">, </span><span style="color: #DD0000">'-help'</span><span style="color: #007700">, </span><span style="color: #DD0000">'-h'</span><span style="color: #007700">, </span><span style="color: #DD0000">'-?'</span><span style="color: #007700">))) {<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />This is a command line PHP script with one option.<br /><br />  Usage:<br />  <span style="color: #0000BB">&lt;?php </span><span style="color: #007700">echo </span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]; </span><span style="color: #0000BB">?&gt;</span> &lt;option&gt;<br /><br />  &lt;option&gt; can be some word you would like<br />  to print out. With the --help, -help, -h,<br />  or -? options, you can get this help.<br /><br /><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">} else {<br />    echo </span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>

  <p class="para">
   O script acima inclui a shebang na primeira linha para indicar que esse
   arquivo deve ser executado pelo PHP. Nós estamos trabalhando com a versão
   <abbr title="Command Line Interpreter/Interface">CLI</abbr> aqui, então nenhum cabeçalho <abbr title="Hypertext Transfer Protocol">HTTP</abbr> será exibido.
  </p>

  <p class="para">
   O programa primeiramente verifica se o primeiro argumento obrigatório foi passado
   (juntamente com o nome do arquivo, que também é contabilizado). Em caso negativo,
   ou caso o argumento seja <strong class="option unknown">--help</strong>, <strong class="option unknown">-help</strong>,
   <strong class="option unknown">-h</strong> ou <strong class="option unknown">-?</strong>, uma mensagem de ajuda é disparada,
   usando <var class="varname"><a href="reserved.variables.argv.php" class="classname">$argv[0]</a></var> para imprimir dinamicamente o nome do script
   como foi digitado na linha de comando. Do contrário, o argumento é exibido da
   forma como foi escrito.
  </p>

  <p class="para">
   Para executar o script acima em sistemas Unix, ele deve ser tornado executável,
   e chamado simplesmente com <strong class="command">script.php echothis</strong> ou
   <strong class="command">script.php -h</strong>. Em sistemas Windows, um arquivo batch similar
   ao seguinte pode ser criado para essa tarefa:
  </p>

  <p class="para">
   <div class="example" id="example-3">
    <p><strong>Exemplo #3 Arquivo batch para rodar um script de linha de comando em PHP (script.bat)</strong></p>
    <div class="example-contents">
<div class="winbatcode"><pre class="winbatcode">@echo OFF
&quot;C:\php\php.exe&quot; script.php %*</pre>
</div>
    </div>

   </div>
  </p>

  <p class="para">
   Assumindo que o programa acima foi nomeado como <var class="filename">script.php</var>, e que o
   <abbr title="Command Line Interpreter/Interface">CLI</abbr> <var class="filename">php.exe</var> está em <var class="filename">C:\php\php.exe</var>,
   esse arquivo batch irá executá-lo, repassando todas as opções:
   <strong class="command">script.bat echothis</strong> ou <strong class="command">script.bat -h</strong>.
  </p>

  <p class="para">
   Veja também a documentação da extensão <a href="ref.readline.php" class="link">Readline</a>
   com mais funções usadas para melhorar as aplicações de linha de
   comando em PHP.
  </p>

  <p class="para">
   No Windows, o PHP pode ser configurado para rodar sem a necessidade de informar
   o <var class="filename">C:\php\php.exe</var> ou a extensão<code class="literal">.php</code>,
   como descrito em <a href="install.windows.commandline.php" class="link">PHP para linha de
   comando no Microsoft Windows</a>.
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    No Windows é recomendado rodar o PHP em uma conta de usuário normal.
    Ao rodar em uma conta de serviço certas operações podem falhar, por conta da situação
    &quot;No mapping between account names and security IDs was done&quot; (não foi feito nenhum mapeamento entre nomes de contas e IDs de segurança).
   </p>
  </p></blockquote>
 </div><?php manual_footer($setup); ?>