Maison  >  Article  >  cadre php  >  Introduction à la planification des tâches Laravel (avec code)

Introduction à la planification des tâches Laravel (avec code)

不言
不言avant
2019-04-12 09:52:043182parcourir

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 ;

  1. Dans le nouvel écouteur, enregistrez l'adresse IP de l'utilisateur à l'aide du type de données Set de Redis. Le code est le suivant
/**
     * 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 écrit

    Créer une nouvelle tâche
  1. et créer un nouveau php artisan make:command CountIpDay fichier app/Console/Commands/CountIpDay.php
  2. Définir la signature et Description
  3. protected $signature = 'countIp:day';protected $description = '统计每日访问 IP';Écrivez du code dans la méthode
  4. , vous pouvez également utiliser la méthode
  5. dans handle pour envoyer des e-mailskernel.phpemailOutputTo
/**
     * 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));
    }
Définir le calendrier des tâches

Modifier
  1. app/Console/Kernel.php$commands
Définir une tâche planifiée dans la méthode
/**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \App\Console\Commands\CountIpDay::class,
    ];
et l'exécution l'heure est tous les jours Une heure du matin
  1. scheduleEnfin, ajoutez une tâche planifiée sous Linux et exécutez-la toutes les minutes
  2. , comme suit
/**
     * 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer