Diferencias entre CLI y CGI
PHP puede funcionar en diferentes entornos. El entorno más común es CGI, que se ejecuta cuando PHP procesa una petición HTTP. Sin embargo, también es posible ejecutar un script PHP desde la Terminal, en cuyo caso se trata de una tarea denominada CLI (Command-line interface).
Las diferencias más importantes entre CLI y CGI
- A diferencia de
CGI SAPI,CLIno escribe ninguna cabecera en la salida por defecto. - Hay algunas directivas de
php.inique se anulan enCLI SAPIporque no tienen sentido en un entorno de shell: html_errors: CLI por defecto aFALSE.implicit_flush: el valor por defecto de la CLI esTRUE.max_execution_time: el valor por defecto de la CLI es0(ilimitado)register_argc_argv: el valor por defecto de la CLI esTRUE.- El script puede aceptar argumentos de la línea de comandos. La variable
$argcle da el número de argumentos pasados a la aplicación. Y el campo$argvte da una matriz de argumentos reales - Hay 3 nuevas constantes definidas para el entorno del shell:
STDIN,STDOUT,STDERR. Todos son manejadores de archivos para el dispositivo shell correspondiente. Por ejemplo,STDINes un manejador de archivos parafopen('php://stdin', 'r'). Así, puedes leer una línea deSTDINde la siguiente manera:$strLine = trim(fgets(STDIN));. ElSTDINya está definido para usted usando elPHP CLI. - El PHP CLI no cambia el directorio actual al directorio del script que se está ejecutando. El directorio actual para el script sería el directorio en el que se ejecuta el comando PHP CLI.
- Hay un número de opciones ÚTILES disponibles para el CLI de PHP. Lo que le permite obtener alguna información valiosa sobre su configuración de php, su script de php o ejecutarlo en diferentes modos.
- En PHP 5 ha habido algunos cambios en los nombres de los archivos CLI y CGI. En PHP 5, la versión CGI ha sido renombrada a
php-cgi.exe(antesphp.exe) y la versión CLI se encuentra ahora en el directorio principal (antescli/php.exe). - También se ha introducido un nuevo modo en PHP 5:
php-win.exe. Esto es equivalente a la versión CLI, excepto que enphp-winno se imprime nada, y por lo tanto no proporciona ninguna consola (no se muestra ninguna "caja de dos" en la pantalla). Este comportamiento es similar al dePHP GTK.