PHP Function alle X Sekunden wiederholen?

4 Antworten

Es kommt ganz darauf an was du machen willst. Soll etwas auf der Seite passieren braucht du wie geschrieben Ajax. Wenn nur auf dem Server etwas passieren soll nutzt du ein PHP Script dass z.B. über einen Cron Job aufgerufen wird. Einen sinnvollen Einsatzbereich für "sleep" kenne ich nicht.

Ja, kann man z. B. mit einer do-while-Schleife und einem sleep machen (wenn du keine Ausgabe im Browser oder auf der Konsole brauchst) oder eben mit JavaScript und Ajax. Wo genau hapert es denn da? Gibt doch etliche Tutorials die das ziemlich genau beschreiben.

RaceShafter 
Fragesteller
 21.12.2016, 11:11
do{

function();
sleep(10);
}while(true)

Hier zum Beispiel. Er soll dann alle 10 Sekunden die Function ausführen. Stattdessen lädt die Seite erst gar nicht.

0
happyfish2  21.12.2016, 11:24
@RaceShafter

Das sind zwei verschiedene Paar Schuhe. Woher weißt du dass die Funktion nicht ausgeführt wird? An den Browser wird die Seite erst geschickt, wenn das komplette Script abgearbeitet ist (in dem Fall durch die Endlosschleife also nie).

2
RaceShafter 
Fragesteller
 21.12.2016, 11:32
@happyfish2

Wie kann ich das dann machen? Wenn die Schleife abgearbeitet ist, dann wird die Seite zwar angezeigt, aber dann läuft die Schleife nicht mehr. Und die soll die Funktion nur alle 10 Sekunden einmal abrufen. Daten aus einer Datenbank lesen.

0
areaDELme  21.12.2016, 11:59
@RaceShafter

mach es mit ajax!
hier ist das prinzip recht einfach erklärt:
http://www.html-seminar.de/ajax-einfuehrung.htm
du willst ja nicht jedes mal wieder die ganze seite neu laden, also musst du geziehlt nur das abfragen was du haben möchtest und dann die antwort in die bereits geladene seite einpflegen.
du würdest als js-funktion eine funktion bauen die sobald die seite geladen ist in einem intervall immer wieder die gleiche anfrage als ajax-request an der server schickt und dieser immer die aktuelle datenbankabfrage zurück gibt.
um mit javascript die antwort gut einbinden zu können, empfiehlt es sich ja nach abfrage das ganze im JSON format zurück zu schicken, da du dann einfach damit arbeiten kannst.
dazu findest du aber sicherlich gute beispiele.

0

PHP sendet die Ausgabe an den Browser erst, wenn das Script durchgelaufen ist. Bei einer Endlosschleife passiert das nie, es wird also gewartet bis das Script fertig ist, also baut sich im Browser solange keine Seite auf.

Wenn etwas ständig ausgeführt werden soll oder besser gesagt ein Script alle x Intervalle ablaufen soll und dabei keine Ausgabe an irgendeinen Browser gehen soll, wäre eine Lösung mit Cronjobs sinnvoll.

Wenn Du im Browser alle x Sekunden etwas neues von deinem PHP Script sehen willst, ist JS+AJAX das ideale, weil dein PHP Script genau alle x Sekunden einmal gestartet wird und das Ergebnis im Hintergrund an deine JS Funktion übergeben wird.

Dadurch kannst du den Inhalt eines zb. div Element aktualisieren. Wie das genau geht, gibt es etliches im Youtube und bei Google oder hier auf GF.

<script type="text/javascript" src="ajax.js">
<script type="text/javascript">
function StartRequest(){
xmlHttp.open("GET","die_seite.php?ajax=true",false);
xmlHttp.send(null);
var answer;
answer = xmlHttp.responseText;
document.getElementById("gettext").innerHTML = answer;
}
</script>
<p><input type="button" value="Text laden.." onClick="StartRequest();">
<div id="gettext"></div>

ajax.js:

var xmlHttp = null;

try {
xmlHttp = new XMLHttpRequest();
} catch(e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e){
xmlHttp = null;
}
}
}

Wenn du es alle x Sekunden haben willst brauchst du nur eine Timeout Funktion zu machen, aber dazu habe ich leider kein fertiges Beispiel.

Woher ich das weiß:Hobby – Ich bin älter als das Internet.

Ich würde eher sagen wenns vom client aufgerufen werden soll das du per ajax tatsächlich in nem interval die seite aufrufst.. kannst ja mal nach xmlhttprequest googlen wenn du keine riesige js lib willst was du eigentlich auch dafür nicht brauchst