satun14/browscap-php

php原生get_browser()函数的独立替代品

7.4.0 2023-11-29 16:16 UTC

README

这是PHP原生get_browser()函数的用户级替代品,由浏览器能力项目官方支持。

注意,您目前查看的是4.x系列。如果您需要不受支持的2.x版本,请在此处阅读该分支的文档here

Build Status codecov

安装

运行以下命令通过Composer安装

composer require browscap/browscap-php 

然后您可以通过这种方式识别当前用户代理

$cache = new \Roave\DoctrineSimpleCache\SimpleCacheAdapter($doctrineFileCache); // or maybe any other PSR-16 compatible caches
$logger = new \Monolog\Logger('name'); // or maybe any other PSR-3 compatible logger

$browscap = new \BrowscapPHP\Browscap($cache, $logger);
$info = $browscap->getBrowser();

推荐配置

在您开始之前,您必须下载browscap.ini文件并将其转换为缓存。有两种方法。

a. 下载文件,并分两步进行转换。下载的文件将存储在本地文件中,但不会检查远程文件是否已更改。如果您的缓存损坏,您只需要重新运行convert命令。

vendor/bin/browscap-php browscap:fetch
vendor/bin/browscap-php browscap:convert

b. 下载文件,并一步完成转换。下载的文件将不会存储在本地文件中,但会检查远程文件是否已更改。如果您的缓存损坏,您需要清理缓存并重新启动进程。

vendor/bin/browscap-php browscap:update

如果您想自动更新使用的缓存,我们建议使用单独的cron作业来调用上述命令。

4.x版本中的更改

列出的BC不兼容性

  • 在整个项目中添加了严格的类型提示。这可能会破坏早期版本中做出的某些类型假设。
  • CheckUpdateCommandConvertCommandLogfileCommandParserCommandUpdateCommand删除了setCache方法,因此缓存现在必须通过构造函数注入
  • 许多类现在是final - 使用组合而不是继承
  • PropertyFormatter现在假定任何非真值都是false
  • checkUpdate方法现在在无法确定“远程”版本或缓存中不存在版本时抛出异常
  • 删除了log方法

更改

  • 用于缓存Doctrine Cache
    • 可以使用与PSR-16兼容的任何其他缓存
  • 对于CLI命令,必须使用详细标志而不是debug标志

3.x版本中的更改

更改

  • 命名空间已更改为BrowscapPHP
  • Browscap类已分割

已删除的功能

  • 自动更新功能已删除
  • 所有公共属性都已删除

新功能

  • 现在可以使用除了文件缓存之外的其他缓存(有关更多信息,请参阅WurflCache包)
  • 现在可以编写自己的格式化程序来更改输出格式
  • 现在可以设置PSR-3兼容的记录器

设置示例

将设置更新到4.x版本

这是3.x版本的基设置。

$bc = new \BrowscapPHP\Browscap();

$adapter = new \WurflCache\Adapter\File([\WurflCache\Adapter\File::DIR => $cacheDir]);
$bc->setCache($adapter);

$logger = new \Monolog\Logger('name');
$bc->setLogger($logger);

$result = $bc->getBrowser();

将此修改为4.x版本的基设置,以使用当前缓存目录

$fileCache = new \Doctrine\Common\Cache\FilesystemCache($cacheDir);
$cache = new \Roave\DoctrineSimpleCache\SimpleCacheAdapter($fileCache);

$logger = new \Monolog\Logger('name');

$bc = new \BrowscapPHP\Browscap($cache, $logger);
$result = $bc->getBrowser();

注意:您可以使用任何其他实现了PSR-16接口的缓存。

使用完整的browscap.ini文件

$bc = new \BrowscapPHP\BrowscapUpdater();
$bc->update(\BrowscapPHP\Helper\IniLoaderInterface::PHP_INI_FULL);

设置代理配置

如果您在代理后面或者需要特定的配置,您必须设置一个客户端实例。有关此方面的更多信息,请参阅Guzzle文档

