Wie kann ich feststellen, ob ein Skript von der Befehlszeile oder als CGI-Skript aufgerufen wurde?

7

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?

    
spudly 16.12.2009, 14:26
quelle

3 Antworten

18

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.

    
VoidPointer 16.12.2009, 14:34
quelle
8

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:

%Vor%

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.

    
brian d foy 16.12.2009 19:58
quelle
2

Normalerweise mache ich zu Beginn meines Moduls einen kleinen Trick:

%Vor%

Das Modul muss nicht "run" heißen.

    
Peter 04.10.2012 08:17
quelle