PHP 提供的 get_browser() 函数,相信很多开发者都用过。但是,它依赖于一个 browscap.ini 文件,这个文件需要定期更新,否则识别的浏览器信息就会不准确。而且,原生的 get_browser() 函数在某些服务器环境下配置比较麻烦。那么,有没有更好的替代方案呢?
composer在线学习地址:学习地址
browscap/browscap-php 库就是为此而生的。它是一个用户级的 get_browser() 函数替代方案,由 Browser Capabilities Project 官方支持。这意味着你可以获得更准确、更及时的浏览器信息。
安装和基本使用
首先,你需要使用 Composer 安装这个库:
composer require browscap/browscap-php
安装完成后,就可以在你的代码中使用它了:
立即学习“PHP免费学习笔记(深入)”;
<?php
require_once 'vendor/autoload.php';
use BrowscapPHP\Browscap;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use MatthiasMullie\Scrapbook\Psr16\SimpleCache;
use MatthiasMullie\Scrapbook\Adapters\Flysystem;
use League\Flysystem\Filesystem;
use League\Flysystem\Local\LocalFilesystemAdapter;
// 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 BrowscapPHP\Browscap; use Monolog\Logger; use Monolog\Handler\StreamHandler; use MatthiasMullie\Scrapbook\Psr16\SimpleCache; use MatthiasMullie\Scrapbook\Adapters\Flysystem; use League\Flysystem\Filesystem; use League\Flysystem\Local\LocalFilesystemAdapter; // 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 BrowscapPHP\Browscap; use Monolog\Logger; use Monolog\Handler\StreamHandler; use MatthiasMullie\Scrapbook\Psr16\SimpleCache; use MatthiasMullie\Scrapbook\Adapters\Flysystem; use League\Flysystem\Filesystem; use League\Flysystem\Local\LocalFilesystemAdapter; // 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.124124 Safari/537.36'; $current_browser = $browscap->getBrowser($the_user_agent);
总结
browscap/browscap-php 库是 PHP 原生 get_browser() 函数的强大替代品,它提供了更准确、更及时的浏览器信息,并且易于安装和配置。通过使用命令行工具,你可以轻松管理浏览器信息库,确保你的应用始终能够准确识别用户浏览器,从而提供更好的用户体验。



