$proxyConfig = [
    'proxy' => [
        'http'  => 'tcp://:8125',
        'https' => 'tcp://:8124',
    ],
];
$client = new \GuzzleHttp\Client($proxyConfig);
$bcu = new BrowscapUpdater();
$bcu->setClient($client);

用法示例

从全局$_SERVER变量中获取用户代理

$bc = new \BrowscapPHP\Browscap();
$current_browser = $bc->getBrowser();

使用示例用户代理

$bc = new \BrowscapPHP\Browscap($cache, $logger);
$current_browser = $bc->getBrowser($the_user_agent);

CLI命令

注意:如果您不想使用文件缓存,您不能使用CLI命令。目前无法在该处使用其他缓存。注意:每个操作(获取、更新、检查更新)从远程主机browscap.org获取数据时可能会遇到该网站的速率限制。如果发生这种情况,将抛出异常。

每个CLI命令在一切顺利时返回

check-update

如果您只想检查browscap.ini是否有新版本可用,可以使用check-update命令。

vendor/bin/browscap-php browscap:check-update

选项

  • cache(可选)缓存目录的相对路径

返回代码

  • 1:没有找到缓存的版本
  • 2:没有新版本可用
  • 3:检查缓存的版本时发生错误
  • 4:获取远程版本时发生错误
  • 5:发生其他错误

fetch

fetch命令从browscap.org下载ini文件。

vendor/bin/browscap-php browscap:fetch

选项

  • cache(可选)缓存目录的相对路径
  • remote-file(可选)如果您不想下载标准文件,则需要此参数,可能的值有
    • PHP_BrowscapINI下载标准文件(默认)
    • Lite_PHP_BrowscapINI下载精简版文件
    • Full_PHP_BrowscapINI下载完整版文件
  • file(可选)远程内容存储的本地文件的相对路径

返回代码

  • 3:检查缓存的版本时发生错误
  • 9:获取远程数据时发生错误
  • 10:发生其他错误

convert

convert命令读取本地存储的browscap.ini文件,并将内容写入缓存。

vendor/bin/browscap-php browscap:convert

选项

  • file(可选)远程内容存储的本地文件的相对路径,这应该与fetch命令中的文件相同
  • cache(可选)缓存目录的相对路径

返回代码

  • 6:缺少要转换的文件名
  • 7:要转换的文件不可用或不可读
  • 35:读取文件时发生其他错误

update

update命令从browscap.org下载ini文件,并将内容写入缓存。不创建本地文件。

vendor/bin/browscap-php browscap:update

选项

  • remote-file(可选)如果您不想下载标准文件,则需要此参数,可能的值有
    • PHP_BrowscapINI下载标准文件(默认)
    • Lite_PHP_BrowscapINI下载精简版文件
    • Full_PHP_BrowscapINI下载完整版文件
  • cache(可选)缓存目录的相对路径

返回代码

  • 3:检查缓存的版本时发生错误
  • 9:获取远程数据时发生错误
  • 10:发生其他错误

parse

parse命令解析给定的用户代理,并将结果写入控制台。

vendor/bin/browscap-php browscap:parse

选项

  • user-agent(必需)要解析的用户代理
  • cache(可选)缓存目录的相对路径

返回代码

  • 11:解析用户代理时发生其他错误

CLI示例

使用完整的browscap.ini文件更新缓存

注意:创建/更新缓存的两种方法都将使用默认的standard模式文件。如果您想获取更多信息,可以使用remote-file选项。请使用帮助功能了解此参数。

vendor/bin/browscap-php browscap:update --remote-file Full_PHP_BrowscapINI

更新自定义缓存目录

每个操作(除fetch外)都在项目内的resources目录中使用缓存。如果您使用composer更新此库,缓存也会被清除。如果您想避免这种情况并想设置自己的缓存文件夹,可以使用cache选项。如果您这样做,您必须为此路径设置一个缓存实例。

vendor/bin/browscap-php browscap:update --cache ./browscap-cache

问题和功能请求

请在GitHub问题跟踪器https://github.com/browscap/browscap-php/issues上报告您的问题并请求新功能。

请在此处报告错误识别的用户代理和浏览器检测,位置在browscap.ini文件中: https://github.com/browscap/browscap/issues