PHP Script verzögert ausführen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
-
Hallo Leute,
ich benötige wieder eure Hilfe.
Undzwar, möchte ich gerne das eine Datei aufgerufen wird ganz normal im Browser.
Die Seite soll bereits angezeigt werden und nach ein paar sekunden soll ein datenbank eintrag erfolgen.
Seit Stunden bin ich am suchen nach der Lösung aber ich finde leider nichts.
Sleep(); hatte ich schon versucht aber da lädt die seite im Chrome erst wenn die arbeiten beim php durch sind.
Ich hoffe ihr könnt mir helfen.
LG Julien -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das könnte sich doch mit JS lösen lassen.
-
horstexplorer schrieb:
Das könnte sich doch mit JS lösen lassen.
Jein. Mit JS bekommst du keinen direkten Zugriff auf den Server.
Mit AJAX kann man aber einen Request an ein PHP-Script absetzen.
etwa innerhalb eines JS-Scripts mit z. B. timeout() Funktion:
// nur grob schematisch: var xmlhttp = new XMLHttpRequest(),myJSON=JSON.stringify(irgend welche daten); xmlhttp.open("POST","da-sollen-die-daten-hin.php",true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded",'Cache-Control', 'no-cache'); xmlhttp.send("request="+myJSON); -------------------------------------------------------------------------------------- da-sollen-die-daten-hin.php <? $obj = json_decode($_POST["request"], false); // schreib irgendetwas in die db ?>
lg,
timebandit -
Inhalt oder Funktion eines Projektes von der eventuellen Ausführung von JavaScript abhängig zu machen, ist immer unzuverlässig, nicht barrierefrei, schlechter Stil.
Es kommt ja höchstwahrscheinlich nicht darauf an, das Skript verzögert auszuführen, lediglich darauf, daß Änderungen erst verzögert gelten sollen.
Wenn Werte verzögert gelten sollen, bietet es sich an, die neuen Werte mit einer konkreten Zeit zu verknüpfen, ab wann sie gelten sollen.
Wird ein solcher Wert hernach wirklich nachgefragt, wird eben geguckt, ob die Zeit für den neuen Wert bereits gekommen ist.
Dabei ist allerdings eine Regel zu erstellen, was gelten soll, wenn ein Wert neu gesetzt wird, bevor der zuvor gesetzte Wert überhaupt gültig geworden ist. -
Es kommt ja höchstwahrscheinlich nicht darauf an, das Skript verzögert auszuführen, lediglich darauf, daß Änderungen erst verzögert gelten sollen.
Ohne die eigentliche Verwendung zu kennen ist sowas nicht wirklich nützlich, besonders nicht in einem Kontext der eher nicht eine Unterbrechung der Aktion vermitteln kann um die Daten zu invalidieren.
Möchte er z. Bsp feststellen das ein Nutzer länger als x Sekunden auf dieser Seite war nützt es ihm nichts zu wissen wann die Seite geöffnet wurde und ob schon x Sekunden vergangen sind da der Nutzer einfach die Seite verlassen haben kann ohne das du dies an deinen Daten sehen würdest.
Daten im Browser nachzuladen ohne die komplette Seite zu aktualisieren ist nicht wirklich gut möglich, da bleibt nur eine Lösung die bei vielen Leuten läuft aber möglicherweise nicht bei allen. -
Auch bei dem Beispiel kommt es ja erst drauf an, die Daten zu aktualisieren, wenn sie erneut abgerufen werden sollen.
Es ist ähnlich wie Schrödingers Katze, solange niemand in die Kiste guckt, ist der Zustand nicht festgelegt ;o)
In dem Falle wäre der nächste Versuch, Daten abzurufen der Zeitpunkt, an dem der Zustand der Daten festgelegt werden muß, also entweder noch gültig oder nicht.
Bei einer vorhandenen Zeitinformation ist dies ja kein Problem.
Bei Sitzungen allgemein ist ja nur schwer zu entscheiden, ob sich jemand noch Informationen ansieht oder nicht - bei längeren Texten kommt es ja ebenso zu längeren Lesezeiten, welche keine Interaktion erfordern.
Auf wenn Leute mehrere Dinge nebeneinander erledigen, kann es längere Zeit bei einem Projekt keine Interaktion geben, obgleich die Seite noch dargestellt wird.
Ist dann bloß nervig, wenn man sich wieder alles neu einrichten muß, weil ein Skript auf dem Dienstrechner fälschlich zu dem Schluß gekommen ist, man habe kein Interesse mehr an weiterer Interaktion ;o) -
[url]
Auch bei dem Beispiel kommt es ja erst drauf an, die Daten zu aktualisieren, wenn sie erneut abgerufen werden sollen.
...
In dem Falle wäre der nächste Versuch, Daten abzurufen der Zeitpunkt, an dem der Zustand der Daten festgelegt werden muß, also entweder noch gültig oder nicht.
[/url]
Ich hätte das eher so gedacht wie - Nutzer ruft eine Seite auf - ich möchte wissen ob dieser Nutzer die Seite länger als x Sekunden offen hat (wie Aussagekräftig das auch immer sein mag)
Es würde sich natürlich mehr anbieten die Zeit zwischen zwei Seitenaufrufen zu tracken, man hat somit Start und Ende durch eine Aktion bestätigt, aber das ist bei z.Bsp nur bei einer Seite nicht so wirklich möglich.
Entweder man hätte da einen Anfangswert aber kein Ende oder müsse den Zugriff noch irgendwie zeitverzögert bestätigen. (wo wir wieder beim laden von weiteren Informationen wären)
Das ganze kombiniert ist vermutlich keine schlechte Lösung um besser abschätzen zu können welche Inhalte auf seiner Seite relevant bzw weniger relevant sind (besonders in Kombination mit einer Suchfunktion), aber was der TE damit aber genau bezwecken möchte weiß nur er selbst :) -
Wenn für die jeweilige Sitzung die Zugriffszeit (Unix-Zeit oder dergleichen) in einer Datei oder einer Datenbank (unzuverlässiger in einen Keks) eingetragen ist, ruft man diesen Eintrag beim nächsten Aufruf natürlich erst auf, bevor er mit der aktuellen Zeit als neuer Zugriffszeit überschrieben wird, so kann man doch einfach die vorherige, gespeicherte Zeit mit der aktuellen vergleichen, wenn man die Dauer der Inaktivität messen will.
Für die Statistik wäre das eventuell für jede Projektseite einzeln zu speichern, je nachdem, was man genau wissen will.
Mit JavaScript/Ajax kann man natürlich alle paar Sekunden eine Anfrage an den Dienstrechner schicken, wenn man Leute ernsthaft überwachen will (auf Kosten hoher Last auf dem Dienstrechner für minimale Information), was aber auch einer der Gründe ist, warum einige Leute Skriptinterpretation lediglich auf Seiten aktivieren, denen sie wirklich vertrauen ;o)
Prinzipiell, sofern man vollen Zugriff auf den Dienstrechner hat, kann man natürlich auch verzögert ein Skript starten, entweder man startet dafür per PHP einen cron-job oder aber
(nicht getestet) man startet mit PHP per exec nohup mit einem entsprechenden shell-Skript.
Auch sonst lassen sich auf dem Rechner sicherlich Dienste installieren, welche man per exec zu einer Aktion zu einem bestimmten Zeitpunkt veranlassen kann.
Der Administrator wird derlei aber in der Praxis nicht mögen, sofern man es nicht selber ist und der Dienstrechner als 'Honigtopf' gedacht ist (reichlich Sicherheitslücken, um dubiose Leute anzulocken, um deren Angriffe zu beobachten ;o)
Selbst bei PHP kann man vielleicht auf der sicheren Seite etwas tricksen, sofern die ersehnte Zeitspanne unterhalb der erlaubten Verarbeitungszeit liegt, denn es gibt ja auch ein Kommando flush, mit dem man den Ausgabepuffer schon einmal senden kann (auch nicht selbst für den Zweck getestet, könnte man aber mal probieren, ob dabei auffällt, wenn man nach dem flush das Skript ein paar Sekunden schlafen läßt, bevor Kommandos ohne Ausgabe folgen, danach erst das Skript beendet wird). Der Brauser auf der anderen Seite wird allerdings trotzdem noch warten, ob noch etwas kommt, nicht jedoch notwendig mit der Präsentation des bereits gesendeten Inhalts.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage