PHP Sleep und Weiterleitung

Schon festgestellt? Dem Forum sind gerade alle Interaktionsmöglichkeiten genommen. :(

Mehr dazu unter: Abstimmung über das Forum

  • Guten Tag,


    ich bin dabei ein kleines System zu schreiben. Das ganze mache ich mit Linux aber das ist ein anderes Thema. Da Linux bisschen braucht muss ich eine Zeit Verzögerung einbauen, dies mache ich mit "sleep"



    Aktuell sieht es bei mir so aus:


    (HIER IST EINE LINUX ZEILE, kennt ihr bestimmt "wget" bis der das Heruntergeladen hat dauert es ein wenig, deswegen mache ich da sleep hin, damit nicht sofort der andere Befehl ausgeführt wird)



    Code
    1. $output = shh2_exec($connection, "wget TEST-SEITE.de/download.zip")
    2. sleep(3);
    3. HEADER("LOCATION: index.php");
    4. sleep(2);
    5. $output = shh2_exec($connection, "unzip download.zip")




    So. Wie ihr gesehen habt, habe ich nach "sleep(3);" eine Weiterleitung eingebaut. Eigentlich soll er auf die Index.php, dann wieder 2 Sekunden warten und dann die Datei entzipen.


    Leider ist dies nicht so.

    Ich werde erst weitergeleitet wenn "sleep(2);" auch Vorbei ist. Also muss ich 5 Sekunden warten bis ich Weitergeleitet werde. Er Leitet also immer erst am Ende weiter.



    Hat da jemand eine Idee wie ich das ändern kann?





    Über eine Antwort würde ich mich sehr Freuen.



    MFG

    CuzImCloud

  • Es gibt kein zurück.

    Mit der header() sagst Du dem Browser bescheid, dass er wo anders hin soll,

    was er dann auch macht.

    Üblicherweise beendet man das script nach header() - zB mit exit(0).


    Alles was Du jetzt noch in diesem Script

    ausführst, wird ausgeführt,

    ausgibst, wird nicht mehr beachtet.

  • ja das Ding ist halt nur.


    Das er mich natürlich weiterleitet aber erst am Ende und nicht dann wenn ich es gerne hätte


    Aber ist teste es mal mit exit

  • Okay mit exit ist es tatsächlich so das er die anderen Befehle nicht mehr ausführt.


    Warum schreibst du kein shell-Script, das wget und unzip ausführt?

    Ich möchte ja gerne erst das er wget ausführt, 3 Sekunden wartet, dann mich auf eine andere Seite weiterleitet, dann 2 Sekunden wartet und dann das ganze entzipen tut.


    Wie ich das mit einem shell-script ändern soll weiß ich leider nicht.

  • Die Shell verarbeitet die Befehle/Commands sequentiell, d.h. nacheinander.

    Wenn also wget etwas Zeit braucht, wird alles weitere auch nicht ausgeführt, bevor wget seinen Prozess beendet hat.

    Wozu Du sleep benötigst, is mir genau so schleierhaft, wie die Weiterleitung.

  • Sleep habe ich eig gemacht damit wget die Zeit hat. Die Weiterleitung möchte ich machen weil ich auf der neuen Seite wo ich eig weitergeleitet werden soll neue Inputs sind die man ausfüllen soll.


    Ich weiß es geht anders, aber ich wollte es gerne so machen. Weshalb ich gerne die Weiterleitung benötige,


    und das shell-script in php ist ja eig "$output = shell_exec (etc..)"


    oder täusche ich mich da? Weil sobald ich shell_exec benutze passiert leider nichts.

  • Okay das ding ist jtz, wenn ich wget ausführe, möchte ich eine Weiterleitung haben, und erst dann unzip machen.


    Ich habe da leider keine Ahnung wie ich das mache, mit 2 Unterschiedlichen Scripts funktioniert das nicht. Nach der Weiterleitung führt er unzip nicht aus.



    //edit


    Wget wird auch nicht ausgeführt, es wird nicht heruntergeladen.

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von CuzImCloud ()

  • Hey,


    führe das Shell Script auf der Seite aus, auf die du weiterleitest. Um sicher zu gehen, dass der User von der bestimmten Seite kommt kannst du bei Header() der URL einen eindeutigen Parameter mitgeben.


    Grüße,

    Stef

  • Das ding ist jtz nur wenn man über URL auf die Seite geht, führt es das auch aus. Es soll aber erst ausgeführt werden wenn man auf der anderen Seite einen Button drückt.

  • Hab das jetzt mal so gemacht:


    Code
    1. header("LOCATION: index.php?var=" . $id . "");


    Das klappt soweit. Jetzt habe ich es bei mir so gemacht das ich in der Datenbank noch die Spalte "wget" hab die auf 1 gesetzt wird, wenn es heruntergeladen wird.


    Auf der index.php Frage ich jtz ab ob die Seite den Paramater $id hat. Das funktioniert soweit auch. Ich möchte aber nun auch Abfragen ob bei dieser ID "wget" auf 1 gesetzt ist.


    Das mache ich mit

    Code
    1. if($_GET['var'] == $id && $audiobot['wget'] == "1") {
    2. echo "Test";
    3. }



    Leider wird "echo" nicht ausgegeben trotz das "wget" auf 1 gesetzt ist.



    Ich sehe leider keinen Fehler. Der kann noch so offensichtlich sein.


    Jemand eine Idee?




    Gruß

  • Richtig debuggen


    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.



    Mit den wenigen Infos kann man nicht viel anfangen

  • Okay 3x das ich das änder.


    Sleep wird auf der Seite ausgeführt wo ich auf den Submit Button geklickt habe, anstatt auf der Seite wo die Funktion eig eingebaut ist.


    Sleep benötige ich damit er "unzip" machen kann. Wenn ich auf die neue Seite weitergeleitet werde ohne "sleep" entzipt er nichts.


    Und mit einem .sh Script gehts auch nicht, da ist es das selbe.

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von CuzImCloud ()

  • Nochmal: ein Shell-Script ist der richtige Weg.


    Wenn du unbedingt warten willst, dann entpacke die Datei in einen temporären Ort und verschiebe diese danach in das Verzeichnis, in das die Datei wirklich soll.


    Im PHP-Script kannst du dann mit einer Schleife solange warten, bis die Datei in diesem Verzeichnis existiert.


  • Ich möchte es einfach in /home/ herunterladen.


    Und dann auch dort entpacken. Und erst wenn es entpackt ist, sollen die anderen Befehle weitergehen.



    Und ich habe ja bereits gesagt das ein Shell Script nicht funktioniert. 1. Weil es auch nicht wartet bis alles Entpackt ist. 2. Hat die Datei eine ID von PHP, und die kann ich schlecht in einem Shell Script einbauen.

  • 1. Weil es auch nicht wartet bis alles Entpackt ist.

    2. Hat die Datei eine ID von PHP, und die kann ich schlecht in einem Shell Script einbauen.

    Zu 1. Kannst du statt ssh2_exec nicht auch exec nehmen, das würde warten, bis das Script fertig ist.

    Zu 2. Doch, kannst du, als Parameter dem Script übergeben

  • Mit "exec" klappt es soweit sehr gut. Nur 1 Problem noch.


    Wenn ich die Weiterleitung habe und auf der Seite bin wo das ganze "entpackt" werden soll, funktioniert das erst, nachdem man die Seite 1x Neugeladen hat.


    Kann man das ändern?