2010-01-31 16 views
10

El título es tranquilo y directo. Tengo que saber por el lado del servidor si el script se llamó a través de la solicitud HTTP o por línea de comandos. Podría examinar $_SERVER['argv'] o $_SERVER['argc'].
¿Cuál es la forma pragmática para hacer eso?¿Cómo diferenciar entre las solicitudes http y cli?

Respuesta

2

Mira las claves en $_SERVER. Si es una solicitud cli, no debería ver ninguna que comience con "HTTP".


Aquí es un poco de código de prueba sencilla:

<?php 

foreach($_SERVER as $k=>$v){ 
    echo "$k: $v\n"; 
} 

?> 

Y aquí está la salida:

[email protected]:~/so$ php cli.php |grep HTTP 
[email protected]:~/so$ 
+0

n necesita un bucle cuando puede probar solo un valor. –

+0

@kemp, la pregunta de OP pidió específicamente alternativas a argc –

1

comprobar Posiblemente si no hay ningún $_SERVER['HTTP_HOST']? Porque creo que esa variable se rellena a través de los encabezados de solicitud enviados a un archivo en la ejecución, y la línea de comandos probablemente no envíe encabezados.

+0

Ha, dentro de 1 segundo de cada uno ... –

0

Puede verificar si la variable global $argc está configurada.

0

Sugiero comprobar if(isset($_SERVER['SERVER_NAME']))

+0

No estoy seguro de que esto no esté configurado. Podría, especialmente si está ejecutando su archivo PHP de forma remota. –

+0

Creo que la matriz $ _SERVER está reservada para transacciones HTTP, pero puede que tenga razón. Todavía vale la pena revisar los diversos miembros, ya que estoy seguro de que difieren entre la ejecución local y remota. –

0

Pero hay que enviar los datos a través de HTTP (TCP) de todos modos, no importa si la secuencia de comandos se llama desde CLI o desde un navegador

+0

Usted simplemente está equivocado. – erenon

Cuestiones relacionadas