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
http://us3.php.net/manual/en/function.php-sapi-name.php
<?php
echo PHP_SAPI;
echo php_sapi_name();
?>
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$
n necesita un bucle cuando puede probar solo un valor. –
@kemp, la pregunta de OP pidió específicamente alternativas a argc –
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.
Ha, dentro de 1 segundo de cada uno ... –
Puede verificar si la variable global $argc
está configurada.
Sugiero comprobar if(isset($_SERVER['SERVER_NAME']))
No estoy seguro de que esto no esté configurado. Podría, especialmente si está ejecutando su archivo PHP de forma remota. –
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. –
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
Usted simplemente está equivocado. – erenon
- 1. ¿Cómo diferenciar las solicitudes de Ajax de las solicitudes Http normales?
- 2. ¿Cómo diferenciar entre las teclas 'Enter' y 'Return' en Javascript?
- 3. Diferenciar entre TCHAR y _TCHAR
- 4. Diferenciar entre applicationDidEnterBackground y applicationWillTermimate
- 5. Cómo analizar correctamente las solicitudes HTTP entrantes
- 6. Cómo reducir las solicitudes css http?
- 7. Cómo diferenciar entre iphone4 y iphone 3
- 8. solicitudes HTTP y querystring vs encabezados?
- 9. ¿Reduce las solicitudes HTTP o no?
- 10. ¿Diferenciar entre iPhones en blanco y negro?
- 11. Las solicitudes http de Node.js no funcionan
- 12. Supervisar las solicitudes HTTP realizadas por IE8
- 13. ¿Reduce las solicitudes HTTP de 1000 imágenes?
- 14. Diferenciar entre tecla presionada y tecla mantenida
- 15. Escuchar solicitudes HTTP
- 16. ¿Cómo puedo diferenciar entre clics simples y dobles en .Net?
- 17. apc_store no funciona entre las solicitudes
- 18. ¿Cómo hacer solicitudes HTTP paralelas en Heroku?
- 19. Cómo diferenciar entre versiones frente a instantáneas
- 20. IE e.keyCode - ¿Cómo puedo diferenciar entre ampersand y up-arrow?
- 21. Interceptar y anular solicitudes HTTP de WebView
- 22. Asignación de solicitudes HTTP a respuestas HTTP
- 23. CURL: ¿Cómo retiene las cookies entre las solicitudes?
- 24. solicitudes http con powershell
- 25. Cómo especificar las solicitudes de python http put body?
- 26. ¿Cómo redirecciono las solicitudes https: // a http: // en NGINX?
- 27. ¿Cómo diferenciar entre el programador y JVM excepciones
- 28. ¿Cómo diferenciar entre hacer clic y arrastrar/soltar evento?
- 29. ¿Cómo diferenciar entre una llamada perdida y una respuesta negativa?
- 30. Cómo capturar solicitudes HTTP POST con browsermob-proxy y selenio
Bien hecho, gracias. – erenon
+1 Este es el camino a seguir. He tenido problemas para verificar las variables $ _SERVER y cosas así. Este siempre funciona –
+1 no sabía acerca de esta función, ¡gracias! –