2010-01-02 6 views
74

Tengo un script común que estoy incluyendo en mis archivos PHPcron y los archivos que están accediendo a través del navegador. Alguna parte del código, solo necesito para archivos que no sean cron. ¿Cómo puedo detectar si la ejecución es desde CLI o desde el navegador (sé que se puede hacer pasando algunos argumentos con los archivos cron, pero no tengo acceso a crontab). Hay alguna otra manera ?En PHP, ¿cómo detectar la ejecución desde el modo CLI o desde el navegador?

Respuesta

136

Utilice la función php_sapi_name().

if (php_sapi_name() == "cli") { 
    // In cli-mode 
} else { 
    // Not in cli-mode 
} 

Estas son algunas notas relevantes de los documentos:

php_sapi_name - Devuelve el tipo de interfaz entre el servidor web y PHP

Aunque no es exhaustiva, los posibles valores de retorno incluyen aolserver , apache, apache2filter, apache2handler, caudium, cgi (hasta PHP 5.3), cgi-fcgi, cli, cli-server, continuidad, embebido, isapi, litespeed, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux y webjames .

+2

+1 es la única forma correcta de hacerlo. –

+4

PHP_SAPI también se puede usar para esto, por lo que no es la única manera correcta de hacerlo – mishu

+11

. Solía ​​ser una respuesta de enlace único hasta que alguien copiara la respuesta de @Linus Unnebäck. ¡Mal hábito! Devolvió este, votó el otro ... –

3

Creo que puede verlo desde las variables $ _SERVER. Intente imprimir la matriz $ _SERVER para la CLI del navegador & y debería ver las diferencias.

+1

Esto puede ser cierto, pero no puede ser una forma confiable de determinar la interfaz que se utiliza. La forma correcta de verificar es con 'php_sapi_name()'. – DesignerGuy

13

Hay una constante PHP_SAPI tiene el mismo valor que php_sapi_name().

(disponible en PHP> = 4.2.0)

+0

¡Esta es la mejor manera! – Ankit

-4

Se puede utilizar:

if (isset($argc)) 
{ 
    // CLI 
} 
else 
{ 
    // NOT CLI 
} 
+3

-1 - '$ argc' podría haberse establecido dentro de la aplicación, ¿no es así? No es un método confiable. Me costó medio día de trabajo una vez. 'php_sapi_name()' es la única buena manera que conozco. –

+0

también $ argv/$ argc se puede completar con variables GET en algunas configuraciones. –

61
if(php_sapi_name() == "cli") { 
    //In cli-mode 
} else { 
    //Not in cli-mode 
} 
Cuestiones relacionadas