2016-11-25 3 views
1

私はここでPHPで "poor man's cron"を使用するには?

(誰が誰が行うまで、それが実行されないページを訪れていない場合)のみ、10分ごとに私のPHPスクリプトを実行するために「貧乏人のはcron」を実装しようとしているが、私が持っているものです。

$current_time = time(); 

if($current_time >= $last_run + (60 * 10)) { 
    echo 'foo'; 
    $last_run = time(); 
} else { 
    echo 'bar'; 
} 

「foo」は一度画面に表示され、ページを更新すると「bar」が表示されます。 10分後にページをリフレッシュする場合は、もう一度「foo」にしてからもう一度10分経過するまで「bar」にしてください。

現在、「foo」は常に表示されます。

+1

HTTP要求のタイムアウトは約30秒です。定期的にページをリフレッシュしたい場合は、クライアント側で行います(javascriptまたは '

答えて

2

変数は、実行終了後に値を保持しません。 PHPスクリプトが終了すると、すべてのメモリがクリアされます。つまり、次回スクリプトが実行されたときに、PHPは何を知りません。$last_runです。おそらくファイルシステムまたはデータベースを使用してを何とか保存する必要があります。ファイルシステムを使用して

、あなたができる:

$last_run = file_get_contents('lastrun.txt'); 
if (!$last_run || $current_time >= $last_run + (60 * 10)) { 
    echo 'foo'; 
    file_put_contents('lastrun.txt', time()); 
} else { 
    echo 'bar'; 
} 
+2

これはトリックでした!値を変数に直接格納しようとしましたが、PHPを長時間使っていないので、これを答えとして受け入れるまで5分待つ必要があります。ありがとうございました – user1589375

1

これはPHPがどのように動作するか、残念ながらありません。 PHPは、Webサーバーにアクセスすると新しいプロセスを開始し、その後に終了します。しかし、PHPは、タスクのこれらの種類のために設計されていない、そしてこのスクリプトは、最も可能性の高い、最大実行時間のいずれかのために遅かれ早かれ死んでしまう、メモリ制限

while (true) { 
    // Check if we should do anything, or just keep spinning 
} 

:あなたは次のようなものを使用して、永遠に実行するスクリプトが必要になりますまたは、他の何か。

機能的な "poor mans cronjob"では、現在のタイムスタンプを確認し、最後の訪問以降に何をしてから続行する必要があります。これは、cronジョブを実行しているという錯覚を「偽造」します。

+1

'while(true)'サーバをオーバーロードせずに500のエラーコードを返すのですか? –

+0

@AniketSahrawatこのループでは、何らかの睡眠や何かが必要になる可能性が非常に高いです。適切なphp設定で 'while(true)'を作成すると動作しますが、スクリプトはしばらく後に終了します。 – OptimusCrime

関連する問題