linux-l: CGI-Script im CGI-Script aufrufen

Steffen Dettmer steffen at dett.de
Mi Jan 31 13:10:10 CET 2001


* Manuel Tennert wrote on Tue, Jan 30, 2001 at 16:11 +0100:
> Hallo liebe Linuxer...ich hab da mal eine kleine Frage und zwar will ich
> in einem CGI-Script nach einer Abfrage ein weiteres Script laufen
> lassen. Das eine Script sieht in etwa so aus:

Warum schreibst Du nicht zwei Zeilen, die beschreiben, was das
Script macht? Soll ich das jetzt in stundenlager Kleinarbeit
durchgehen ;)

Also, Das Script macht normalerweise _keine_ Ausgaben, ja?
Du kannst ein perl-script auch z.B. mit "require" holen
(starten). Dabei sind Pfade ein Problem. CGI muß nicht zwingend
das Verzeichnis, in dem das Script steht, als Work-Directory
haben. Wenn Du es richtig machst, schaust Du im Environment nach
dem absoluten Pfad des laufenden Scriptes (wird vom Server
gesetzt), und ersetzt "script.cgi" durch "anderesscript.pl" und
machst ein require.

Hab sowas für config files gemacht (für
http://variomail.bedinetz.de):

sub conf_by_name()
{
        #Name des Configurationsfiles ermitteln
        #  das heißt wie das Script, aber statt .cgi/.pl ".conf"
        return if ($CONFIGFILE ne '');  #function override if set
        my $name = $0;
        $name =~ s/(.cgi|.pl)$//i;
        $name = $name . '.conf';
        $CONFIGFILE = $name;
        print_log("Autoconfig: verwende $CONFIGFILE");
}

Kannst Du ja anpassen.

> In der letzten else-Anweisung versuche ich dann mit Hilfe von
> system("perl maillog.pl"); ein weieteres Script aufzurufen. 

Das möchtest Du sicherheitshalber nicht wirklich ;)

> Leider aber
> schreibt er mir dann, nachdem er auf eine Fehlerseite wechseln soll,
> Location blablabla auf dem Bildschirm. 

    system("perl maillog.pl");
    print "Location: $falsch\n\n";

Ja, steht auch da... Vermutlich klappt system nicht (Du prüfst ja
nicht auf Fehler).

Mal auf console starten, und schauen, ob was auf STDERR kommt.

> Gibt es auch noch eine andere
> Möglichkeit ein CGI an dieser Stelle aufzurufen, ausser mit System ???

klar. "require", oder Du machst ein Package und lädst es mit "use".

> Klar ich koennte den Quelltest des anderen Scripts zum einen in eine
> subroutine packen und die dann aufrufen lassen, leider aber wird mir das
> script dann ein wenig zu lang.

Durch die zusätzlichen zwei Zeilen für die Subroutine?! Kann ja
nicht wahr sein. Nee, mach mal ne Subroutine, schmeiß die
mindestens in ein File (besser Package). Das File lädst Du mit
require, und danach kannst Du die Funktion aufrufen.

oki,

Steffen

-- 
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.



Mehr Informationen über die Mailingliste linux-l