2016-08-09 10 views
0

私は以下のような状況があります。 ジョブのために開かれた苦情が48時間以内に完了しておらず、その苦情が完了せずに48時間に近づいている場合、期限前に(例えば1時間前に)バックエンドにポップアップまたは通知があるはずです。 私はcronジョブ(1時間ごとに実行)を行うことを考えています。私の問題はcronジョブで通知を行う方法です。 ご提案を歓迎いたします。は、cronジョブを使用してPHP Webで通知を表示できます

+1

どのようにあなたの質問 – Machavity

+0

あなたは「通知」によって何を意味するcronジョブのコードを追加することについてはどうですか?それらに電子メールを送信することを意味しますか?ページに何かを表示しますか? –

+0

いいえ、私はすでにメールとSMSを行っています。この場合、私はその仕事のサウンドと情報でバックエンドにポップアップを表示する必要があります。 –

答えて

2

cronジョブはページに接続してはいけません。それは逆でなければなりません:バックエンドページ自体を使用してジョブの完了を確認してください。これにはServer-Sent Events(SSE)を使用できます。プロセスは次のようになります。

バックエンドページ(Javascriptが)SSEチャンネルに加入し、PHPスクリプトはPHP job_checker.phpイベント

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); 
    ... 
}; 

を発したときにポップアップを表示しますジョブの完了をチェックし、設定された時間のためのループを実行することができます。

<?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(); 
    } 
} 

PHPスクリプトはWORを維持します王に300秒。イベントを検出すると、データを送信し、ブラウザはそれを取得します。 300秒後、スクリプトは終了します。ユーザーがまだ管理ページを開いている場合、ブラウザは自動的に再接続します。ユーザーがページを閉じた場合、リソースは解放されます。

もっとdocs from Mozilla:(リンクのAlokパテルのおかげで)

+0

この方法で考えられる問題は、通知を表示するには、ユーザーがログインする必要があることです。それが48時間制限を過ぎて何かを削除する何らかのタイプの手続きがある場合は、何を推測しますか?誰かが非常に幸せなキャンピングカーではない;-) –

+0

@ Fred-ii-これだけで期限切れの締め切りをすべて捕まえないのは正しいです。私がOPを正しく読んだら、彼はすでに電子メールとSMSのジョブを期限切れにしていますが、管理者がバックページをブラウズしている間はUIポップアップが必要です。そのためには、私は何かが欠落していない限りこれを行うでしょう。 – BeetleJuice

+0

ah ok。さて、OPはあなたのコードを試してください、そして、それが彼らのために働くならば、答えを受け入れます。走らなきゃ! ;-) –

関連する問題