script aufruf mißlingt
dominik
- cgi
hi
ich habe ein cgi script, daß ein 2.script aufruft, welches eine
zeit- und rechenintensivere operation durchführt.
ich rufe das 2. mit exec("") auf, dann müßte es sich doch eigentlich
abkoppeln?? ich tue dies so, damit der browser nicht auf rückmeldung wartet.
mein problem aber: im browser bekomme ich die ausgabe des 2. scripts angezeigt, obwohl gar keine variablen definiert sind dafür im ersten???
außerdem beendet sich der erste prozess nicht sondern wartet auf den 2.
laut dem tutorial hier bei selfhtml beendet sich das 1. nach dem aufruf des 2.scripts
kann mir da jemand weiterhalfen??
danke!
ciao
dominik
Hallo dominik!
Zunächst eine Frage:
Was soll den passieren, wenn Du zurückkommst, noch bevor das zweite Script beendet ist?
Soll der Anwender dann weitersurfen und irgendwann von deinem Scriptergebnis in seinem Fenster überrascht werden?
Ich will dich hier nicht angreifen, aber sag mir was du vor hast, vielleicht gibts ja ne gute Lösung für dich,
Richard
Hallo dominik!
Zunächst eine Frage:
Was soll den passieren, wenn Du zurückkommst, noch bevor das zweite Script beendet ist?
Soll der Anwender dann weitersurfen und irgendwann von deinem Scriptergebnis in seinem Fenster überrascht werden?
nein, das ist teil einer webapllication.
der aufruf soll ein langes dokument erstellen (xml xsl-fo usw.)
nach dem anstoß des progs auf der serverseite, soll der user nichts mehr machen außer evtl zum anfang zurück, das ergebniss wir nicht online aufgerufen, oder aufrufbar sein.
Hallo dominik!
Auch auf die Gefahr hin, dass mich diverse SelfHTMLer jetzt schlachten: Schon mal an eine Lösung über Frames gedacht?
Idee wie folgt:
1)erzeuge 2 Frames: 1 Hauptframe(size 100%), ein Nebenframe(size 0%)
2)im Hauptframe steht deine Seite, die das CGI aufruft. Das Target deines Formulars, das du absendest, setzt du auf den Nebenframe.
3. Da du ja keine Ausgabe hast und der Nebenframe nicht sichtbar ist,
passt das eh...
4. Im Hauptframe kann weiter operiert werden.
Ich weiss nicht, ob du sowas willst, aber viel Glück,
Richard
hi
laut dem tutorial hier bei selfhtml beendet sich das 1. nach dem aufruf des 2.scripts
Das gilt für PERL.
Bei einem CGI musst du dafür sorgen, dass stets der richtige header like
Content-type: text/plain
Content-type: text/html
gefolgt von einer Leerzeile UND ein bischen Text oder HTML danach ausgegeben wird. Es muss IMMER was ausgegeben werden.
Viele Grüße, Erwin
das klappt nicht so ganz,
mein script siehts so aus in etwa:
#!C:\Programme\xampp\perl\bin\perl.exe
print "Content-type: text/html\n\n";
print '<html>';
print '<head>';
print '<meta name="" content="">';
print '<link href="http://localhost/win.css" rel="stylesheet" type="text/css">';
print '</head>';
print "<body><center> <p><h1>Dokument wird erstellt!</h1></body></html>";
exec("C:/Programme/xampp/perl/bin/perl.exe","C:/Programme/abc.cgi");
print 'Erstellung gestartet...';
trotzdem wartet das cgi auf das ergebniss des abc.cgi
Mahlzeit,
exec("C:/Programme/xampp/perl/bin/perl.exe","C:/Programme/abc.cgi");
print 'Erstellung gestartet...';
trotzdem wartet das cgi auf das ergebniss des abc.cgi
Du hast exec(PROGRAM LIST);
Versuchs mal so:
print 'Starte externen Prozess';
exec("C:/Programme/abc.cgi");
bzw.
exec("C:/Programme/xampp/perl/bin/perl.exe C:/Programme/abc.cgi");
Viele Grüße, Erwin
Hi danke für deine Bemühungen!
beides eben probiert
print 'Starte externen Prozess';
exec("C:/Programme/abc.cgi");
startet nicht, da interpreter fehlt
bzw.
exec("C:/Programme/xampp/perl/bin/perl.exe C:/Programme/abc.cgi");
gleiches ergebniss wie bei ("balbla","blabal")
wieso wartet das cgi denn überhaupt wenn das externe teil aufgerufen wird? um genau zu sein ruft dieses cgi wieder eine bat auf, dacht evtl so besser zu lösen, jetzt warten aber beide scripts :(
Hi
beides eben probiert
print 'Starte externen Prozess';
exec("C:/Programme/abc.cgi");
startet nicht, da interpreter fehltbzw.
exec("C:/Programme/xampp/perl/bin/perl.exe C:/Programme/abc.cgi");gleiches ergebniss wie bei ("balbla","blabal")
Hmm, leite mal die Ausgabe um like
exec("dir > /tmp/dir");
Erwin
Hi
Hmm, leite mal die Ausgabe um like
exec("dir > /tmp/dir");
das hatte ich probiert, die ausgabe geht in ne datei, aber
das original wartet immer noch.
das problem ist die zeit, die das script braucht, die rechenzeit wird ca. 10min dauern, solange kann der browser leider nicht warten.
man kann zwar einfach das fenster schließen uznd die programme laufen weiter, aber das wäre nur ne second best lösung
ciao
dominik
Hi
Hmm, leite mal die Ausgabe um like
exec("dir > /tmp/dir");das hatte ich probiert, die ausgabe geht in ne datei, aber
das original wartet immer noch.
das problem ist die zeit, die das script braucht, die rechenzeit wird ca. 10min dauern, solange kann der browser leider nicht warten.
Nun, Windows ist sicher auch nicht die richtige Plattform für das was du vorhast. Auf jeden Fall kannst du mit
kommando & (Ampersand)
unter *X einen Prozess in den Hintergrund schicken was auf Windows definitiv nicht geht.
Erwin