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

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

不言
Libérer: 2019-04-12 09:52:04
avant
3229 Les gens l'ont consulté

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 记录
        ],
    ];
Copier après la connexion

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);
        }
    }
Copier après la connexion

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));
    }
Copier après la connexion
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,
    ];
Copier après la connexion
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');
    }
Copier après la connexion
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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal