PHPのスケジュールされたタスク

巴扎黑
リリース: 2016-11-23 11:23:41
オリジナル
1056 人が閲覧しました

PHP は、Java や .Net などの AppServer の概念を持たない実装になっており、PHP はユーザーによってのみトリガーされ、自動的にメモリから抜け出します。呼び出し後、常駐メモリがなければ、正確なタイミング処理を行うことはできません。


PHP を使用して特定のタスクを定期的に実行する必要がある場合は、次の方法があります:
1. Linux では Crontab、Windows ではスケジュールされたタスク
2. set_time_limit(0);
ignore_user_abort(true);
無限ループ

最初のタイプ: crontab によって定期的に実行される PHP ファイル 通常、各タスクの名前、現在のプロセス ID、更新時刻、プロセス開始 ID などの情報を記録するテーブルが必要です。バッチ処理プロセスには、実行前の準備、実行、および実行後の処理が含まれます。処理プロセス全体では、OO アイデアを使用してバッチ処理基本クラスをカプセル化でき、各バッチ処理タスクはこの基本クラスを継承してデータ処理を実装できます。

2 番目のタイプ: このファイルにアクセスすることで実行をトリガーする場合、Apache サーバーの再起動またはマシンの再起動 (Windows 環境) 後に終了するという問題があります。例は次のとおりです。

ignore_user_abort(true);  // 设置关闭浏览器后也可执行
set_time_limit(0);  // 设置相应时间无限制,原默认30s
function write_txt()
{
$filename = 'test.txt';
if (!file_exists($filename))
{
$fp = fopen($filename, 'w');
fclose($fp);
}
$fp = fopen($filename, 'r+');
$str = file_get_contents($filename);
$str .= date('Y-m-d H:i:s')."\r\n";
fwrite($fp, $str);
fclose($fp);
}
function do_cron()
{
write_txt();
sleep(30);
}
while (1)
{
do_cron();
}
ログイン後にコピー

connection_aborted() — クライアントが切断されているかどうかを確認し、1 を返します。そうでない場合は 0 を返します。
connection_status — 接続のステータス ビットを返します。 0 - NORMAL (正常) 1 - ABORTED (異常終了)。 ); 2 - タイムアウト

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート