Announcement

Collapse
No announcement yet.

MySQL sowie PHP beim verlassen der Seite beenden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MySQL sowie PHP beim verlassen der Seite beenden

    Hallo zusammen.

    Ich arbeite mit einem Session basierten CMS.
    Ein User kann eine Abfrage starten und muss (ggf.) bis zu X Minuten warten, bis die Abfrage beendet wurde, und die Ergebnisse dargestellt werden.
    X Minuten sind dem User aber manchmal zu lange - der User klickt also nochmals auf die Anfrage, welche natürlich erst dann gestartet wird, wenn die andere erst erfolgreich beendet wurde (Sessionlock hält die Anfrage solange, bis die andere abgearbeitet wurde).

    Insgesamt kann es so manchmal zu einem "Stau" an Anfragen kommen.
    Das nervt den User nach einer Zeit, und er verlässt die Seite.

    Lassen wir mal die Wartezeit außer acht (die Momentan zwar das Problem ist, aber hier jetzt kein Thema sein soll).

    Ich würde gerne die komplette Abfrage (PHP-Abarbeitung, sowie MySQL Abfragen) verwerfen, sobald ich bemerke dass der User die Seite verlässt.

    Es gibt in PHP eine Verbindungssteuerung, mit dieser ich abfragen kann, ob der User sich noch auf der Seite befindet.
    Das ganze funktioniert - ich bekomme mein "aborted"-Status.
    Jedoch kann ich die weitere Ausführung des Scriptes nicht stoppen.
    Geschweige denn MySQL Abfragen abbrechen.

    PHP Code:
    <?php
    sleep
    (5);
    function 
    test_abort()
    {
        
    touch('abborted.success');
        die();
    }
    register_shutdown_function('test_abort');

    sleep(5);

    touch('abborted.fail');
    die(
    'end_test');
    Ist das überhaupt irgendwie innerhalb des gleichen Scripts möglich?
    Eine Lösung a la: per JS abfangen ob ein Benutzer die Seite verlässt und dann ein Ajax an eine seperate PHP (andere Session etc), welche dann diese Prozesse "hart" killt, kommt für mich nicht in Frage.
    Zuletzt editiert von some1; 18.05.2011, 07:38.

  • #2
    - Du kannst den Sendenbutton per Javascript aus der Seite entfernen.....
    - Du kannst beim erstmaligen Druck auf den Sendenbutton den Submit senden, bei weiteren Druck auf den Button eine Meldung anzeigen .....

    Ansonsten:
    Du wirst wohl an der der Usache (Wartezeit) arbeiten müssen. Die DB, die wohl zurzeit solange braucht, wirst du nicht unterbrechen können.
    Christian

    Comment


    • #3
      > Du kannst den Sendenbutton per Javascript aus der Seite entfernen.....

      Ich kann leider keine Hinweise ausgeben lassen etc, da mit session_start() die weitere Ausführung der Seiten blockiert wird - und da das CMS schon in den main includes die Session startet, geht nach dem Aufruf einer großen Abfrage erstmal gar nichts mehr :-(. Der Otto-Normal-Dau denkt sich er hat Verbindungsprobleme etc, und drückt wild hin und her (startet die gleiche Anfrage nochmals etc). Alle Anfragen landen somit vorerst beim session_start() - da bereits die session verwendet wird (diese gelockt ist). wartet PHP mit der Abarbeitung bis die vorherige beendet wurde.

      Momentan ist bei den Seiten mit großen Abfragen ein "Loader" eingebaut.
      Das hilft nur leider nichts, wenn der User die Seite verlässt und die Anfrage weiter abgearbeitet wird.
      Und das würde ich gerne irgendwie abbrechen, damit die Ressourcen für weitere User wieder zur Verfügung stehen - bzw auch damit die LOCKS (update, delete läuft zwischendurch) aus MySQL (benutze MyISAM) durch die laufende Abfrage (die ja dann keiner mehr benötigt - da User weg) verschwinden.

      Aber es scheint wirklich so zu sein, dass man diese Abfragen nicht einfach "abbrechen" kann . Hatte mich diesbezüglich auch schon per Google informiert, aber finde rein gar nichts nützliches dazu..

      Comment


      • #4
        Hallo,
        Originally posted by some1 View Post
        ...ein Ajax an eine seperate PHP (andere Session etc), welche dann diese Prozesse "hart" killt, kommt für mich nicht in Frage.
        Davon würde ich auch abraten, da die Systemstabilität mit Sicherheit leidet.
        Allerdings gibt es auch keinen - mir bekannten - anderen Weg eine laufende MySQL-Query oder ein laufendes PHP-Script zu beenden.
        Das PHP-Script kann eigentlich nur pollenderweise prüfen ob ein bestimmter "Status" gesetzt ist und sich ggfs. selbst beenden.

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment

        Working...
        X