Funcionamiento en la línea de comandos
PHP Manual

Ejecutando ficheros PHP

CLI SAPI tienes tres formas distintas de ejecutar código PHP:

  1. Decirle a PHP que ejecute un determinado fichero.

    $ php mi_script.php
    
    $ php -f mi_script.php
    

    Ambas formas (usando o no el modificador -f ) ejecutan el fichero mi_script.php. Puede elegirse cualquier fichero para ejecutarlo, sin necesidad de que el script PHP finalice con la extensión .php. Puede tener el nombre o extensión que se desee.

    Note:

    Si se necesita proporcionar argumento al script, es necesario usar -- como primer argumento cuando se ejecute con el modificador -f .

  2. Pasar el código PHP para ejecutarlo directamente en la línea de comandos.

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

    Debe tomarse especial cuidado con respecto al uso de comillas y la sustitución de variables de la consola.

    Note:

    Lea cuidadosamente el ejemplo, no hay etiquetas de inicio y fin. El modificador -r no lo necesita. Si se usare, provocaría un error sintáctico.

  3. Proporcionar el código PHP a ejecutar a través de la entrada estándar (stdin).

    Esto ofrece la posibilidad de usar código PHP creado dinámicamente para pasárselo al binario, tal y como se ve en este ejemplo (ficticio):

    $ alguna_aplicacion | algun_filtro | php | sort -u > salida_final.txt
    
No se pueden combinar las tres formas para ejecutar código.

Al igual que el resto de aplicaciones de consola, el binario de PHP acepta un determinado número de argumentos, pero un script PHP también puede recibirlos. Esto número de parámetros que puede recibir el script no está limitado por PHP (la consola tiene un determinado número de caracteres límite; lo normal es que no sea necesario superar este límite). Los parámetros pasados al script están disponibles en el array global $argv. El índice cero siempre contiene el nombre del script (- en caso de que el código PHP provenga de la entrada estándar o del modificador -r ). La segunda variable global que se registra es $argc, conteniendo el número de elementos que hay en el array $argv (no es el número de parámetros que se han pasado al script).

Dado que los parámetros que se pasan a un script no comienzan con el caracter -, no hay nada especial a tener en cuenta. Si se pasa a un script un parámetro que comience por - provocará errores porque el propio PHP pensará que debe manejarlo él. Para prevenir esto, debe usarse el separador de la lista de argumentos --. Una vez que PHP lea este separador, todos los argumentos que lo sigan se pasarán intactos al script.

# Esto no ejecutará el código dado, sino que mostrará el uso de PHP
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f] <file> [args...]
[...]

# Esto pasrá el argumento '-h' al script, impidiendo que PHP muestre su uso
$ php -r 'var_dump($argv);' -- -h
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(2) "-h"
}

Sin embargo, en sistemas Unix, hay otra forma de usar PHP para scripts de consola. Se puede escribir un script en el que la primera línea comience con #!/usr/bin/php (sustitúyalo por la ruta a su CLI binario de PHP si fuera necesario). Una vez hecho esto, ya se puede introducir código PHP entre las etiquetas de inicio y fin de PHP. Una vez que se otorguen permisos de ejecución al fichero apropiadamente (p.ej. chmod +x test) el script podrá ejecutarse como cualquier otro script de consola o perl:

Example #1 Ejecutando un script PHP como un script de consola

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

Asumiendo que este fichero se llama test y que está en el directorio actual, podremos hace lo siguiente:

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

Tal y como puede verse, en este caso no hace falta tener cuidado al pasar al script parámetros que comienzan con -.

Puede usarse PHP para ejecutar scripts con total independencia del servidor web. Si se está en un sistema Unix, debe añadirse una línea especial al comienzo del script PHP, y hacerlo ejecutable, de manera que el sistema sepa qué programa debe ejecutar el script. En plataformas Windows puede asociarse php.exe para que funcione hacer doble clic en ficheros .php, o se puede hacer un fichero por lotes para ejecutar el script mediante PHP. La primera línea que se añade a un script para que funcione en Unix no interferirá en Windows, por lo que de esta forma pueden escribirse programas independientes de la plataforma. Más abajo puede encontrarse un sencillo ejemplo de cómo escribir un programa de línea de comandos en PHP.

Example #2 Script destinado a ejecutarse desde la línea de comandos (script.php)

#!/usr/bin/php
<?php

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

Éste es un script PHP de línea de comandos con un parámetro.

  Uso:
  <?php echo $argv[0]; ?> <parámetro>

  <parámetro> puede ser alguna palabra que desee
  mostrar en pantalla. Con las opciones --help, -help, -h,
  o -?, puede mostrarse esta ayuda.

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

En el script superior, hemos usado la primera línea especial que indica que fichero debe ejecutarse por PHP. Puesto que aquí trabajamos con una versión CLI, no se mostrarán cabeceras HTTP. Hay dos variables que se pueden usar al escribir aplicaciones de línea de comandos en PHP: $argc y $argv. La primera corresponde al número de parámetros mas uno (el nombre del script en ejecución). La segunda es un array que contiene los parámetros, comenzando con el nombre del script en la posición cero ($argv[0]).

En el programa superior comprobamos si hay más de un parámetro o menos. Además, si el parámetro fuera --help , -help , -h o -? , imprimimos el mensaje de ayuda, escribiendo el nombre del script dinámicamente. Si recibimos algún otro parámetro, lo mostramos en pantalla.

Si se desea ejecutar el script superior en Unix, debe otorgarle permisos de ejecución al fichero, y simplemente llamar a script.php mostraresto o script.php -h. En Windows, se puede crear un fichero por lotes para lograr esta tarea:

Example #3 Fichero por lotes para ejecutar un script PHP en línea de comandos (script.bat)

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

Si el programa superior se llamara script.php, y CLI php.exe estuviera en C:\php\php.exe este fichero de lotes lo ejecutaría automáticamente con los parámetros que se haya pasado: script.bat echothis o script.bat -h.

Para conocer más funciones que se pueden usar para mejorar las aplicaciones en línea de comandos de PHP, revise la extensión Readline.

Si usted está en Windows, puede configurar PHP para que no sea necesario añadir ni C:\php\php.exe ni la extensión .php, tal como se describe en PHP en Línea de Comandos en Microsoft Windows.


Funcionamiento en la línea de comandos
PHP Manual