kostenloser Webspace werbefrei: lima-city


Was passiert wenn ein User die Seite verlässt während sie ge

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    computerkurs2011

    Kostenloser Webspace von computerkurs2011

    computerkurs2011 hat kostenlosen Webspace.

    Was passiert wenn ein User die Seite verlässt während sie gerade lädt?


    Also hier ein kleines Beispiel:

    eine Registrierung die über einen Browser aufgerufen und dann von PHP verarbeitet wird. Bricht dann die Bearbeitung ab, wenn der User die Seite verlässt?

    Und wenn ja, wie kann ich das dann unterbinden, so dass das Skript bis zum Ende durchgeführt wird, auch wenn der Nutzer die Seite bereits verlassen hat. Weil sonst habe ich ja unvollständige Daten in meiner Datenbank gespeichert.


    Und noch ein Beispiel: Wenn ich jetzt eine Datei vom User uploaden lasse auf meinen Server, kann ich dann vorher die Dateigröße prüfen, also mir vom Browser die Größe sagen lassen und dann nach dem Upload prüfen ob die Datei vollständig hochgeladen wurde, anhand der Dateigröße die mir der Browser gesagt hat und der Größe der Datei die auf dem Server liegt, so dass ich die Datei, wenn sie unvollständig ist löschen kann?

    Ihr braucht mir keine ganzen Programme, als Antworten schreiben sondern ihr könnt auch einfach die Befehle dafür hierein schreiben mit einem Mini-Beispiel und einer kleinen Erklärung.

    Schon mal im Voraus Danke !

    MfG cpk2011
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. h**s

    hi,

    also wenn ein user auf eine seite surft, auf der wie du sagst eine registrierung läuft die mit php programmiert wurde, so wird php ja auf dem server fertig ausgeführt, bevor der browser des users überhaupt seinen quellcode bekommt... also wird php niemals `abgebrochen` (es sei denn der server stürzt ab), da kann der user machen was er will.

    mit anderen worten:
    dem server und damit php ist es total egal was der browser macht oder nicht macht, nachdem das script ersteinmal angestoßen wurde...



    und zum upload:
    dazu kannst du einfach die $_FILES-Variable fragen ob fehler aufgetreten sind, oder der upload komplett war.
    in dieser liegt nach dem upload dann auch die dateigröße.
  4. Autor dieses Themas

    computerkurs2011

    Kostenloser Webspace von computerkurs2011

    computerkurs2011 hat kostenlosen Webspace.

    OK, vielen Dank für deine Hilfe. Ich habe wieder einmal was dazu gelernt.

    MfG cpk2011
  5. patientenclub

    patientenclub hat kostenlosen Webspace.

    hcms schrieb: so wird php ja auf dem server fertig ausgeführt, bevor der browser des users überhaupt seinen quellcode bekommt...


    Das ist so nicht ganz richtig (klugscheiss). Der Client bekommt jedesmal Quellcode, wenn ein "print" oder "echo" oder ähnliches ausgeführt wird. Der User kann also seine Seite fertig geladen haben, während der Server noch ewig weitermacht, ohne dass der User davon etwas mitbekommt. Das kann ganz praktisch sein, um z.B. dem User eine Rückmeldung zu geben und dann erst die langwierige Verarbeitung z.B. einer hochgeladenen Datei zu starten.
  6. patientenclub schrieb:
    hcms schrieb: so wird php ja auf dem server fertig ausgeführt, bevor der browser des users überhaupt seinen quellcode bekommt...


    Das ist so nicht ganz richtig (klugscheiss). Der Client bekommt jedesmal Quellcode, wenn ein "print" oder "echo" oder ähnliches ausgeführt wird. Der User kann also seine Seite fertig geladen haben, während der Server noch ewig weitermacht, ohne dass der User davon etwas mitbekommt. Das kann ganz praktisch sein, um z.B. dem User eine Rückmeldung zu geben und dann erst die langwierige Verarbeitung z.B. einer hochgeladenen Datei zu starten.
    Obwohl ich erst am Anfang von php stehe muss ich dir was das Beispiel aus der Frage betrifft wiedersrechen natürlich wird die Seite "Registrierung erfolgreich" erst ausgeliefert wenn sie geklappt hat. In wie weit es durch schusslige Programmierung anders sein kann weis ich nicht.Fakt ist aber, dass mit dem Aschicken des Posts die Registrierungsdaten an den Server geschickt werden. Da ein ordentlich programmiertes Skript erst diese prüft und dann entweder eine Fehlermeldung ausgibt oder eben die Seite "Registrierung erfolgreich" kann dies nicht passieren. Ich denke einmal der Mod mit der schönen Signatur: "Nicht denken, wissen" wird dies noch näher erklären. Auch bei dem von dir genannten Beispiel "angestossener Dateiupload" habe ich sehr grosse Zweifel an deinen Ausführungen. Oder schaffst du es ein Telefongespräch weiter zu führen obwohl dein Gesprächspartner aufgelegt hat?
  7. Autor dieses Themas

    computerkurs2011

    Kostenloser Webspace von computerkurs2011

    computerkurs2011 hat kostenlosen Webspace.

    Also um jetzt eine genaue Antwort zu bekommen. Ich habe folgendes auf cronjob.de gefunden:

    Wie lange werden die Skripte ausgeführt?
    Jeder Cronjob wird in der kostenlosen Version von cronjob.de maximal 20 Sekunden lang ausgeführt. In der kostenpflichtigen Version wird der Cronjob 45 Sekunden lang ausgeführt. Sollte ihr Skript nach 20 Sekunden aber noch nicht fertig sein, können Sie z.B. in PHP das Skript trotzdem weiterlaufen lassen. Dafür müssen Sie in Ihr PHP-Skript folgendes in die erste Zeile einfügen:

    set_time_limit(0);
    ignore_user_abort(true);

    In anderen Programmiersprachen ist dies ähnlich. Schauen Sie dafür bitte in die entsprechende Dokumentation.


    Jetzt frag ich mich wieder ob ein Script (in PHP geschrieben) abbricht, wenn der Client die Seite verlässt. Er hat also die Daten an den Server gesendet (Name, Adresse, ect für die Registrierung). Er denkt sich nun ich mach den PC aus. Die Verbindung zum Clienten bricht ab und der Server ist gerade beim Prüfen der Daten ob sie gültig sind, er will sie danach in die Datenbank eintragen. Der Client hat die Verbindung abgebrochen, die Daten sind aber schon vollständig gesendet, wird jetzt das Script auch abgebrochen oder läuft es zu ende und schickt das Erfolgreich echo ins Nichts. Weil wenn es z.B. während des eintragens der Daten in die Datenbank abbricht, dann hab ich unvollständige Datensätze, die mir alles vollmüllen.

    Also was passiert ?

    MfG cpk2011
  8. h******g

    Meine Güte, was hier wieder für Müll erzählt wird...

    1) Wenn man eine Seite aufruft, schickt der Browser eine Anfrage an den Server.

    2) Der Server empfängt die Anfrage und verarbeitet sie.

    3) Sobald die Verarbeitung abtgeschlossen ist, schickt der Server eine Antwort zurück zum Client, also dem Browser. Was der dann damit macht, bzw. ob das Programm überhaupt noch läuft, ist dem Server egal.

    Die einzige Möglichkeit, Daten bereits während der Laufzeit des Scripts zu senden, besteht in der Verwendung des php-Befehls flush() - und selbst da ist es dem Server egal, was der Client mit den Antworten macht (mit ignore_user_abort()).
    Dass mit echo() und der gleichen Daten versendet werden, ist Schwachsinn.
    Schau dir am besten die Struktur von HTTP-Verbindungen an.

    Beitrag zuletzt geändert: 27.1.2013 14:55:18 von hm4-blog
  9. computerkurs2011 schrieb:
    Also um jetzt eine genaue Antwort zu bekommen. Ich habe folgendes auf cronjob.de gefunden:

    Wie lange werden die Skripte ausgeführt?
    Jeder Cronjob wird in der kostenlosen Version von cronjob.de maximal 20 Sekunden lang ausgeführt. In der kostenpflichtigen Version wird der Cronjob 45 Sekunden lang ausgeführt. Sollte ihr Skript nach 20 Sekunden aber noch nicht fertig sein, können Sie z.B. in PHP das Skript trotzdem weiterlaufen lassen. Dafür müssen Sie in Ihr PHP-Skript folgendes in die erste Zeile einfügen:

    set_time_limit(0);
    ignore_user_abort(true);

    In anderen Programmiersprachen ist dies ähnlich. Schauen Sie dafür bitte in die entsprechende Dokumentation.


    Jetzt frag ich mich wieder ob ein Script (in PHP geschrieben) abbricht, wenn der Client die Seite verlässt. Er hat also die Daten an den Server gesendet (Name, Adresse, ect für die Registrierung). Er denkt sich nun ich mach den PC aus. Die Verbindung zum Clienten bricht ab und der Server ist gerade beim Prüfen der Daten ob sie gültig sind, er will sie danach in die Datenbank eintragen. Der Client hat die Verbindung abgebrochen, die Daten sind aber schon vollständig gesendet, wird jetzt das Script auch abgebrochen oder läuft es zu ende und schickt das Erfolgreich echo ins Nichts. Weil wenn es z.B. während des eintragens der Daten in die Datenbank abbricht, dann hab ich unvollständige Datensätze, die mir alles vollmüllen.

    Also was passiert ?

    MfG cpk2011
    Die 20 Sekunden (hier auf Lima afair 30) sind die Zeit die dein (Registrierungs-) Skript benötigen darf. Dies reicht allemal um die Daten zu verifizieren in die DB einzutragen und die Antwort zu generieren. Nur wenn z.B.: der MySQL-Server nicht erreichbar ist wird ein Fehler auftreten der aber keinen Datenmüll verursachen kann in diesem Fall wird eine Fehlerantwort generiert. Die Übertragungszeit der generierten Antwort zum Client interessiert dabei nicht. Wenn auf die Antwort keine Reaktion innerhalb einer bestimmten Zeit kommt wird die Verbindung abgebrochen. Dies geschieht aber auf einer anderen Ebene nämlich durch das http-Protokoll.
  10. Autor dieses Themas

    computerkurs2011

    Kostenloser Webspace von computerkurs2011

    computerkurs2011 hat kostenlosen Webspace.

    Na dann, ist jetzt alles klar. Alle Fragen sind geklärt und der Beitrag kann geschlossen werden.

    Es ist jetzt klar das der Server den Script solange ausführt bis er fertig ist oder ein Fehler auftaucht. Und dabei interressiert es ihn nicht ob der Client noch da ist oder nicht. So das ist alles was ich wissen wollte.

    Dann nochmals vielen Dank an alle !

    MfG cpk2011
  11. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Komischerweise ist die Frage noch nicht richtig beantwortet worden…

    Zuerst mal etwas Lesestoff: *klick* und *klick*

    Wichtig wäre jetzt zu wissen, ob das auf lima-city laufen soll oder nicht, denn auf lima-city ist
    ignore_user_abort
    in der php.ini auf
    Off
    gesetzt und die entsprechende Funktion gesperrt.

    Was ebenfalls noch wichtig ist:
    PHP wird nicht herausfinden, ob ein User die Verbindung abgebrochen hat, bevor es nicht versucht, Informationen an den Client zu senden.


    hm4-blog schrieb:
    Dass mit echo() und der gleichen Daten versendet werden, ist Schwachsinn.
    Schau dir am besten die Struktur von HTTP-Verbindungen an.
    …warum?

    Wenn kein Puffer benutzt wird und in PHP eine echo-Anweisung ausgeführt wird, wird der auszugebende Text vom Webserver an den Client übertragen. Natürlich wird vor der 1. Ausgabe der HTTP-Header übertragen … den bekannten Programmierfehler, der bei der Nutzung der
    header()
    -Anweisung auftreten kann brauch ich ja wohl nicht extra zu erwähnen.

    autobert schrieb:
    Wenn auf die Antwort keine Reaktion innerhalb einer bestimmten Zeit kommt wird die Verbindung abgebrochen. Dies geschieht aber auf einer anderen Ebene nämlich durch das http-Protokoll.
    Die Frage lautet: "Wie wird dieses Ereignis vom Webserver an PHP weitergegeben?"

    Beitrag zuletzt geändert: 27.1.2013 16:08:37 von hackyourlife
  12. h******g

    hackyourlife schrieb:
    hm4-blog schrieb:
    Dass mit echo() und der gleichen Daten versendet werden, ist Schwachsinn.
    Schau dir am besten die Struktur von HTTP-Verbindungen an.
    ?warum?

    Wenn kein Puffer benutzt wird und in PHP eine echo-Anweisung ausgeführt wird, wird der auszugebende Text vom Webserver an den Client übertragen. Natürlich wird vor der 1. Ausgabe der HTTP-Header übertragen ? den bekannten Programmierfehler, der bei der Nutzung der
    header()
    -Anweisung auftreten kann brauch ich ja wohl nicht extra zu erwähnen.

    Naja, genau genommen erzeugt echo() Quellcode - das muss nicht zwingend bedeuten, dass auch was verschickt wird. Bei ausgeschaltenem Puffer ist dies natürlich der Fall - ist ja die gleiche Situation wie nach flush() und ein Verbindungsabbruch kann über ignore_user_abort() erkannt werden.
  13. hm4-blog schrieb:

    Naja, genau genommen erzeugt echo() Quellcode - das muss nicht zwingend bedeuten, dass auch was verschickt wird. Bei ausgeschaltenem Puffer ist dies natürlich der Fall - ist ja die gleiche Situation wie nach flush() und ein Verbindungsabbruch kann über ignore_user_abort() erkannt werden.


    Aber auch erst an der Stelle, wo es im Script genutzt wird.

  14. Autor dieses Themas

    computerkurs2011

    Kostenloser Webspace von computerkurs2011

    computerkurs2011 hat kostenlosen Webspace.

    Vielen Dank hackyourlife, so wie es mir scheint hast du Ahnung von der Materie, daher möchte ich noch mal auf meine Frage zurückkommen, brauch ich ignore_user_abort() damit mein script nicht an der Stelle abbricht wo ich dem Nutzer eine Zwischenmeldung über den Registrationsstatus gebe oder brauche ich den Befehl nicht. Und nein das Script läuft nicht auf Lima-City, sondern vorerst auf XAMPP.

    MfG cpk2011
  15. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!