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 - タイムアウト