PHP Conference Kansai 2025

Diferencia con otros SAPIs

Las diferencias más notables entre el CLI SAPI y los otros SAPI son:

  • A diferencia del CGI SAPI, ningún encabezado HTTP se escribe en el resultado.

    Aunque el CGI SAPI proporciona una forma de eliminar los encabezados HTTP, no es posible activar los encabezados HTTP en el CLI SAPI.

    CLI se ejecuta en modo silencioso por defecto, aunque las opciones -q y --no-header se mantienen para mantener la compatibilidad con versiones anteriores de CGI.

    No cambia el directorio actual al del script. (Las opciones -C y --no-chdir se mantienen por razones de compatibilidad).

    Mensajes de error en texto plano (sin formato HTML).

  • Hay varias directivas del php.ini que son ignoradas por el CLI SAPI, ya que no tienen sentido en un entorno shell:

    Directivas php.ini ignoradas
    Directiva Valor por defecto para CLI SAPI Comentario
    html_errors false Por defecto a false, ya que puede ser bastante difícil leer mensajes de error en un terminal cuando están enterrados en etiquetas HTML no interpretadas.
    implicit_flush true En un terminal, generalmente es deseable que cualquier salida de print, echo y otros, se muestre inmediatamente, y no se coloque en un búfer. Sin embargo, siempre es posible utilizar la bufferización de salida si se desea retrasar una salida, o bien manipular su contenido una última vez.
    max_execution_time 0 (sin límite) PHP en un terminal es susceptible de ser utilizado para tareas mucho más diversas que en scripts web, y dado que esto generalmente toma mucho tiempo, este parámetro se establecerá por defecto a 0 permitiendo así ser ilimitado.
    register_argc_argv true

    El establecimiento de esta directiva a true significa que los scripts ejecutados a través del SAPI CLI siempre tendrán acceso a argc (representando el número de argumentos pasados a la aplicación) y argv (el array que contiene los argumentos pasados).

    Las variables PHP $argc y $argv se definen y rellenan automáticamente con los valores apropiados, al utilizar el SAPI CLI. Estos valores también pueden encontrarse en la variable $_SERVER, por ejemplo: $_SERVER['argv'].

    Advertencia

    La presencia de $argv o $_SERVER['argv'] no es una indicación fiable de que un script se está ejecutando desde la línea de comandos, ya que estas variables pueden definirse en otros contextos cuando register_argc_argv está activado. El valor devuelto por php_sapi_name() debe verificarse en su lugar.

    <?php

    if (php_sapi_name() === 'cli') {
    echo
    "¡Este script se está ejecutando desde la línea de comandos!\n";
    }

    output_buffering false

    Aunque esta configuración INI está codificada a false, las funciones relacionadas con la visualización del búfer están disponibles.

    max_input_time false

    El PHP CLI no soporta GET, POST y la carga de archivos.

    Nota:

    Estas directivas no pueden inicializarse con otros valores en el archivo php.ini o por cualquier otro método. Es una limitación, ya que estos valores por defecto se aplican una vez que todos los otros archivos de configuración han sido analizados. Sin embargo, estos valores pueden modificarse durante la ejecución (lo cual no es lógico para ciertas directivas, como register_argc_argv).

    Nota:

    Se recomienda establecer ignore_user_abort para los scripts en línea de comandos. Consulte la función ignore_user_abort() para más información.

  • Para facilitar el trabajo en un entorno shell, se definen varias constantes para los flujos I/O.

  • El CLI SAPI no transforma el directorio actual en el directorio de ejecución del script.

    Ejemplo #1 Ejemplo que muestra la diferencia con el SAPI CGI:

    <?php
    // Una prueba simple: muestra el directorio de ejecución */
    echo getcwd(), "\n";
    ?>

    Cuando se utiliza la versión CGI, la salida será:

    $ pwd
    /tmp
    
    $ php -q otro_directorio/test.php
    /tmp/otro_directorio
    

    Esto muestra claramente que PHP cambia el directorio actual y utiliza el directorio del script ejecutado.

    Al utilizar el CLI SAPI, se obtiene:

    $ pwd
    /tmp
    
    $ php -f otro_directorio/test.php
    /tmp
    

    Esto proporciona mucha más flexibilidad al escribir scripts shell con PHP.

    Nota:

    El CGI SAPI se comporta de la misma manera que el CLI SAPI, pasándole la opción -C, cuando se invoca en la línea de comandos.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top