php 提供的 get_browser() 函数,相信很多开发者都用过。但是,它依赖于一个 browscap.ini 文件,这个文件需要定期更新,否则识别的浏览器信息就会不准确。而且,原生的 get_browser() 函数在某些服务器环境下配置比较麻烦。那么,有没有更好的替代方案呢?
browscap/browscap-php 库就是为此而生的。它是一个用户级的 get_browser() 函数替代方案,由 Browser Capabilities Project 官方支持。这意味着你可以获得更准确、更及时的浏览器信息。
安装和基本使用
首先,你需要使用 composer 安装这个库:
composer require browscap/browscap-php
安装完成后,就可以在你的代码中使用它了:
立即学习“PHP免费学习笔记(深入)”;
<?php require_once 'vendor/autoload.php'; use BrowscapPHPBrowscap; use MonologLogger; use MonologHandlerStreamHandler; use MatthiasMullieScrapbookPsr16SimpleCache; use MatthiasMullieScrapbookAdaptersFlysystem; use LeagueFlysystemFilesystem; use LeagueFlysystemLocalLocalFilesystemAdapter; // 1. 配置缓存(推荐使用 PSR-16 兼容的缓存) $adapter = new LocalFilesystemAdapter(__DIR__ . '/cache'); // 缓存目录 $filesystem = new Filesystem($adapter); $cache = new SimpleCache(new Flysystem($filesystem)); // 2. 配置日志(可选) $log = new Logger('browscap'); $log->pushHandler(new StreamHandler('php://stdout', Logger::DEBUG)); // 3. 创建 Browscap 实例 $browscap = new Browscap($cache, $log); // 4. 获取浏览器信息 $browser = $browscap->getBrowser(); // 现在 $browser 包含了当前用户代理的详细信息 print_r($browser);
推荐的设置
在使用之前,你需要下载 browscap.ini 文件,并将其转换为缓存。有两种方法:
a. 分步下载和转换
vendor/bin/browscap-php browscap:fetch vendor/bin/browscap-php browscap:convert
这种方式会将下载的文件存储在本地,但不会检查远程文件是否已更改。如果你的缓存损坏,只需重新运行 convert 命令即可。
b. 一步下载和转换
vendor/bin/browscap-php browscap:update
这种方式不会存储本地文件,但会检查远程文件是否已更改。如果你的缓存损坏,需要清除缓存并重新开始。
建议设置一个独立的 cron job 定期调用 browscap:update 命令,以自动更新缓存。
命令行工具
browscap/browscap-php 提供了丰富的命令行工具,方便你管理浏览器信息库:
- browscap:check-update: 检查是否有新的 browscap.ini 版本可用。
- browscap:fetch: 从 browscap.org 下载 browscap.ini 文件。
- browscap:convert: 将本地存储的 browscap.ini 文件转换为缓存。
- browscap:update: 下载 browscap.ini 文件并写入缓存(一步完成)。
- browscap:parse: 解析给定的 User Agent,并将结果输出到控制台。
使用示例
-
从 $_SERVER 变量获取 User Agent:
<?php require_once 'vendor/autoload.php'; use BrowscapPHPBrowscap; use MonologLogger; use MonologHandlerStreamHandler; use MatthiasMullieScrapbookPsr16SimpleCache; use MatthiasMullieScrapbookAdaptersFlysystem; use LeagueFlysystemFilesystem; use LeagueFlysystemLocalLocalFilesystemAdapter; // 1. 配置缓存(推荐使用 PSR-16 兼容的缓存) $adapter = new LocalFilesystemAdapter(__DIR__ . '/cache'); // 缓存目录 $filesystem = new Filesystem($adapter); $cache = new SimpleCache(new Flysystem($filesystem)); // 2. 配置日志(可选) $log = new Logger('browscap'); $log->pushHandler(new StreamHandler('php://stdout', Logger::DEBUG)); // 3. 创建 Browscap 实例 $browscap = new Browscap($cache, $log); $current_browser = $browscap->getBrowser($_SERVER['HTTP_USER_AGENT']);
-
使用指定的 User Agent:
<?php require_once 'vendor/autoload.php'; use BrowscapPHPBrowscap; use MonologLogger; use MonologHandlerStreamHandler; use MatthiasMullieScrapbookPsr16SimpleCache; use MatthiasMullieScrapbookAdaptersFlysystem; use LeagueFlysystemFilesystem; use LeagueFlysystemLocalLocalFilesystemAdapter; // 1. 配置缓存(推荐使用 PSR-16 兼容的缓存) $adapter = new LocalFilesystemAdapter(__DIR__ . '/cache'); // 缓存目录 $filesystem = new Filesystem($adapter); $cache = new SimpleCache(new Flysystem($filesystem)); // 2. 配置日志(可选) $log = new Logger('browscap'); $log->pushHandler(new StreamHandler('php://stdout', Logger::DEBUG)); // 3. 创建 Browscap 实例 $browscap = new Browscap($cache, $log); $the_user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'; $current_browser = $browscap->getBrowser($the_user_agent);
总结
browscap/browscap-php 库是 PHP 原生 get_browser() 函数的强大替代品,它提供了更准确、更及时的浏览器信息,并且易于安装和配置。通过使用命令行工具,你可以轻松管理浏览器信息库,确保你的应用始终能够准确识别用户浏览器,从而提供更好的用户体验。