<?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.differences.php',
    1 => 'Diferen&ccedil;as em rela&ccedil;&atilde;o a outros SAPIs',
    2 => 'Diferen&ccedil;as em rela&ccedil;&atilde;o a outros SAPIs',
  ),
  'up' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Uso da linha de Comando',
  ),
  'prev' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Uso da linha de Comando',
  ),
  'next' => 
  array (
    0 => 'features.commandline.options.php',
    1 => 'Op&ccedil;&otilde;es',
  ),
  '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.differences" class="section">
  <h2 class="title">Diferenças em relação a outros <abbr title="Server Application Programming Interface">SAPI</abbr>s</h2>

  <p class="para">
   Diferenças notáveis do <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> em comparação com outros
   <abbr title="Server Application Programming Interface">SAPI</abbr>s:
   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      Diferente do <abbr title="Common Gateway Interface">CGI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr>, nenhum cabeçalho
      é enviado para a saída.
     </p>
     <p class="para">
      Embora o <abbr title="Common Gateway Interface">CGI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> forneça uma maneira de
      suprimir os cabeçalhos HTTP, não existe nenhuma forma equivalente de habilitá-los
      no <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr>.
     </p>
     <p class="para">
      <abbr title="Command Line Interpreter/Interface">CLI</abbr> é inicializado no modo silencioso por padrão, embora as chaves <strong class="option unknown">-q</strong>
      e <strong class="option unknown">--no-header</strong> são mantidas por compatibilidade para que seja possível
      usar scripts <abbr title="Common Gateway Interface">CGI</abbr> antigos.
     </p>
     <p class="para">
      Ele não altera o diretório atual para aquele no qual o script está sendo executado
      (As opções <strong class="option unknown">-C</strong> e <strong class="option unknown">--no-chdir</strong> são mantidas por
      compatibilidade)
     </p>
     <p class="para">
      Mensagens de erro em texto plano (sem formatação <abbr title="Hyper Text Markup Language">HTML</abbr>).
     </p>
    </li>

    <li class="listitem">
     <p class="para">
      Existem certas diretivas do <var class="filename">php.ini</var> que são sobrescritas pelas do
      <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> porque elas não fazem sentido em um ambiente de linha de comando:
     </p>
     <p class="para">
      <table class="doctable table">
       <caption><strong>Diretivas do <var class="filename">php.ini</var> sobrescritas</strong></caption>
       
        <thead>
         <tr>
          <th>Diretiva</th>
          <th>Valor padrão do <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr></th>
          <th>Comentário</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>
           Tem como padrão <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, já que pode ser bem difícil ler mensagens de erro
           na linha de comando quando elas estão misturadas com tags
           <abbr title="Hyper Text Markup Language">HTML</abbr> não interpretadas.
          </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>
           Em um ambiente de linha de comando, é geralmente desejado para a saída, como
           a partir de <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> e similares,
           que elas sejam exibidas imediatamente, e não mantidas em um buffer.
           Apesar disso, ainda é possível usar
           <a href="ref.outcontrol.php" class="link">output buffering</a> para atrasar ou manipular
           a saída padrão.
          </td>
         </tr>

         <tr>
          <td><a href="info.configuration.php#ini.max-execution-time" class="link">max_execution_time</a></td>
          <td>0 (unlimited)</td>
          <td>
           O PHP em um ambiente de linha de comando tende a ser usado com um número de
           propostas muito mais diversas do que para aplicações web típicas, e como essas
           formas podem ter muito mais longevidade, o tempo máximo de execução é definido como sem limite.
          </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">
           Definir isso como <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> significa que o script executado a partir do
           <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> sempre terá acesso ao
           <em>argc</em> (número de argumentos passados para a aplicação)
           e <em>argv</em> (array contendo os valores dos
           argumentos).
          </p>
          <p class="para">
           As variáveis <var class="varname"><a href="reserved.variables.argc.php" class="classname">$argc</a></var> e <var class="varname"><a href="reserved.variables.argv.php" class="classname">$argv</a></var> do
           PHP são automaticamente definidas com seus valores apropriados quando usando
           o <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr>. Esses valores podem também ser encontrados no
           array <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER</a></var>, por exemplo:
           <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER['argv']</a></var>.
          </p>
          <div class="warning"><strong class="warning">Aviso</strong>
           <p class="para">
            A presença de <var class="varname"><a href="reserved.variables.argv.php" class="classname">$argv</a></var> ou <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER['argv']</a></var>
            não é uma indicação confiável de que um script está sendo executado da
            linha de comando porque elas podem ser definidas em outros contextos quando
            <a href="ini.core.php#ini.register-argc-argv" class="link">register_argc_argv</a> está habilitada.
            O valor retornado por <span class="function"><a href="function.php-sapi-name.php" class="function">php_sapi_name()</a></span> é o que deve ser
            verificado.
            <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">"Este script está sendo executado da linha de comando!\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">
            Apesar do valor no <var class="filename">php.ini</var> ser explicitamente definido como <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, as
            funções de <a href="book.outcontrol.php" class="link">Output buffering</a> estão
            disponíveis.
           </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">
            O PHP <abbr title="Command Line Interpreter/Interface">CLI</abbr> não suporta GET, POST ou upload de arquivos.
           </p>
          </td>
         </tr>

        </tbody>
       
      </table>

     </p>
     <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <p class="para">
       Essas diretivas não podem ser inicializadas com outro valor no arquivo
       de configuração <var class="filename">php.ini</var> ou um valor personalizado (caso seja especificado). Essa
       limitação ocorre pois os valores são aplicados depois que todos os arquivos
       de configuração foram lidos. Entretanto, seus valores podem ser alterados
       em tempo de execução (porém isso não se aplica a todos eles como
       <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">Nota</strong>: 
      <p class="para">
       É recomendado definir
       <a href="misc.configuration.php#ini.ignore-user-abort" class="link">ignore_user_abort</a> para
       aplicações de linha de comando. Veja <span class="function"><a href="function.ignore-user-abort.php" class="function">ignore_user_abort()</a></span>
       para mais informações.
      </p>
     </p></blockquote>
    </li>

    <li class="listitem">
     <p class="para">
      Para facilitar o trabalho em ambientes de linha de comando, um número de constantes
      é definido para <a href="features.commandline.io-streams.php" class="link">fluxos de E/S</a>.
      
     </p>
    </li>

    <li class="listitem">
     <p class="para">
      O <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> <strong>não</strong> altera o diretório de trabalho
      para o diretório de onde o arquivo é executado.
     </p>
     <div class="example" id="example-1">
      <p><strong>Exemplo #1 
       Exemplo demonstrando a diferença entre <abbr title="Common Gateway Interface">CGI</abbr> e
       <abbr title="Server Application Programming Interface">SAPI</abbr>:
      </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">// Um script de teste simples chamado 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>
       Quando é utilizada a versão <abbr title="Common Gateway Interface">CGI</abbr> a saída é:
      </p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
$ pwd
/tmp

$ php -q another_directory/test.php
/tmp/another_directory
</pre></div>
      </div>
      <div class="example-contents"><p>
       Isso demonstra claramente que o PHP altera o diretório de trabalho para o diretório onde o
       arquivo é executado.
      </p></div>
      <div class="example-contents"><p>
       Usando o <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> temos:
      </p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
$ pwd
/tmp

$ php -f another_directory/test.php
/tmp
</pre></div>
      </div>
      <div class="example-contents"><p>
       Isso permite grande flexibilidade no desenvolvimento de ferramentas de linha de comando em PHP.
      </p></div>
     </div>
     <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <p class="para">
       O <abbr title="Common Gateway Interface">CGI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> suporta esse comportamento do
       <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> através da opção <strong class="option unknown">-C</strong> utilizada quando executado a partir
       da linha de comando.
      </p>
     </p></blockquote>
    </li>
   </ul>
  </p>
 </div><?php manual_footer($setup); ?>