Mam skrypt Perl, które będą uruchamiane z linii poleceń i jak CGI. Z poziomu skryptu Perla dowiesz się, jak można go uruchomić?Jak mogę sprawdzić, czy skrypt Perl wykonuje się w kontekście CGI?
Odpowiedz
Najlepszym wyborem jest sprawdzenie zmiennej środowiskowej GATEWAY_INTERFACE
. Będzie zawierał wersję protokołu CGI używanego przez serwer, prawie zawsze jest to CGI/1.1
. HTTP_HOST
zmienna wspomniano przez Tony Miller (lub dowolnej zmiennej HTTP_*
) ustawiona jest tylko wtedy, gdy klient dostarcza je. Rzadko, ale nie jest niemożliwe, aby klient pominął nagłówek Host
, pozostawiając brak ustawienia HTTP_HOST
.
#!/usr/bin/perl
use strict;
use warnings;
use constant IS_CGI => exists $ENV{'GATEWAY_INTERFACE'};
Jeśli mam spodziewa się uruchomić pod mod_perla w pewnym momencie będę również sprawdzić zmienną środowiskową z MOD_PERL
również, ponieważ zostanie on ustawiony, gdy skrypt jest najpierw kompilowany.
#!/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'};
Jednym z możliwych sposobów jest sprawdzenie zmiennych środowiskowych, które są określone przez serwery WWW.
#!/usr/bin/perl
use strict;
use warnings;
our $IS_CGI = exists $ENV{'HTTP_HOST'};
Sprawdź, czy program jest podłączony do TTY lub nie:
my $where = -t() ? 'command line' : 'web server';
1: Nieprawidłowe. Dzięki temu dowiesz się, czy program działa interaktywnie, a nie czy działa pod CGI. Wywołanie z zadania cron lub jako część potoki powłoki dałoby nieprawidłowe wyniki (byłoby to nieinteraktywne, ale także nie-CGI). –
Można by najlepiej sprawdzić GI w 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";
Można pominąć cytaty:
moja $ is_cgi = zdefiniowany $ ENV {GATEWAY_INTERFACE};
Nawiasem mówiąc, myślę, że byłoby miło, gdyby moduł CGI miał sposób na dostęp do zmiennych środowiskowych. np: moja $ q = new CGI; my is_cgi = $ q-> gatewayInterface(); # NIE DZIAŁA. TYLKO SUGESTIA. –
- 1. Jak sprawdzić, czy skrypt Perl działa w terminalu?
- 2. Jak mogę sprawdzić, czy jestem w zaznaczonym kontekście?
- 3. Jak mogę sprawdzić, czy mój skrypt Perla działa pod Windows?
- 4. Jak mogę skompilować skrypt Perl wewnątrz działającej sesji Perl?
- 5. Jak sprawdzić, czy sbt w kontekście testu?
- 6. Jak mogę sprawdzić moduł Perl 6?
- 7. Skrypt .jsx Adobe InDesign wykonuje skrypt .jsx
- 8. Jak mogę rozwidlić procesy w tle ze skryptu CGI Perl w systemie Windows?
- 9. Jak sprawdzić, czy launchd uruchomił skrypt?
- 10. Jak mogę odwołać się do podprogramu Perl?
- 11. Jak sprawdzić, czy skrypt Perla nie zawiera błędów kompilacji?
- 12. uruchom skrypt Pythona jako serwer cgi apache
- 13. Jak sprawdzić skrypt NAnt, czy właściwość jest ustawiona, czy nie?
- 14. Dlaczego mój skrypt CGI Perl nie może znaleźć DBD bazy danych Oracle?
- 15. Jak mogę sprawdzić, czy znajduję się w stosie wyjątków Delphi?
- 16. Jak mogę sprawdzić, czy ciąg kończy się „.csv” w C
- 17. Dlaczego moje CGI Perl narzeka na "Przedwczesne zakończenie nagłówków skryptu"?
- 18. Jak sprawdzić, czy załadowany asynchronicznie skrypt zakończył ładowanie w javascript
- 19. Czy cgi nie żyje?
- 20. Jak mogę wysłać dane POST i GET do skryptu Perl CGI za pomocą wiersza poleceń?
- 21. Jak uruchomić skrypt F # w kontekście aplikacji C#
- 22. Jak mogę sprawdzić, czy telefon z Androidem ładuje się?
- 23. Jak sprawdzić, czy mój program jest rurami do drugiej (Perl)
- 24. Utwórz hiperłącze (lub przycisk), które wykonuje skrypt w języku Python, a następnie przekierowuje, gdy skrypt zakończy się.
- 25. Jak uruchomić skrypt ruby w kontekście pakietu bundler?
- 26. Programowanie CGI w Elisp?
- 27. Jak mogę sprawdzić, czy JSON jest pusty w NodeJS?
- 28. Sugestie dotyczące systemu uwierzytelniania dla CGI Perl :: Aplikacja
- 29. Jak mogę obsługiwać niebuforowane treści CGI z Apache 2?
- 30. Jak mogę sprawdzić, czy liczba całkowita Java ma wartość NULL?
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