Cet article vous apporte une introduction à la planification des tâches Laravel (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Introduction : J'ai déjà écrit sur l'utilisation de Linux pour effectuer des tâches planifiées. En fait, Laravel peut également effectuer des tâches planifiées. L'exigence est de compter le nombre d'adresses IP visitées quotidiennement. Bien qu'il y ait des données dans le tableau de données, à des fins de démonstration, créez de nouvelles statistiques d'écoute.
Enregistrer l'IP
Cet article présente l'implémentation de l'événement/auditeur et se développe sur cette base.
Enregistrez un nouvel écouteur et ajoutez CreateUserIpLog dans le fichier app/Providers/EventServiceProvider.php
/** * The event listener mappings for the application. * * @var array */ protected $listen = [ Registered::class => [ SendEmailVerificationNotification::class, ], 'App\Events\UserBrowse' => [ 'App\Listeners\CreateBrowseLog',// 用户访问记录 'App\Listeners\CreateUserIpLog',// 用户 IP 记录 ], ];
Une fois l'ajout terminé, exécutez php artisan event:generate
pour créer le fichier app/Listeners/CreateUserIpLog.php
;
/** * Handle the event. * 记录用户 IP * @param UserBrowse $event * @return void */ public function handle(UserBrowse $event) { $redis = Redis::connection('cache'); $redisKey = 'user_ip:' . Carbon::today()->format('Y-m-d'); $isExists = $redis->exists($redisKey); $redis->sadd($redisKey, $event->ip_addr); if (!$isExists) { // key 不存在,说明是当天第一次存储,设置过期时间三天 $redis->expire($redisKey, 259200); } }
Accès statistique
L'adresse IP de l'utilisateur est enregistrée ci-dessus, puis le code statistique est écritphp artisan make:command CountIpDay
fichier app/Console/Commands/CountIpDay.php
protected $signature = 'countIp:day';
protected $description = '统计每日访问 IP';
Écrivez du code dans la méthode handle
pour envoyer des e-mailskernel.php
emailOutputTo
/** * Execute the console command. * * @return mixed */ public function handle() { $redis = Redis::connection('cache'); $yesterday = Carbon::yesterday()->format('Y-m-d'); $redisKey = 'user_ip:' . $yesterday; $data = $yesterday . ' 访问 IP 总数为 ' . $redis->scard($redisKey); // 发送邮件 Mail::to(env('ADMIN_EMAIL'))->send(new SendSystemInfo($data)); }
Modifier
app/Console/Kernel.php
$commands
/** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ \App\Console\Commands\CountIpDay::class, ];
schedule
Enfin, ajoutez une tâche planifiée sous Linux et exécutez-la toutes les minutes/** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { $schedule->command('countIp:day')->dailyAt('1:00'); }
artisan schedule:run
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!