在项目中我们经常遇到实时更新商品库存,一般解决方案是通过软件或服务器来定时执行任务。本文的DEMO中每隔60秒执行/Home/Index/crons。
程序员,你不是一个人;网站开发QQ群:136483411 在线充值,或联系QQ 304534221直接充值
官方的ThinkPHP/Library/Behavior/CronRunBehavior.class.php有bug,现已修改
<?php namespace Behavior; class CronRunBehavior { public function run(&$params) { if (C('CRON_CONFIG_ON')) { $this->checkTime(); } } private function checkTime() { if (F('CRON_CONFIG')) { $crons = F('CRON_CONFIG'); } else if (C('CRON_CONFIG')) { $crons = C('CRON_CONFIG'); } if (!empty($crons) && is_array($crons)) { $update = false; $log = array(); foreach ($crons as $key => $cron) { if (empty($cron[2]) || $_SERVER['REQUEST_TIME'] > $cron[2]) { G('cronStart'); R($cron[0]); G('cronEnd'); $_useTime = G('cronStart', 'cronEnd', 6); $cron[2] = $_SERVER['REQUEST_TIME'] + $cron[1]; $crons[$key] = $cron; $log[] = 'Cron:' . $key . ' Runat ' . date('Y-m-d H:i:s') . ' Use ' . $_useTime . ' s ' . "\r\n"; $update = true; } } if ($update) { \Think\Log::write(implode('', $log)); F('CRON_CONFIG', $crons); } } } }
评论(0)