Blog de Gonzalo

Blog de programación de Gonzalo López

COMO SABER SI PHP SE ESTÁ EJECUTANDO DESDE CONSOLA O DESDE NAVEGADOR

PHP

En php es posible determinar si un script está siendo ejecutado desde la línea de comandos (CLI), o consola, o desde un navegador. Hay varias formas de saberlo, utilizando funciones y constantes integradas de php. A continuación, te explico los métodos más comunes y te proporciono ejemplos prácticos.

  • Usar la constante PHP_SAPI: La constante PHP_SAPI indica el Server API (SAPI) que está utilizando php. En la línea de comandos, el valor suele ser cli, mientras que en un servidor web puede ser apache2handler, fpm-fcgi, cgi-fcgi, entre otros.
    
    if (PHP_SAPI === 'cli') {
        echo 'El script está siendo ejecutado desde la consola (CLI).';
    } else {
        echo 'El script está siendo ejecutado desde un navegador (web).';
    }
    
  • Usar la función php_sapi_name() Similar a PHP_SAPI, la función php_sapi_name devuelve el nombre del SAPI en uso como una cadena.
    
    if (php_sapi_name() === 'cli') {
        echo "Ejecutado desde la consola.\n";
    } else {
        echo "Ejecutado desde el navegador.\n";
    }
    
  • Verificar la variable $_SERVER['REQUEST_METHOD'] En un entorno web, $_SERVER['REQUEST_METHOD'] (como GET o POST) suele estar definida, mientras que en CLI no existe.
    
    if (isset($_SERVER['REQUEST_METHOD'])) {
        echo "Ejecutado desde el navegador (método: {$_SERVER['REQUEST_METHOD']}).\n";
    } else {
        echo "Ejecutado desde la consola.\n";
    }
    
  • Verificar la variable $_SERVER['argv'] En CLI, $_SERVER['argv'] contiene los argumentos pasados al script. En un entorno web, no está definida o está vacía.
    
    if (isset($_SERVER['argv'])) {
        echo "Ejecutado desde la consola. Argumentos: " . implode(', ', $_SERVER['argv']) . "\n";
    } else {
        echo "Ejecutado desde el navegador.\n";
    }
    
Ejemplos en que nos sirve como saber si php se está ejecutando desde consola o desde navegador:
  • Scripts multiuso: Si un script debe comportarse de manera diferente en CLI y en un entorno web (por ejemplo, mostrar texto plano en CLI y HTML en el navegador).
  • Tareas programadas: Para asegurarte de que un script solo se ejecute desde CLI (por ejemplo, en un cron job).
  • Depuración: Registrar el entorno de ejecución para auditorías o debugging.
  • Seguridad: Restringir ciertas operaciones (como comandos del sistema) a CLI para evitar riesgos en entornos web.
Notas:
  • PHP_SAPI === 'cli' es el método más confiable y ampliamente utilizado.
  • Entornos no estándar: Algunos entornos (como PHP-FPM o scripts ejecutados en pipelines) pueden tener SAPIs diferentes (por ejemplo, fpm-fcgi). Ajusta las verificaciones según el caso.
  • Portabilidad: Para scripts portables, combina PHP_SAPI con verificaciones de $_SERVER['argv'] o $_SERVER['REQUEST_METHOD'] para cubrir la mayoría de los casos.

Compartir en twitter