¿Cómo verificar con PHP si el script se ejecuta desde la consola o la solicitud del navegador?
-
22-07-2019 - |
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?
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