## Ejecución de archivos PHP

Hay 3 formas diferentes de llamar al CLI SAPI con código PHP a ejecutar:

1. Indicar a PHP que ejecute un archivo dado:

       php mon_script.php

       php -f mon_script.php

   Ambos métodos (usando -f o no) ejecutan el script contenido en el archivo mon_script.php. 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 `.php`.

2. Dar código PHP a ejecutar directamente en la línea de comandos.

       php -r 'print_r(get_defined_constants());'

   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.

   > Nota:

   > Lea el ejemplo con atención, ¡no hay etiquetas de apertura ni de cierre! La opción -r hace que el uso de estas etiquetas sea innecesario, y agregarlas conduciría a un error de análisis sintáctico.

3. Alimentar la entrada estándar con código PHP (`stdin`).

   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:

       $ some_application | some_filter | php | sort -u > final_output.txt

No es posible combinar estos tres modos de ejecución.

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 $argv. 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 -r, el valor de $argv[0] será `"Standard input code"`; anterior a PHP 7.2.0, era un guion (`"-"`) en su lugar. Esto también es cierto si el código se ejecuta a través de un pipe desde `STDIN`.

Una segunda variable global, $argc, contiene el número de elementos del array $argv (y no el número de argumentos pasados a su script).

Mientras los argumentos pasados al script no comiencen con el carácter `-`, no hay nada especial que vigilar. El hecho de pasar argumentos al script que comienzan con `-` plantea problemas porque PHP pensará que debe interpretarlos. Para evitar esto, use el separador `--`. Después de este argumento, todos los argumentos siguientes se pasarán al script sin ser modificados ni analizados por PHP.

    # Esto no ejecutará el código, sino que mostrará la ayuda de PHP
    $ php -r 'var_dump($argv);' -h
    Uso: php [opciones] [-f] <archivo> [args...]
    [...]

    # Esto pasará el argumento '-h' al script y evitará que PHP lo maneje
    $ php -r 'var_dump($argv);' -- -h
    array(2) {
      [0]=>
      string(1) "-"
      [1]=>
      string(2) "-h"
    }

Sin embargo, hay otra forma de usar PHP como script shell; la primera línea del script debe ser `#!/usr/bin/php` (a reemplazar por la ruta hacia el binario PHP CLI 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 (chmod +x test), puede ejecutarse como un script shell o perl habitual:

Ejemplo #1 Ejecuta un script PHP como script shell

    #!/usr/bin/php
    <?php
    var_dump($argv);
    ?>

Suponiendo que este archivo se llame test, en el directorio actual, entonces es posible hacer esto:

    $ chmod +x test
    $ ./test -h -- foo
    array(4) {
       [0]=>
       string(6) "./test"
       [1]=>
       string(2) "-h"
       [2]=>
       string(2) "--"
       [3]=>
       string(3) "foo"
    }

Como puede ver, en este caso, no es necesario tener cuidado al pasar parámetros que comienzan con `-` a su script.

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 php.exe con el doble clic en los archivos de extensión `.php`, 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:

Ejemplo #2 Script previsto para ser ejecutado en línea de comandos (script.php)

    #!/usr/bin/php
    <?php

    if ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
    ?>

    Esto es una línea de comando a una opción.

      Uso:
      <?php echo $argv[0]; ?> <opción>

      <opción> puede ser una palabra que desee mostrar.
      Con las opciones --help, -help, -h,
      y -?, obtendrá esta ayuda.

    <?php
    } else {
        echo $argv[1];
    }
    ?>

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 CLI, por lo que no se mostrará ningún encabezado HTTP.

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 --help, -help, -h o -?, se mostrará un mensaje de ayuda, utilizando $argv[0] 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.

Para ejecutar el script anterior en Unix, debe hacerlo ejecutable y luego llamarlo con un comando como: script.php echothis o script.php -h. En Windows, puede hacer un archivo batch para esto:

Ejemplo #3 Archivo batch para ejecutar un script PHP en línea de comandos (script.bat)

    @echo OFF
    "C:\php\php.exe" script.php %*

Suponiendo que el programa anterior se llame script.php, y que el ejecutable CLI php.exe se encuentre en C:\php\php.exe, este archivo batch lo ejecutará con las opciones que le pase: script.bat echothis o script.bat -h.

Vea también la extensión Readline, que dispone de numerosas funciones para mejorar la usabilidad de las aplicaciones PHP en línea de comandos.

En Windows, PHP puede configurarse para funcionar sin necesidad de proporcionar las extensiones C:\php\php.exe o `.php`, tal como se describe en la línea de comandos PHP bajo Microsoft Windows.

> Nota:

> 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 "No se realiza ninguna vinculación entre los nombres de cuenta y los identificadores de seguridad".

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open