現在、スケジュールされたタスクは、 Mipu ブログでの記事の定期的な公開、スパム メッセージの定期的なクリーンアップ、電子メールの定期的な送信、 Mipu エージェントによるテキスト メッセージのリマインダーの送信など、Web サイトの必須要件です。
現在の Web サイトのほとんどは PHP 動的言語を使用して開発されています。PHP には Java や .Net などの AppServer の概念はなく、http プロトコルはステートレス プロトコルです。PHP はユーザーによってトリガーされて呼び出されるだけで、自動的に実行されます。常駐メモリがなければ、接続が長いスケジュールされたタスクを実装することは一般に不可能です。
では、PHP でスケジュールされたタスクを実装する必要がある場合、どのような方法があるのでしょうか? Mipu Blog のこの記事には、いくつかの解決策がまとめられています。
1.単純・直接・無謀タイプ
<?php
ignore\_user\_abort(); // 关掉浏览器,PHP脚本也可以继续执行.
set\_time\_limit(0); // 通过set\_time\_limit(0)可以让程序无限制的执行下去
ini\_set('memory\_limit','1024M'); // 设置内存限制
$interval = 60\*30; // 每隔半小时运行
do{
// ToDo mimvp task
sleep($interval); // 等待5分钟
}
while(true);
?>
**欠点:** 一度起動すると、PHP ホストを終了しない限り制御できないため、ハッカーでない限り、この方法は通常お勧めできません。
2. シンプルで制御可能
<?php
return 1;
?>
cron.php
ignore\_user\_abort(); // 关掉浏览器,PHP脚本也可以继续执行.
set\_time\_limit(0); // 通过set\_time\_limit(0)可以让程序无限制的执行下去
$interval = 60\*30; // 每隔半小时运行
do{
$run \= include 'config.php'; // 通过配置文件,来实现停止程序
if(!$run) die('process abort');
//ToDo mimvp task
sleep($interval); // 等待5分钟
}
while(true);
config.php を変更してプログラムを停止するにはreturn 0 ,
、 config.php ファイルと特別なフォームを操作し、構成用の HTML ページを通じていくつかの変数を設定することが考えられます。
**短所:** システムリソースを占有し、長時間実行すると予期せぬ危険が潜む可能性があります。たとえば、メモリ管理、誰かが悪意を持って設定ファイルを変更した場合などです。
3. 簡易改良型
<?php
$time \= 15;
$url \= "http://".$\_SERVER\['HTTP\_HOST'\].$\_SERVER\['REQUEST\_URI'\];
// ToDo mimvp task
sleep($time);
file\_get\_contents($url);
?>
php スクリプトはしばらくスリープし、駅伝のように自身にアクセスして実行を続けます。
これにより、各 PHP スクリプトの実行時間が長くなりすぎず、制限がなくなりますtime_out
。
php ファイルの各サイクルは独立して実行されるため、この方法ではtime_out
制限は回避されますが、プロセスを終了できるように、上記のように制御コード cofig.php を追加することをお勧めします。
4. 自分で整理する
ignore\_user\_abort();
//即使Client断开(如关掉浏览器),PHP脚本也可以继续执行.
set\_time\_limit(0);
//执行时间为无限制,php默认的执行时间是30秒,通过set\_time\_limit(0)可以让程序无限制的执行下去
$time = 15;
$url \= "http://".$\_SERVER\['HTTP\_HOST'\].$\_SERVER\['REQUEST\_URI'\];
// ToDo mimvp task
sleep($time);
file\_get\_contents($url);
この記事はhttps://www.cnblogs.com/Im-Victor/p/15901857.htmlからの転載です。権利侵害がある場合は、削除のためにご連絡ください。