dominik: script aufruf mißlingt

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

  1. 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

    1. 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.

      1. 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

  2. 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

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
    1. 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

      1. 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

        --
        SELFforum - Das Tor zur Welt!
        Theoretiker: Wie kommt das Kupfer in die Leitung?
        Praktiker: Wie kommt der Strom in die Leitung?
        1. 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 :(

          1. Hi

            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")

            Hmm, leite mal die Ausgabe um like
            exec("dir > /tmp/dir");

            Erwin

            --
            SELFforum - Das Tor zur Welt!
            Theoretiker: Wie kommt das Kupfer in die Leitung?
            Praktiker: Wie kommt der Strom in die Leitung?
            1. 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

              1. 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

                --
                SELFforum - Das Tor zur Welt!
                Theoretiker: Wie kommt das Kupfer in die Leitung?
                Praktiker: Wie kommt der Strom in die Leitung?