Laravel 实践 – 访问跟踪 pragmarx/tracker

https://github.com/antonioribeiro/tracker

依赖的包:

    "require": {
        "php": ">=5.3.7",
        "doctrine/dbal": "^2.6",
        "laravel/framework": "~4|~5",
        "pragmarx/support": "~0.6|~0.7",
        "ramsey/uuid": "~3",
        "jenssegers/agent": "~2.1",
        "ua-parser/uap-php" : "~3.4",
        "pragmarx/datatables": "1.4.11",
        "snowplow/referer-parser": "~0.1",
        "jaybizzle/crawler-detect": "~1.0",
        "psr/log": "~1.0"
    },

这个包只针对Laravel应用。依赖jaybizzle/crawler-detect来进行机器人检查。

安装使用:

composer require pragmarx/tracker

// Laravel5.5以下需要
vi app/config/app.php
PragmaRX\Tracker\Vendor\Laravel\ServiceProvider::class,

vi app/config/app.php
'Tracker' => 'PragmaRX\Tracker\Vendor\Laravel\Facade',

// 发布(产生config/chacker.php文件和对应的数据库迁移文件)
php artisan vendor:publish --provider=PragmaRX\\Tracker\\Vendor\\Laravel\\ServiceProvider

// 启用中间件(在web组添加)
vi app/Http/Kernel.php
\PragmaRX\Tracker\Vendor\Laravel\Middlewares\Tracker::class,

// 修改配置文件,启动该插件,并启用中间件
vi config/tracker.php
'enabled' => true,

'use_middleware' => true,

// 继续编辑配置件,启动一个新的mysql链接(链接到相同库,原因可以查看配置中的说明)
// 名称可以不叫tracker,需要到config/tracker.php中做对应修改
vi config/database.php
'tracker' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],

// 运行迁移,产生数据表
php artisan migrate --database=tracker

// 如果需要跟踪地理位置,需要安装额外依赖包(注意这个包和PHP的geoip扩展冲突)
composer require "geoip2/geoip2":"~2.0"

// 然后运行以下文件产生IP数据库(config/geoip),文件几十兆,不需要提交版本库
php artisan tracker:updategeoip

// 然后修改配置,让其记录geoip
vi config/tracker.php

'log_geoip' => true,

基本配置就完成了。这里需要配置中间件的主要原因是让Laravel可以自动调用chacker来进行记录。提供了一个Facade: Tracker,可以方便的取回数据,或者手动记录:

$visitor = Tracker::currentSession();
var_dump( $visitor->client_ip );

var_dump( $visitor->device->is_mobile );

var_dump( $visitor->device->platform );

var_dump( $visitor->geoIp->city );

var_dump( $visitor->language->preference );

数据结构:

流程描述:

Web工具:
这个包还提供了一个基于Bootstrap的Web管理程序,可以查看相对应的信息:

git clone https://github.com/BlackrockDigital/startbootstrap-sb-admin-2.git public/templates/sb-admin-2
cd public/templates/sb-admin-2
git checkout tags/v3.3.7+1
git checkout -b v3.3.7+1

首先克隆一个管理面板,Web管理程序调用了这个模板里面的样式JS等。对应的路径实际是配置中指定的:

vi config/chacker.php
    /*
     * Enable the Stats Panel?
     */
    'stats_panel_enabled' => true,

    /*
     * Stats Panel routes middleware
     *
     */
    'stats_routes_middleware' => 'web',

    /*
     * Stats Panel template path
     */
    'stats_template_path' => '/tracker/tracker-admin',

这里把下载的模板改名为tracker/tracker-admin。

然后通过方法/stats就可以访问改Web程序,不过会提示要授权,需要在对应的用户表中,添加一个is_admin字段,然后标识某个用户的is_admin字段为1。

由于这个包的视图加载了一些CDN资源,这些可能对我们不友好,所以需要对这个包提供的视图做覆盖修改,所以拷贝:

cp -a vendor/pragmarx/tracker/views/* resources/pragmarx/tracker/

使用的加载使用了pragmarx/tracker::xxx,所以会首先使用覆盖的版本(Laravel的机制)。

对应对模板进行修改,把资源下载回来,适当调整一下模板,基本还是可用的。