2016-08-09 8 views
0

Ich habe folgendes Szenario anzuzeigen. Wenn eine offene Reklamation nicht innerhalb von 48 Stunden abgeschlossen wird und sich diese Reklamation 48 Stunden ohne Abschluss nähert, sollte das Popup oder die Benachrichtigung im Backend vor dem Zeitlimit (etwa 1 Stunde vorher) vorliegen. Ich denke Cron-Job (jede Stunde) zu tun. Mein Problem ist, wie die Benachrichtigung in Cron-Job zu tun. Jeder Vorschlag ist willkommen.kann Cron Job verwendet werden, um Benachrichtigung in PHP-Web

+1

Wie über den Cron-Job-Code in Ihre Frage Hinzufügen – Machavity

+0

was meinst du mit "Anmeldung"? meinst du, schicke ihnen eine email? Etwas auf einer Seite anzeigen? –

+0

Nein, ich habe bereits Emails und SMS gemacht. In diesem Fall muss ich ein Popup im Backend mit Sound und Infos des Jobs anzeigen. –

Antwort

2

Der Cron-Job sollte keine Verbindung zu den Seiten herstellen. Es sollte umgekehrt sein: Verwenden Sie die Back-End-Seiten selbst, um nach Abschluss des Jobs zu suchen. Sie können dazu Server-Sent Events (SSE) verwenden. Der Prozess wäre:

Backend Seiten (Javascript) zu einem SSE Kanal abonnieren und ein Popup angezeigt, wenn der PHP-Skript ein Ereignis

var source = new EventSource("job_checker.php"); 
source.onmessage = function(event) { 
    //event contains the job info and deadline. you can display it 
    var jobDetails = JSON.parse(event); 
    ... 
}; 

Die PHP job_checker.php emittiert kann für eine bestimmte Zeit eine Schleife durchlaufen und nach dem Abschluss des Jobs suchen:

<?php 
$time_limit = 300; //300 seconds 
$time_spent = 0; 
while($time_spent < $time_limit){ 
    sleep(30); //sleep for 30 seconds 
    $time_spent += 30; 
    //check DB for job completion and deadline. 
    //if you find a job, emit an SSE to the browser 
    if($event_found){ 
     header('Content-Type: text/event-stream'); 
     header('Cache-Control: no-cache'); 
     echo "data: ". json_encode($event_found)."\n\n"; 
     flush(); 
    } 
} 

Das PHP-Skript wird weiterhin funktionieren König für 300 Sekunden. Wenn es ein Ereignis findet, gibt es Daten aus und der Browser wird es bekommen. Nach 300 Sekunden wird das Skript beendet. Wenn der Benutzer die Admin-Seite weiterhin geöffnet hat, wird der Browser automatisch eine Verbindung herstellen. Wenn der Benutzer die Seite geschlossen hat, werden die Ressourcen freigegeben.

Mehr docs from Mozilla: (dank Alok Patel für den Link)

+0

Ein mögliches Problem mit dieser Methode besteht darin, dass ein Benutzer angemeldet sein muss, um die Benachrichtigung zu sehen. Wenn und wenn es ihre 48 Stunden Grenze überschreitet und sie irgendeine Art von Prozedur haben, die etwas löscht, dann raten Sie was? Jemand steht da, dass er kein sehr glücklicher Camper ist ;-) –

+0

@ Fred-ii- Du hast Recht, dass dies nicht alle auslaufenden Deadlines einfangen wird. Wenn ich das OP richtig lese, sende er bereits E-Mails und SMS aus, aber es brauche ein UI-Popup, während die Admins die Rückseiten durchsuchen. Dafür würde es genügen, wenn ich nicht etwas verpasse. – BeetleJuice

+0

ah ok. Nun, das OP sollte Ihren Code ausprobieren und wenn es für sie funktioniert, akzeptieren Sie die Antwort. Muss laufen! ;-) –