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

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

不言
Freigeben: 2019-04-12 09:52:04
nach vorne
3229 Leute haben es durchsucht

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 记录
        ],
    ];
Nach dem Login kopieren

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);
        }
    }
Nach dem Login kopieren

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));
    }
Nach dem Login kopieren

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,
    ];
Nach dem Login kopieren
  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');
    }
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage