<?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.usage.php',
    1 => 'Utilizaci&oacute;n',
    2 => 'Ejecuci&oacute;n de archivos PHP',
  ),
  'up' => 
  array (
    0 => 'features.commandline.php',
    1 => 'Utilizaci&oacute;n de l&iacute;neas de comando',
  ),
  'prev' => 
  array (
    0 => 'features.commandline.options.php',
    1 => 'Opciones',
  ),
  'next' => 
  array (
    0 => 'features.commandline.io-streams.php',
    1 => 'Flujos I/O',
  ),
  '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.usage" class="section">
  <h2 class="title">Ejecución de archivos PHP</h2>
  
  <p class="para">
   Hay 3 formas diferentes de llamar al <abbr title="Command Line Interpreter/Interface">CLI</abbr> <abbr title="Server Application Programming Interface">SAPI</abbr> con código PHP a ejecutar:
   <ol type="1">
    <li class="listitem">
     <p class="para">
      Indicar a PHP que ejecute un archivo dado:
     </p>
     <div class="informalexample">
      <div class="example-contents screen">
<div class="cdata"><pre>
php mon_script.php

php -f mon_script.php
</pre></div>
      </div>
     </div>
     <p class="para">
      Ambos métodos (usando <strong class="option unknown">-f</strong> o no) ejecutan el script contenido en el archivo <var class="filename">mon_script.php</var>. Tenga en cuenta que no existe restricción sobre los archivos que se pueden ejecutar; en particular, no es necesario que la extensión del archivo sea <code class="literal">.php</code>.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Dar código PHP a ejecutar directamente en la línea de comandos.
     </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">
      En este caso, se debe prestar especial atención a las variables de entorno, que serán reemplazadas, y a las comillas, que tienen significados especiales en la línea de comandos.
     </p>
     <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <p class="para">
       Lea el ejemplo con atención, ¡no hay etiquetas de apertura ni de cierre! La opción <strong class="option unknown">-r</strong> hace que el uso de estas etiquetas sea innecesario, y agregarlas conduciría a un error de análisis sintáctico.
      </p>
     </p></blockquote>
    </li>
    <li class="listitem">
     <p class="para">
      Alimentar la entrada estándar con código PHP (<code class="literal">stdin</code>).
     </p>
     <p class="para">
      Esto proporciona la posibilidad de crear código PHP dinámicamente, luego proporcionarlo a PHP y, finalmente, procesarlo nuevamente en el shell. Aquí hay un ejemplo ficticio:
     </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>
   No es posible combinar estos tres modos de ejecución.
  </p>

  <p class="para">
   Como cualquier aplicación shell, el ejecutable PHP acepta argumentos; sin embargo, el script PHP también puede recibirlos. El número de argumentos que se pueden pasar a su script no está limitado por PHP (el shell tiene un límite en términos de número de caracteres que se pueden pasar. Generalmente, no alcanzará este límite). Los argumentos pasados al script se transmitirán a través de la variable array <var class="varname"><a href="reserved.variables.argv.php" class="classname">$argv</a></var>. El primer índice (cero) contiene siempre el nombre del script llamado desde la línea de comandos. Tenga en cuenta que, si el código se ejecuta en línea usando la opción de línea de comandos <strong class="option unknown">-r</strong>, el 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>; anterior a PHP 7.2.0, era un guion (<code class="literal">&quot;-&quot;</code>) en su lugar. Esto también es cierto si el código se ejecuta a través de un pipe desde <strong><code><a href="reserved.constants.php#constant.stdin">STDIN</a></code></strong>.
  </p>

  <p class="para">
   Una segunda variable global, <var class="varname"><a href="reserved.variables.argc.php" class="classname">$argc</a></var>, contiene el número de elementos del array <var class="varname"><a href="reserved.variables.argv.php" class="classname">$argv</a></var> (<strong>y no</strong> el número de argumentos pasados a su script).
  </p>

  <p class="para">
   Mientras los argumentos pasados al script no comiencen con el carácter <code class="literal">-</code>, no hay nada especial que vigilar. El hecho de pasar argumentos al script que comienzan con <code class="literal">-</code> plantea problemas porque PHP pensará que debe interpretarlos. Para evitar esto, use el separador <code class="literal">--</code>. Después de este argumento, todos los argumentos siguientes se pasarán al script sin ser modificados ni analizados por PHP.
  </p>
  <div class="informalexample">
   <div class="example-contents screen">
<div class="cdata"><pre>
# Esto no ejecutará el código, sino que mostrará la ayuda de PHP
$ php -r &#039;var_dump($argv);&#039; -h
Uso: php [opciones] [-f] &lt;archivo&gt; [args...]
[...]

