2009-06-25 39 views
31

Probé cosas como $ _ENV ['CLIENTNAME'] == 'Consola', pero parece funcionar solo en ciertos sistemas operativos (funcionó en Windows, no en Linux).¿Cómo verificar con PHP si el script se está ejecutando desde la consola o la solicitud del navegador?

Probé! Empty ($ _ [ 'SHELL'] ENV), pero eso no funciona siempre bien ...

¿Hay una manera de comprobar esto que funcione en todos los OS/de ambientes?

Gracias!

+0

Dupe http://stackoverflow.com/questions/607373/is-there-any-way-to-know-if-a-php-script-is-running-in-cli-mode –

Respuesta

59

Uso php_sapi_name()

Devuelve una cadena en minúsculas que describe el tipo de interfaz (API servidor, SAPI) que PHP está usando. Por ejemplo, en CLI PHP esta cadena será "cli" mientras que con Apache es puede tener varios valores diferentes dependiendo de la SAPI exacta utilizada.

Por ejemplo:

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

También puede utilizar la constante PHP_SAPI

-1

Comprobar la HTTP_USER_AGENT, debe existir en petición http

+0

Hay todo tipo de variables en $ _SERVER eso funciona bajo la misma idea. –

+3

El agente de usuario es opcional. No confiaría en eso, ya que hay una solución mucho mejor –

2

Sé que esto es una cuestión de edad, pero para que conste, ver las peticiones HTTP que entra sin usuario- El encabezado del agente y PHP no definen automáticamente HTTP_USER_AGENT en este caso.

+0

Ya se mencionó en un comentario a continuación, no puede confiar en HTTP_USER_AGENT ya que es un encabezado opcional. –

+0

¿Descartó mi respuesta y luego dejó un comentario diciendo exactamente lo mismo que dije, Nick? Bonito. Mi punto, hace 5 años cuando dejé este comentario, fue decirle al OP que HTTP_USER_AGENT no es confiable. – SteveK

+0

Oh wow, obviamente lo leí mal. Recuerde que no debe buscar SO mientras tiene sueño. ¿Podría por favor editar su respuesta un poco para poder cambiar mi voto? Lo siento por eso. –

0

Una solución es comprobar si se define STDIN:

if (!defined("STDIN")) { 
    die("Please run me from the console - not from a web-browser!"); 
} 
1
if ($argc > 0) { 
    // Command line was used 
} else { 
    // Browser was used 
} 

$ argc coounts la cantidad de argumentos pasados ​​a la línea de comandos. Simplemente usando php page.php, $ argc volverá 1

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

Cuestiones relacionadas