Principales diferencias de CLI SAPI respecto a otras SAPIs:
A diferencia de CGI SAPI, no se envía ninguna cabecera a la salida.
Pese a que CGI SAPI tiene un mecanismo para desactivar las cabeceras HTTP, no existe un equivalente para habilitarlas en CLI SAPI.
Por omisión, CLI se inicia en modo silencioso, si bien se mantienen las opciones -q y --no-header por motivos de compatibilidad, de forma que pueda ser posible utilizar antigüos scripts CGI.
No se cambia el directorio de trabajo al del script (las opciones -C y --no-chdir se mantiene por compatibilidad).
Mensajes de error en texto plano (no se formatean en HTML).
Hay ciertas directivas php.ini que se ignoran en CLI SAPI ya que no tienen sentido en un entorno de consola:
Directiva | Valor por omisión en CLI SAPI | Comentario |
---|---|---|
html_errors | FALSE |
Siendo FALSE de forma predeterminada, puede resultar complicado leer mensajes de error en la consola
cuando éstos están mezclados con etiquetas
HTML no interpretadas.
|
implicit_flush | TRUE |
En un ambiente de línea de comandos, es preferible que las salidas que procedan de print, echo y y similares se muestren inmediatamente y no se mantenga en memoria intermedia. Aun así, es posible utilizar output buffering si se desea postergar o manipular la salida estándar. |
max_execution_time | 0 (ilimitado) | PHP en un entorno de shell tiende a ser utilizado para una gama mucho más amplia de los propósitos típicos basados en scripts de la Web, y como éstos pueden ser de muy larga duración, el tiempo de ejecución máximo se establece a ilimitado. |
register_argc_argv | TRUE |
Establecer esta directiva a Las variables de PHP $argc y $argv se establecen automáticamente al valor apropiado cuando se utiliza CLI SAPI. Esos valores también pueden ser encontrados en el array $_SERVER, por ejemplo: $_SERVER['argv'] |
output_buffering | FALSE |
Aunque la directiva php.ini está codificada como |
max_input_time | FALSE |
CLI no tiene soporte ni para GET, ni para POST ni para subidas de ficheros. |
Nota:
Estas directivas no pueden ser inicializadas con otro valor desde el fichero de configuración php.ini o con un valor personalizado (si se especifica). Esta limitación se debe a que los valores son aplicados después que todos los ficheros de configuración han sido analizados. Sin embargo, sus valores pueden ser cambiados en tiempo de ejecución (aunque esto no es aplicable a todas ellas, por ejemplo register_argc_argv).
Nota:
Se recomienda habilitar ignore_user_abort en scripts de línea de comandos. Para más información, consulte ignore_user_abort().
Para facilitar el trabajo en entornos de consola, se definen unas determinadas constantes para flujos de Entrada/Salida.
CLI SAPI no cambia el directorio actual a aquel en el que se encuentra el script ejecutado.
Ejemplo #1 Ejemplo que muestra las diferencias respecto a CGI SAPI:
<?php
// Aplicación de pruebas llamada test.php
echo getcwd(), "\n";
?>
Al usar la versión CGI, la salida es:
$ pwd /tmp $ php -q otro_directorio/test.php /tmp/otro_directorio
Esto muestra claramente que PHP cambia el directorio actual a aquél en que se encuentre el script ejecutado.
Al usar CLI SAPI obtenemos:
$ pwd /tmp $ php -f otro_directorio/test.php /tmp
Esto ofrece una gran flexibilidad a la hora de escribir herramientas de consola en PHP.
Nota:
CGI SAPI puede funcionar con este comportamiento propio de CLI SAPI usando la opción -C al ejecutarlo desde la línea de comandos.