aus einem cgi ein weiteres aufrufen und Parameter übergeben
Luis
- cgi
0 Erik Tews0 Cruz0 Beat Strasser0 Danke
Luis
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
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.
Geht es nicht einfach mit:
open (FILE, "script.pl?absender=jemand");
close (FILE);
?
Cruz
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.
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
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.
Danke für die vielen Antworten, ich werde das bald ausprobieren.
Luis