php实现定时器
PHP实现定时器的常见方法
使用sleep函数实现简单定时
通过sleep函数让脚本暂停执行指定秒数,适用于简单的定时任务。注意sleep期间会阻塞整个进程。
while (true) {
// 执行任务代码
echo "Task executed at " . date('Y-m-d H:i:s') . "\n";
// 暂停60秒
sleep(60);
}
使用ignore_user_abort和set_time_limit
结合ignore_user_abort和set_time_limit可以让脚本在后台持续运行,不受用户断开连接影响。
ignore_user_abort(true);
set_time_limit(0);
while (true) {
// 任务逻辑
file_put_contents('log.txt', date('Y-m-d H:i:s')."\n", FILE_APPEND);
sleep(300); // 5分钟执行一次
}
使用crontab调度PHP脚本
Linux系统下最可靠的定时任务方案,通过crontab配置定期执行PHP脚本。
# 编辑crontab
crontab -e
# 添加以下内容表示每分钟执行一次脚本
* * * * * /usr/bin/php /path/to/your/script.php
使用Swoole扩展的定时器
Swoole提供了高性能的毫秒级定时器,适合需要精确控制的场景。
$timer = Swoole\Timer::tick(1000, function () {
echo "This runs every second\n";
});
// 清除定时器
// Swoole\Timer::clear($timer);
使用ReactPHP的事件循环
ReactPHP提供了事件循环和定时器功能,适合异步编程场景。
$loop = React\EventLoop\Factory::create();
$loop->addPeriodicTimer(5, function () {
echo "This runs every 5 seconds\n";
});
$loop->run();
使用Laravel的任务调度
Laravel框架内置了强大的任务调度系统,通过Artisan命令实现。
// 在App\Console\Kernel中定义
protected function schedule(Schedule $schedule)
{
$schedule->call(function () {
// 任务逻辑
})->everyMinute();
}
注意事项
- 长时间运行的PHP脚本需注意内存泄漏问题
- Web环境下的定时器可能受限于最大执行时间
- 生产环境推荐使用crontab或专业任务队列系统
- Windows系统可使用任务计划程序替代crontab







