Tengo un script Perl que se ejecutará desde la línea de comandos y como CGI. Desde dentro del script de Perl, ¿cómo puedo saber cómo se está ejecutando?¿Cómo puedo saber si un script Perl se está ejecutando en contexto CGI?
Respuesta
La mejor opción es comprobar la variable GATEWAY_INTERFACE
medio ambiente. Contendrá la versión del protocolo CGI que usa el servidor, casi siempre es CGI/1.1
. La variable HTTP_HOST
mencionada por Tony Miller (o cualquier variable HTTP_*
) solo se establece si el cliente la proporciona. Es raro pero no imposible para un cliente omitir el encabezado Host
dejando HTTP_HOST
unset.
#!/usr/bin/perl
use strict;
use warnings;
use constant IS_CGI => exists $ENV{'GATEWAY_INTERFACE'};
Si estoy esperando que se ejecute en mod_perl en algún momento también a comprobar la variable de entorno MOD_PERL
también, ya que se establece cuando el guión se compila por primera vez.
#!/usr/bin/perl
use strict;
use warnings;
use constant IS_MOD_PERL => exists $ENV{'MOD_PERL'};
use constant IS_CGI => IS_MOD_PERL || exists $ENV{'GATEWAY_INTERFACE'};
Una posible forma es verificar las variables de entorno establecidas por los servidores web.
#!/usr/bin/perl
use strict;
use warnings;
our $IS_CGI = exists $ENV{'HTTP_HOST'};
ver si su programa se conecta a un TTY o no:
my $where = -t() ? 'command line' : 'web server';
-1: Incorrecto. Esto le dirá si el programa se está ejecutando de forma interactiva, no si se está ejecutando bajo CGI. Ser llamado desde un trabajo cron o como parte de una canalización de shell daría resultados incorrectos (no sería interactivo, sino también no CGI). –
comprobaría mejor la GI en el CGI.
use CGI qw(header);
my $is_cgi = defined $ENV{'GATEWAY_INTERFACE'};
print header("text/plain") if $is_cgi;
print "O HAI, ", $is_cgi ? "CGI\n" : "COMMAND LINE\n";
Puede omitir las comillas:
mi is_cgi $ = $ ENV {definido GATEWAY_INTERFACE};
Por cierto, creo que sería bueno si el módulo CGI tuviera una forma de acceder a las variables de entorno. por ejemplo: my $ q = new CGI; mi is_cgi = $ q-> gatewayInterface(); # NO FUNCIONA. SÓLO UNA SUGERENCIA. –
- 1. ¿Cómo puedo saber si mi script de Perl se está ejecutando en Windows?
- 2. ¿Cómo puedo saber si un proceso se está ejecutando?
- 3. ¿Cómo puedo saber si el código de Rails se está ejecutando mediante rake o script/generate?
- 4. ¿Cómo saber si se está ejecutando un temporizador?
- 5. ¿Puedo saber, en node.js, si mi script se está ejecutando directamente o está siendo cargado por otro script?
- 6. ¿Hay alguna forma de saber si un script php se está ejecutando en modo cli?
- 7. Compruebe si un script php todavía se está ejecutando
- 8. En Perl, ¿cómo puedo desactivar CGI :: Carp que se cargó en un script obligatorio?
- 9. Cómo saber si el servidor de emacs se está ejecutando
- 10. ¿Cómo puedo saber si un proceso se está ejecutando en C?
- 11. Dentro de un archivo por lotes, ¿cómo puedo saber si se está ejecutando un proceso?
- 12. ¿Cómo saber si la actualización MATERIALIZED VIEW se está ejecutando?
- 13. ¿Cómo puede saber mi programa si Delphi se está ejecutando?
- 14. ¿Cómo puedo saber si un archivo está en un sistema de archivos remoto con Perl?
- 15. compruebe si el programa se está ejecutando y ejecútelo si no está en perl
- 16. ¿Cómo puedo saber si un proceso ya se está ejecutando usando C#?
- 17. ¿Cómo puedo determinar si un script de shell se está ejecutando con permisos de raíz?
- 18. ¿Cómo puedo saber si mi aplicación se está ejecutando en una sesión de RDP
- 19. ¿Cómo puedo saber si mi kernel OpenCL se está ejecutando en una GPU?
- 20. ¿Continuar script si solo se está ejecutando una instancia?
- 21. Cómo verificar un script bash si algo se está ejecutando y salir si es
- 22. ¿Cómo puedo saber si mi proceso se está ejecutando como administrador?
- 23. ¿Cómo reconocer si un script se está ejecutando en un tty?
- 24. ¿Cómo se puede saber si un método se está ejecutando en la devolución de datos de UpdatePanel?
- 25. ¿Cómo puedo probar si R se está ejecutando como Rscript?
- 26. ¿Cómo puedo saber si un programa se está ejecutando desde la línea de comandos o desde la web?
- 27. ¿Es posible saber si un objeto se está ejecutando en un dominio de aplicación diferente?
- 28. ¿Cómo puedo saber si STDIN está conectado a un terminal en Perl?
- 29. Cómo saber si un alojamiento compartido se está ejecutando 32 o 64 bit - con php
- 30. ¿Cómo puedo saber si se está mostrando ModalViewController?
http://stackoverflow.com/questions/1914966/how-can-i-determine-if-a-script-was-called-from-the-command-line-or-as-a-cgi-scri http://stackoverflow.com/questions/3086655/in-perl-how-to-distiniguish-between-cli-cgi-mode – daxim