2016-04-30 8 views
-1

バックグラウンドで約1日待ってから別のものを実行する機能。PHP関数を数日間遅延させる方法はありますか?

のように:このような

function Sleep(){ 
    sleep(/* One Day */); 
    Run(); 
} 
function Run(){ 
    //One Day later, 
    //execute code. 
} 

それともmaby何か(これは架空のものです):

class Waiter extends Timer{ 
    $time = 0; 
    function __construct($time){ 
     $this->time = $time; 
    } 
    function onDelay(){ 
     //One day Later. 
    } 
} 
$wait = new Waiter(/* One Day */); 

は良い解決策はありますか?

また、sleep()関数もokeyですか? しかし、実行のタイムアウトは30秒だと言わざるを得ない。

+7

なぜcronジョブを使用しませんか? –

+0

コンテキストとは何ですか?ウェブページ ? PHP CLIで書かれたサービス? – Mat

+0

ほとんどの場合、Cronが最適です。 – Brian

答えて

0

あなたが言ったように、実行時間は30秒で、全体的なスクリプトが30秒後に終了を余儀なくされます。それはもっと長く待つことはできません。

既に提案したように、cronジョブを使用できます。

あなたの問題は定期的に再発されていない場合は、関数は、ファイル(またはデータベース)に実行する必要がある場合(日付で)時間を書き込み、小さなスクリプトを書くことができます。関数がcronジョブを使用して

0

を実行する必要がある場合、その後、毎時間(またはその重要な場合には、毎分)とチェックを実行しますcronがあなたの問題の正しい解決策です。何らかの理由でそれを使用できない場合は、ignore_user_abort(1)set_time_limit(0);をPHPスクリプトで使用してください。


int ignore_user_abort ([ bool $value ]) 

コマンドラインスクリプトとしてPHPを実行すると、スクリプトのTTYが値がない限り、スクリプトは、スクリプトは、それが何かを書き込もうと 次の時間が死んでしまう終端されずに 消えますTRUE

秒数スクリプトを設定し
bool set_time_limit (int $seconds) 

に設定されています実行が許可されます。これが に達すると、スクリプトは致命的なエラーを返します。デフォルトの制限は30 秒です。存在する場合は、 php.iniに定義されているmax_execution_timeの値です。

呼び出された場合、は、set_time_limit()はゼロからタイムアウトカウンタを再開する。スクリプトの実行に言い換える 、タイムアウトは、デフォルトは30秒であり、25 秒の場合、そのようなは、set_time_limit(20)のような呼び出しが とする、スクリプトがタイムアウトする前に45秒の合計で実行されます。

0

Cronsは言及されていますが、2番目のオプションがあります - キューイング。

https://en.wikipedia.org/wiki/Message_queue

あなたがアマゾンSQSまたはIronMQのようなクラウドでホストされているものに豆の木やRabbitMQのように自分でインストールしたものから入手キューソフトウェアの多種多様な、あります。

関連する問題