Luis: aus einem cgi ein weiteres aufrufen und Parameter übergeben

Hallo,

ich möchte meine Forum.pl (Matt Wright) umbauen. Relativ oft hängt sich das Programm beim Versenden der Mail aus der Teilnehmerliste auf.
Deshalb möchte diesen Teil auslagern und der Benutzer ist nicht irritiert (weil er es gar nicht mitbekommt), wenn das Mailprogramm versagt. Es soll also Forum.pl z.B. mail.pl aufrufen.

Wie sieht so ein Aufruf aus?
Wie kann z.B. ein Wert wie $Absender übergeben werden?

Vielen Dank für ev. Antworten.

Luis

  1. Hallo,

    ich möchte meine Forum.pl (Matt Wright) umbauen. Relativ oft hängt sich das Programm beim Versenden der Mail aus der Teilnehmerliste auf.
    Deshalb möchte diesen Teil auslagern und der Benutzer ist nicht irritiert (weil er es gar nicht mitbekommt), wenn das Mailprogramm versagt. Es soll also Forum.pl z.B. mail.pl aufrufen.

    Wie sieht so ein Aufruf aus?
    Wie kann z.B. ein Wert wie $Absender übergeben werden?

    Vielen Dank für ev. Antworten.

    Luis

    Wenn das Programm die Daten auch mit GET einlesen kann, geht das am einfachsten, indem du einfach das Programm auf nem Server aufrufst, z. B. mit http://localhost/mail.pl?Absender=Ich. Das geht mit dem Modulen LWP oder IO::Socket. LWP ist etwas einfacher.

    Wenn das Programm nur POST akzeptiert, dann geht es zwar etwas schwieriger, oder sollte ich sagen anderst, aber auch mit LWP oder IO::Socket.

    Das einfachste ist, wenn du das Programm so umbaust, dass es Daten von der STDIN akzeptiert. Dann kannst du es, wie in dem Beispiel in Selfhtml mit Sendmail öffnen.

  2. Geht es nicht einfach mit:

    open (FILE, "script.pl?absender=jemand");
    close (FILE);

    ?

    Cruz

    1. Geht es nicht einfach mit:

      open (FILE, "script.pl?absender=jemand");
      close (FILE);

      Ich hab es noch nicht probiert, aber mein Gefühl sagt mir, dass das schiefgeht.

  3. Hi Luis

    Deshalb möchte diesen Teil auslagern und der Benutzer ist nicht irritiert (weil er es gar nicht mitbekommt), wenn das Mailprogramm versagt. Es soll also Forum.pl z.B. mail.pl aufrufen.
    Wie sieht so ein Aufruf aus?
    Wie kann z.B. ein Wert wie $Absender übergeben werden?

    Da gibt es exec() und system(): exec() macht den Aufruf (startet mail.pl) und beendet das laufende Script sofort. Bei system() wird der Aufruf ausgefuehrt, gewartet, bis es fertig ist, und dann beim Code weitergemacht.

    Den Aufruf kannst du dann z.B. so erledigen:
       system "/usr/local/bin/perl mail.pl $Absender $Empfaenger $msg";

    Damit wird mail.pl mit dem Perl-Interpreter (von /usr/local/bin) gestartet und die Argumente $Absender, $Empfaenger und $msg uebergeben. Diese Argumente kannst du in mail.pl holen mit dem Array @ARGV.

    Gruss,
    Beat

    1. Da gibt es exec() und system(): exec() macht den Aufruf (startet mail.pl) und beendet das laufende Script sofort. Bei system() wird der Aufruf ausgefuehrt, gewartet, bis es fertig ist, und dann beim Code weitergemacht.

      Den Aufruf kannst du dann z.B. so erledigen:
         system "/usr/local/bin/perl mail.pl $Absender $Empfaenger $msg";

      Damit wird mail.pl mit dem Perl-Interpreter (von /usr/local/bin) gestartet und die Argumente $Absender, $Empfaenger und $msg uebergeben. Diese Argumente kannst du in mail.pl holen mit dem Array @ARGV.

      Was sich auch noch zu erwähnen ist, ist fork. Damit kann man ein Programm starten, und es läuft dann sozusagen im Hintergrund, und das eigene Script läuft zur gleichen Zeit auch noch weiter. Damit kann man sogar miese Timeouteinstellungen von Webservern auf unendlich Timeout ueberschreiben.

  4. Danke für die vielen Antworten, ich werde das bald ausprobieren.

    Luis