Heim  >  Artikel  >  PHP-Framework  >  Einführung in die Laravel-Aufgabenplanung (mit Code)

Einführung in die Laravel-Aufgabenplanung (mit Code)

不言
不言nach vorne
2019-04-12 09:52:043114Durchsuche

Dieser Artikel bietet Ihnen eine Einführung in die Laravel-Aufgabenplanung (mit Code). Ich hoffe, dass er für Freunde in Not hilfreich ist.

Einführung: Ich habe bereits über die Verwendung von Linux zum Ausführen geplanter Aufgaben geschrieben. Tatsächlich kann Laravel auch geplante Aufgaben ausführen. Die Anforderung besteht darin, die Anzahl der täglich besuchten IPs zu zählen. Obwohl die Datentabelle Daten enthält, erstellen Sie zu Demonstrationszwecken eine neue Listener-Statistik.

IP aufzeichnen

Dieser Artikel stellt die Implementierung von Event/Listener vor und erweitert diese auf dieser Basis.

Registrieren Sie einen neuen Listener und fügen Sie CreateUserIpLog in der Datei app/Providers/EventServiceProvider.php hinzu

/**
     * 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 记录
        ],
    ];

Nachdem das Hinzufügen abgeschlossen ist, führen Sie php artisan event:generate aus, um die Datei app/Listeners/CreateUserIpLog.php zu erstellen;

  1. Zeichnen Sie im neuen Listener die IP des Benutzers mit dem Set-Datentyp von Redis auf. Der Code lautet wie folgt
/**
     * 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);
        }
    }

Statistischer Zugriff

Das obige wird Die IP des Benutzers wird aufgezeichnet und dann wird der statistische Code geschrieben

  1. Neue Aufgabe erstellenphp artisan make:command CountIpDay und eine neue app/Console/Commands/CountIpDay.phpDatei erstellen
  2. Signatur festlegen protected $signature = 'countIp:day'; und Beschreibung protected $description = '统计每日访问 IP';
  3. Schreiben Sie Code in der handle-Methode, oder Sie können die kernel.php-Methode in emailOutputTo verwenden, um E-Mails zu senden
/**
     * 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));
    }

Aufgabe festlegen Planung

  1. Bearbeiten Sie app/Console/Kernel.phps $commands
/**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \App\Console\Commands\CountIpDay::class,
    ];
  1. und legen Sie eine geplante Aufgabe in der schedule-Methode mit der Ausführung fest vorerst jeden Tag um 1 Uhr morgens
/**
     * 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');
    }
hat endlich eine geplante Aufgabe in Linux hinzugefügt und jede Minute ausgeführt artisan schedule:run, wie folgt
* * * * * /you_php  you_path/artisan schedule:run >> /dev/null 2>&1

Das obige ist der detaillierte Inhalt vonEinführung in die Laravel-Aufgabenplanung (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen