<?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.differences.php',
    1 => 'Diferencia con otros SAPIs',
    2 => 'Diferencia con otros SAPIs',
  ),
  'up' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Utilizaci&oacute;n de l&iacute;neas de comando',
  ),
  'prev' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Utilizaci&oacute;n de l&iacute;neas de comando',
  ),
  'next' => 
  array (
    0 => 'features.commandline.options.php',
    1 => 'Opciones',
  ),
  '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.differences" class="section">
  <h2 class="title">Diferencia con otros <abbr title="Server Application Programming Interface">SAPI</abbr>s</h2>

  <p class="para">
   Las diferencias más notables entre el <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> y los otros <abbr title="Server Application Programming Interface">SAPI</abbr> son:
   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      A diferencia del <abbr title="Common Gateway Interface">CGI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr>, ningún encabezado HTTP se escribe en el resultado.
     </p>
     <p class="para">
      Aunque el <abbr title="Common Gateway Interface">CGI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> proporciona una forma de eliminar los encabezados HTTP, no es posible activar los encabezados HTTP en el <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> se ejecuta en modo silencioso por defecto, aunque las opciones <strong class="option unknown">-q</strong> y <strong class="option unknown">--no-header</strong> se mantienen para mantener la compatibilidad con versiones anteriores de <abbr title="Common Gateway Interface">CGI</abbr>.
     </p>
     <p class="para">
      No cambia el directorio actual al del script. (Las opciones <strong class="option unknown">-C</strong> y <strong class="option unknown">--no-chdir</strong> se mantienen por razones de compatibilidad).
     </p>
     <p class="para">
      Mensajes de error en texto plano (sin formato <abbr title="Hyper Text Markup Language">HTML</abbr>).
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Hay varias directivas del <var class="filename">php.ini</var> que son ignoradas por el <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr>, ya que no tienen sentido en un entorno shell:
     </p>
     <p class="para">
      <table class="doctable table">
       <caption><strong>Directivas <var class="filename">php.ini</var> ignoradas</strong></caption>
       
        <thead>
         <tr>
          <th>Directiva</th>
          <th>Valor por defecto para <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr></th>
          <th>Comentario</th>
         </tr>

        </thead>

        <tbody class="tbody">
         <tr>
          <td><a href="errorfunc.configuration.php#ini.html-errors" class="link"><strong class="option unknown">html_errors</strong></a></td>
          <td><strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></td>
          <td>
           Por defecto a <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, ya que puede ser bastante difícil leer mensajes de error en un terminal cuando están enterrados en etiquetas <abbr title="Hyper Text Markup Language">HTML</abbr> no interpretadas.
          </td>
         </tr>

         <tr>
          <td><a href="outcontrol.configuration.php#ini.implicit-flush" class="link"><strong class="option unknown">implicit_flush</strong></a></td>
          <td><strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></td>
          <td>
           En un terminal, generalmente es deseable que cualquier salida 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> y otros, se muestre inmediatamente, y no se coloque en un búfer. Sin embargo, siempre es posible utilizar <a href="ref.outcontrol.php" class="link">la bufferización de salida</a> si se desea retrasar una salida, o bien manipular su contenido una última vez.
          </td>
         </tr>

         <tr>
          <td><a href="info.configuration.php#ini.max-execution-time" class="link">max_execution_time</a></td>
          <td>0 (sin límite)</td>
          <td>
           PHP en un terminal es susceptible de ser utilizado para tareas mucho más diversas que en scripts web, y dado que esto generalmente toma mucho tiempo, este parámetro se establecerá por defecto a 0 permitiendo así ser ilimitado.
          </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">
            El establecimiento de esta directiva a <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> significa que los scripts ejecutados a través del <abbr title="Server Application Programming Interface">SAPI</abbr> <abbr title="Command Line Interpreter/Interface">CLI</abbr> siempre tendrán acceso a <em>argc</em> (representando el número de argumentos pasados a la aplicación) y <em>argv</em> (el array que contiene los argumentos pasados).
           </p>
           <p class="para">
            Las variables PHP <var class="varname"><a href="reserved.variables.argc.php" class="classname">$argc</a></var> y <var class="varname"><a href="reserved.variables.argv.php" class="classname">$argv</a></var> se definen y rellenan automáticamente con los valores apropiados, al utilizar el <abbr title="Server Application Programming Interface">SAPI</abbr> <abbr title="Command Line Interpreter/Interface">CLI</abbr>. Estos valores también pueden encontrarse en la variable <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER</a></var>, por ejemplo: <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER['argv']</a></var>.
           </p>
           <div class="warning"><strong class="warning">Advertencia</strong>
           <p class="para">
            La presencia de <var class="varname"><a href="reserved.variables.argv.php" class="classname">$argv</a></var> o <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER['argv']</a></var> no es una indicación fiable de que un script se está ejecutando desde la línea de comandos, ya que estas variables pueden definirse en otros contextos cuando <a href="ini.core.php#ini.register-argc-argv" class="link">register_argc_argv</a> está activado. El valor devuelto por <span class="function"><a href="function.php-sapi-name.php" class="function">php_sapi_name()</a></span> debe verificarse en su lugar.
            <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 se está ejecutando desde la línea de comandos!\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">
            Aunque esta configuración INI está codificada a <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, las funciones relacionadas con <a href="book.outcontrol.php" class="link">la visualización del búfer</a> están disponibles.
           </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">
            El PHP <abbr title="Command Line Interpreter/Interface">CLI</abbr> no soporta GET, POST y la carga de archivos.
           </p>
          </td>
         </tr>

        </tbody>
       
      </table>

     </p>
     <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <p class="para">
       Estas directivas no pueden inicializarse con otros valores en el archivo <var class="filename">php.ini</var> o por cualquier otro método. Es una limitación, ya que estos valores por defecto se aplican una vez que todos los otros archivos de configuración han sido analizados. Sin embargo, estos valores pueden modificarse durante la ejecución (lo cual no es lógico para ciertas directivas, 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">
       Se recomienda establecer <a href="misc.configuration.php#ini.ignore-user-abort" class="link">ignore_user_abort</a> para los scripts en línea de comandos. Consulte la función <span class="function"><a href="function.ignore-user-abort.php" class="function">ignore_user_abort()</a></span> para más información.
      </p>
     </p></blockquote>
    </li>

    <li class="listitem">
     <p class="para">
      Para facilitar el trabajo en un entorno shell, se definen varias constantes para los <a href="features.commandline.io-streams.php" class="link">flujos I/O</a>.
     </p>
    </li>

    <li class="listitem">
     <p class="para">
      El <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> <strong>no transforma</strong> el directorio actual en el directorio de ejecución del script.
     </p>
     <div class="example" id="example-1">
      <p><strong>Ejemplo #1 
       Ejemplo que muestra la diferencia con el <abbr title="Server Application Programming Interface">SAPI</abbr> <abbr title="Common Gateway Interface">CGI</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">// Una prueba simple: muestra el directorio de ejecución */<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>
       Cuando se utiliza la versión <abbr title="Common Gateway Interface">CGI</abbr>, la salida será:
      </p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
$ pwd
/tmp

$ php -q otro_directorio/test.php
/tmp/otro_directorio
</pre></div>
      </div>
      <div class="example-contents"><p>
       Esto muestra claramente que PHP cambia el directorio actual y utiliza el directorio del script ejecutado.
      </p></div>
      <div class="example-contents"><p>
       Al utilizar el <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr>, se obtiene:
      </p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
$ pwd
/tmp

$ php -f otro_directorio/test.php
/tmp
</pre></div>
      </div>
      <div class="example-contents"><p>
       Esto proporciona mucha más flexibilidad al escribir scripts shell con PHP.
      </p></div>
     </div>
     <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <p class="para">
       El <abbr title="Common Gateway Interface">CGI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> se comporta de la misma manera que el <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr>, pasándole la opción <strong class="option unknown">-C</strong>, cuando se invoca en la línea de comandos.
      </p>
     </p></blockquote>
    </li>
   </ul>
  </p>
 </div><?php manual_footer($setup); ?>