¿Cómo distinguir la invocación de la línea de comandos y del servidor web? [duplicar]

StackOverflow https://stackoverflow.com/questions/343557

  •  19-08-2019
  •  | 
  •  

Pregunta

¿Hay alguna manera de distinguir si un script fue invocado desde la línea de comando o por el servidor web?

( Ver ¿Cuál es la forma canónica de determinar la línea de comandos frente a la ejecución http de un script PHP? para obtener la mejor respuesta y una discusión más detallada: no encontré esa antes de publicar)


Tengo un servidor (no de producción) con Apache 2.2.10 y PHP 5.2.6. En él, en un directorio accesible desde la web, está mi script PHP, maintenance_tasks.php . Me gustaría invocar este script desde la línea de comandos o mediante una solicitud HTTP (abriendo en un navegador). ¿Hay alguna variable que me permita determinar de manera confiable cómo se invoca el script?

(Ya abordé los problemas de diferentes vistas para cada tipo de invocación y tiempo de espera de respuesta HTTP, solo buscando una forma de distinguir los dos tipos de invocación)

Probaré cosas diferentes y agregaré mis hallazgos a continuación.

Duplicar: ¿Cuál es la forma canónica de determinar la línea de comandos frente a la ejecución http de un script PHP?

¿Fue útil?

Solución

Si se llama desde la línea de comandos, la variable de servidor HTTP_USER_AGENT no se establece. Utilizo esta constante para definir si el script se llama desde la línea de comandos o no:

define("CLI", !isset(

Si se llama desde la línea de comandos, la variable de servidor HTTP_USER_AGENT no se establece. Utilizo esta constante para definir si el script se llama desde la línea de comandos o no:

<*>

ACTUALIZACIÓN: Dado que esta respuesta todavía está marcada como 'correcta', me gustaría revisar mi declaración, confiando en el '' Usuario-Agente '' el encabezado puede ser problemático, ya que es un valor definido por el usuario.

Utilice php_sapi_name () == 'cli' o PHP_SAPI == 'cli' , como lo sugiere Eugene / cam8001 en los comentarios.

¡Gracias por señalar esto!

SERVER['HTTP_USER_AGENT']));

ACTUALIZACIÓN: Dado que esta respuesta todavía está marcada como 'correcta', me gustaría revisar mi declaración, confiando en el '' Usuario-Agente '' el encabezado puede ser problemático, ya que es un valor definido por el usuario.

Utilice php_sapi_name () == 'cli' o PHP_SAPI == 'cli' , como lo sugiere Eugene / cam8001 en los comentarios.

¡Gracias por señalar esto!

Otros consejos

He comparado la superglobal $ _SERVER en ambas invocaciones. Parece que $ _SERVER ['argc'] (es decir, el número de argumentos pasados ??al script) solo se establece cuando se ejecuta desde la línea de comandos / shell:

<?php
if (isset(

He comparado la superglobal $ _SERVER en ambas invocaciones. Parece que $ _SERVER ['argc'] (es decir, el número de argumentos pasados ??al script) solo se establece cuando se ejecuta desde la línea de comandos / shell:

<*>

Eso parece funcionar tanto en hosts Linux como Windows. (Primero pensé en buscar algunas de las variables de entorno, pero son diferentes para cada sistema operativo. Además, faltan todos los encabezados $ _SERVER ['HTTP_ *'] en la versión CLI, pero No estoy seguro de si eso es lo suficientemente confiable).

SERVER['argc'])) { define('CLI', true); } else { define('CLI', false); }

Eso parece funcionar tanto en hosts Linux como Windows. (Primero pensé en buscar algunas de las variables de entorno, pero son diferentes para cada sistema operativo. Además, faltan todos los encabezados $ _SERVER ['HTTP_ *'] en la versión CLI, pero No estoy seguro de si eso es lo suficientemente confiable).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top