Ich habe ein Skript, das ich geschrieben habe und das entweder in der Befehlszeile oder als CGI-Skript verwendet werden kann. Es muss bestimmt werden, wie das Skript aufgerufen wurde, damit ich einen Content-Type-Header für Web-Anfragen ausgeben kann Anti-Cache-Header auch). Mein erster Gedanke ist, auf die Existenz von http-Umgebungsvariablen zu prüfen:
%Vor%Gibt es einen besseren Weg?
Gemäß der CGI-Spezifikation in RFC3875 (Abschnitt 4.1.4.) wäre die Umgebungsvariable GATEWAY_INTERFACE maßgebend zu prüfen, ob Sie in einem CGI-Kontext laufen:
4.1.4. %Code%
Die
GATEWAY_INTERFACE
Variable MUSS auf den Dialekt von CGI gesetzt werden Wird vom Server zur Kommunikation mit dem Skript verwendet.
Es gibt wirklich keine gute Möglichkeit zu sagen, ob Ihr Skript von einem Webserver oder von der Befehlszeile gestartet wurde. Jede der Umgebungsvariablen kann in beiden Situationen festgelegt werden. Ich laufe oft CGI-Programme direkt von der Kommandozeile aus, um sie zum Beispiel zu testen.
Wenn Sie wissen, dass eine Umgebungsvariable zur Verwendung ausgewählt werden soll, muss sie nur eine sein, die Sie in der anderen Situation nicht festlegen, oder eine, die Sie in beiden Fällen festlegen, aber unterschiedliche Werte angeben. Wählen Sie in diesem Fall eine beliebige Umgebungsvariable.
Wenn Sie mehr Sophisticated bekommen möchten, können Sie etwas wie IO :: Interactive verwenden, um festzustellen, ob Sie sind mit einem Terminal verbunden. Wenn dies nicht der Fall ist, ist die filehanandle, die is_interactive
zurückgibt, ein NULL-Dateihandle und die Ausgabe geht nirgendwohin:
Wenn Sie nicht möchten, wie IO :: Interactive entscheidet, können Sie is_interactive
erneut implementieren. Es ist ein sehr kurzes Stück Code und die übergeordnete Schnittstelle ist sehr nett.
Tags und Links command-line perl environment-variables cgi