Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] php per exec() im Hintergrund ausführen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] php per exec() im Hintergrund ausführen

    Hallo ihrs,

    eine Frage zu PHP's exec()-Befehl:
    Ich habe ein Script(script1.php), das ein Weiteres(script2.php) per exec() aufruft. Nun würde ich aber gerne script2.php im Hintergrund ablaufen lassen. D.h. script2.php wird gestartet und läuft und läuft und läuft, ich kann derweil aber schon mit script1.php weiterarbeiten und dessen Ausgaben nach dem Start von script2.php sehen, die Seite wechseln etc.

    Momentan habe ich es so umgesetzt: exec("script2.php parameter1 parameter2"); was jedoch den Zweck nicht erfüllt, da script1.php solange weiterläuft, bis script2.php fertig ist(set_time_limit(0) ist gesetzt).
    Nun habe ich folgendes gefunden:
    PHP-Code:
    exec('script2.php parameter1 parameter2 >/dev/null &2>/dev/null &'); 
    Ist das die Lösung? Heisst das: Starte script2.php und lass es im Hintergrund laufen, beende script1.php ganz normal und zeige dessen Ausgaben im Browser an?

    Danke für eure Hilfe.
    Tausche 10m WLAN-Kabel gegen Volleyball-Schläger. Bei Interesse bitte melden.

  • #2
    das riecht nach Konzept-Fehler - ein php-script per exec würde es als KonsolenAnwendung starten - da ist dann nix mit Browseranzeige ....

    oder hab ich dich gerade mißverstanden?
    "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

    Kommentar


    • #3
      das riecht nach Konzept-Fehler - ein php-script per exec würde es als KonsolenAnwendung starten - da ist dann nix mit Browseranzeige ....
      Das ist schon klar. Es wird ja auch nur script2.php im Hintergrund gestartet, und dieses hat auch gar keine Ausgabe(ist nur die Abarbeitung von Daten in einer Datenbank zuständig.). Script1.php hingegen wird ganz normal im Browser aufgerufen.
      Tausche 10m WLAN-Kabel gegen Volleyball-Schläger. Bei Interesse bitte melden.

      Kommentar


      • #4
        dann starte script2 doch von "außerhalb" - cronjob / Aufgabenplanung - fänd ich jedenfalls viel eleganter als das exec zu vergewaltigen ....

        Ich bezweifele sowieso, dass es darüber geht.....
        "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

        Kommentar


        • #5
          warum "vergewaltige" ich exec?
          Tausche 10m WLAN-Kabel gegen Volleyball-Schläger. Bei Interesse bitte melden.

          Kommentar


          • #6
            hm - nach meinem Verständnis :

            exec benutz ich um externe Programme auszuführen (DOS Befehl oder vergleichbares) - nach deren Ausführung verarbeite ich den Rückgabewert (ob das Kommando ausgeführt werden konnte ) und dann gehts mit dem Script weiter.

            So etwas wie Hintergrund-Task starten würd ich jedenfalls eher in cronjob oder so auslagern, nicht aber vom Php-Script erledigen lassen. Zumal .. ohne Request an dein php-Script läuft das Hintergrund-Script unter umständen gar nicht, denn dann wird ja auch das "Vordergrund-script" nicht ausgeführt....
            "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

            Kommentar


            • #7
              Ist das die Lösung? Heisst das: Starte script2.php und lass es im Hintergrund laufen, beende script1.php ganz normal und zeige dessen Ausgaben im Browser an?
              und Du schaffst es echt nicht so was selber zu testen ?

              Oder mal in die Doku zu schaun ?

              traurig, traurig ...


              Wie programimerst Du eigentlich ?
              Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

              Kommentar


              • #8
                Nach weiteren 2 Stunden Recherche und Ausprobieren bin ich nun auf Folgende Lösung gekommen:
                Script1 ruft script2 folgendermaßen auf:
                PHP-Code:
                exec("php -f absoluter/Pfad/Zu/Script2.php Parameter1 Parameter2 Parameter3 >/dev/null &2>/dev/null &"); 
                Läuft wunderbar. Ich habe zwar keine Ahnung wohin die Ausgabe dank des Zusatzes >/dev/null &2>/dev/null & geleitet wird, aber es funktioniert.

                @Koala: Genau das war auch der Grund warum ich frage. Ich bin auch ein großer Freund von gidf.de aber wenn ich mir als Linux-Nixblicker über Linux-Befehle im Unklaren bin, frage ich lieber erstmal bevor ich mir evtl. was kaputt mache.
                Tausche 10m WLAN-Kabel gegen Volleyball-Schläger. Bei Interesse bitte melden.

                Kommentar


                • #9
                  Ich habe zwar keine Ahnung wohin die Ausgabe dank des Zusatzes >/dev/null &2>/dev/null & geleitet wird
                  Auch das kann man leicht recherchieren. Von daher berechtigte Kritik.
                  [COLOR="#F5F5FF"]--[/COLOR]
                  [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                  [COLOR="#F5F5FF"]
                  --[/COLOR]

                  Kommentar

                  Lädt...
                  X