# Esto pasará el argumento &#039;-h&#039; al script y evitará que PHP lo maneje
$ 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">
   Sin embargo, hay otra forma de usar PHP como script shell; la primera línea del script debe ser <code class="literal">#!/usr/bin/php</code> (a reemplazar por la ruta hacia el binario PHP <abbr title="Command Line Interpreter/Interface">CLI</abbr> en el sistema subyacente). El resto del archivo debe contener el código PHP normal, comprendido entre las etiquetas de apertura/cierre. Después de establecer los permisos de ejecución en el script (<strong class="command">chmod +x test</strong>), puede ejecutarse como un script shell o perl habitual:
  </p>

  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Ejecuta un script PHP como script shell</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>
    Suponiendo que este archivo se llame <var class="filename">test</var>, en el directorio actual, entonces es posible hacer esto:
   </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 puede ver, en este caso, no es necesario tener cuidado al pasar parámetros que comienzan con <code class="literal">-</code> a su script.
  </p>

  <p class="para">
   El ejecutable PHP puede ser utilizado para ejecutar scripts independientes del servidor web. Si está en un sistema Unix, se recomienda agregar la línea especial al inicio del script, hacerlo ejecutable de manera que el sistema sepa qué programa debe ejecutar el script. En Windows, puede asociar el ejecutable <var class="filename">php.exe</var> con el doble clic en los archivos de extensión <code class="literal">.php</code>, o bien puede hacer un archivo batch para ejecutar el script gracias a PHP. La primera línea utilizada en el mundo Unix no perturbará la ejecución en Windows, lo que hace que los scripts sean fácilmente portables. Un ejemplo completo se proporciona a continuación:
  </p>
  <p class="para">
   <div class="example" id="example-2">
    <p><strong>Ejemplo #2 Script previsto para ser ejecutado en línea de comandos (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 />Esto es una línea de comando a una opción.<br /><br />  Uso:<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;opción&gt;<br /><br />  &lt;opción&gt; puede ser una palabra que desee mostrar.<br />  Con las opciones --help, -help, -h,<br />  y -?, obtendrá esta ayuda.<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">
   El script anterior incluye la primera línea especial que indica que este archivo debe ser ejecutado por PHP. Se trabaja aquí con la versión <abbr title="Command Line Interpreter/Interface">CLI</abbr>, por lo que no se mostrará ningún encabezado <abbr title="Hypertext Transfer Protocol">HTTP</abbr>.
  </p>

  <p class="para">
   El programa comienza verificando que se haya especificado el argumento requerido (además del nombre del script, que también se cuenta). Si no está presente, o si el argumento es <strong class="option unknown">--help</strong>, <strong class="option unknown">-help</strong>, <strong class="option unknown">-h</strong> o <strong class="option unknown">-?</strong>, se mostrará un mensaje de ayuda, utilizando <var class="varname"><a href="reserved.variables.argv.php" class="classname">$argv[0]</a></var> para mostrar dinámicamente el nombre del script tal como se ingresó en la línea de comandos. De lo contrario, el argumento se mostrará tal como se ingresó en el terminal.
  </p>

  <p class="para">
   Para ejecutar el script anterior en Unix, debe hacerlo ejecutable y luego llamarlo con un comando como: <strong class="command">script.php echothis</strong> o <strong class="command">script.php -h</strong>. En Windows, puede hacer un archivo batch para esto:
  </p>

  <p class="para">
   <div class="example" id="example-3">
    <p><strong>Ejemplo #3 Archivo batch para ejecutar un script PHP en línea de comandos (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">
   Suponiendo que el programa anterior se llame <var class="filename">script.php</var>, y que el ejecutable <abbr title="Command Line Interpreter/Interface">CLI</abbr> <var class="filename">php.exe</var> se encuentre en <var class="filename">C:\php\php.exe</var>, este archivo batch lo ejecutará con las opciones que le pase: <strong class="command">script.bat echothis</strong> o <strong class="command">script.bat -h</strong>.
  </p>

  <p class="para">
   Vea también la extensión <a href="ref.readline.php" class="link">Readline</a>, que dispone de numerosas funciones para mejorar la usabilidad de las aplicaciones PHP en línea de comandos.
  </p>

  <p class="para">
   En Windows, PHP puede configurarse para funcionar sin necesidad de proporcionar las extensiones <var class="filename">C:\php\php.exe</var> o <code class="literal">.php</code>, tal como se describe en <a href="install.windows.commandline.php" class="link">la línea de comandos PHP bajo Microsoft Windows</a>.
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    En Windows, se recomienda ejecutar PHP bajo una cuenta de usuario. Cuando PHP se ejecuta bajo un servicio de red, algunas operaciones pueden fallar, ya que &quot;No se realiza ninguna vinculación entre los nombres de cuenta y los identificadores de seguridad&quot;.
   </p>
  </p></blockquote>

 </div><?php manual_footer($setup); ?>