¿Cómo verificar con PHP si el script se ejecuta desde la consola o la solicitud del navegador?

StackOverflow https://stackoverflow.com/questions/1042501

Pregunta

Intenté cosas como $ _ENV ['CLIENTNAME'] == 'Console' pero parece funcionar solo en ciertos sistemas operativos (funcionaba en Windows, no en Linux).

¡Lo intenté! vacío ($ _ ENV ['SHELL']) pero eso tampoco funciona siempre ...

¿Hay alguna forma de verificar esto que funcione en todos los sistemas operativos / entornos?

¿Fue útil?

Solución

Utilice php_sapi_name ()

  

Devuelve una cadena en minúscula que   describe el tipo de interfaz (el   Server API, SAPI) que PHP está usando.   Por ejemplo, en CLI PHP esta cadena   será " cli " mientras que con Apache   puede tener varios valores diferentes   dependiendo del SAPI exacto utilizado.

Por ejemplo:

$isCLI = ( php_sapi_name() == 'cli' );

También puede usar la constante PHP_SAPI

Otros consejos

Verifique http://php.net/manual/en/features. commandline.php # 105568 " PHP_SAPI " Constante

<?php
if (PHP_SAPI === 'cli')
{
   // ...
}
?> 

Sé que esta es una pregunta antigua, pero para el registro, veo que las solicitudes HTTP llegan sin un encabezado User-Agent y PHP no define automáticamente HTTP_USER_AGENT en este caso.

if ($argc > 0) {
    // Command line was used
} else {
    // Browser was used
}

$ argc reduce la cantidad de argumentos pasados ??a la línea de comando. Simplemente usando php page.php, $ argc devolverá 1

Llamando a page.php con un navegador, $ argc devolverá NULL

Una solución es verificar si STDIN está definido:

if (!defined("STDIN")) {
    die("Please run me from the console - not from a web-browser!");
}

Verifique HTTP_USER_AGENT, debe existir en la solicitud http

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top