cgi script im hintergund starten
Christian
- cgi
0 Stefan Bach
Hi, ich habe ein cgi script (perl), dass ich über einen link aufrufen will.
wenn der link allerdings angeklickt wird soll das cgi script einfach nur gestartet werden und der link soll dann eine andere seite aufrufen.
wie kann ich sowas realisieren?
grüße
christian
Hallo,
wenn der link allerdings angeklickt wird soll das cgi script einfach nur gestartet werden und der link soll dann eine andere seite aufrufen.
wie kann ich sowas realisieren?
Gar nicht. Wenn der Link aufgerufen wird, dann setzt der Browser einen Request auf diese Ressource ab. Dein Webserver nimmt dies als Anlass das CGI Script zu starten und sendet dessen Ausgabe als Reply.
Du kannst allerdings in deiner Reply einen Location Header schicken, diesen wird der Browser dann als Anlass nehmen einen weiteren Request zu der darin angegebenen Ressource abzusetzen.
Viele Grüße,
Stefan
Hi Stefan,
in meinem script ist eine sleep funktion von bis zu einer stunde und ich nehme an das das reply erst nach beendigung des scripts gesendet wird. oder geht das schon früher? oder vielleicht kann ich ja ein script schreiben das wiederrum das andere aufruft und dann bei schließen den reply sendet?
Du kannst allerdings in deiner Reply einen Location Header schicken, diesen wird der Browser dann als Anlass nehmen einen weiteren Request zu der darin angegebenen Ressource abzusetzen.
ich habe leider keine ahnung von perl wie sende ich denn den location header?
viele grüße zurück
christian
hi,
<a href="http://www.test.de/umleitung.cgi">link zum starten vom cgi</a>
umleitung.cgi
#!/usr/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI;
my $q = new CGI;
##hier steht was das programm im hintergrund machen soll.
print $q->redirect( "http://www..." ); #hier ist der link auf die seite die aufgerufen werden soll.
Hallo,
##hier steht was das programm im hintergrund machen soll.
print $q->redirect( "http://www..." ); #hier ist der link auf die seite die aufgerufen werden soll.
Ich würde den Location Header doch wohl eher vor den Hintergrundaufgaben losschicken, damit er auch vor Beendigung derer ankommt.
Ein einfaches
print "Location: http://example.com\n\n";
sollte es auch tun, da ist das CGI Modul ziemlicher Overkill. Am besten noch das Output Buffering abstellen (ich glaube es ist $|, bin mir aber nicht ganz sicher), dann könnte es klappen.
Viele Grüße,
Stefan
Hi Stefan,
in meinem script ist eine sleep funktion von bis zu einer stunde und ich nehme an das das reply erst nach beendigung des scripts gesendet wird.
Frag mal bei deinem Provider nach ob du ein Sktipt überhaupt solange laufen lassen darfst oder ob der Provider es automatisch beendet. Handelt es sich um Perl so wird bei jedem Request auf das Skript eine neue Instanz gebildet und das Skript gestartet, du kannst so den Server lahmlegen!