browscap/browscap-php

PHP原生get_browser()函数的独立替代方案

7.4.0 2023-11-29 16:16 UTC

README

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

CI

安装

运行以下命令通过Composer安装

composer require browscap/browscap-php 

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

$cache = new \MatthiasMullie\Scrapbook\Psr16\SimpleCache($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:fetch命令以下载browscap.ini文件,并使用browscap:convert命令将其转换为缓存。有两种方法。

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

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

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

vendor/bin/browscap-php browscap:update

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

7.0.x版本中的BC中断

 - [BC] BrowscapPHP\Command\UpdateCommand was marked "@internal"
 - [BC] BrowscapPHP\Command\FetchCommand was marked "@internal"
 - [BC] BrowscapPHP\Command\ConvertCommand was marked "@internal"
 - [BC] BrowscapPHP\Command\CheckUpdateCommand was marked "@internal"
 - [BC] BrowscapPHP\Command\ParserCommand was marked "@internal"
 - [BC] BrowscapPHP\Helper\Filesystem was marked "@internal"

设置示例

$fileCache = new \League\Flysystem\Local\LocalFilesystemAdapter($cacheDir);
$filesystem = new \League\Flysystem\Filesystem($fileCache);
$cache = new \MatthiasMullie\Scrapbook\Psr16\SimpleCache(
    new \MatthiasMullie\Scrapbook\Adapters\Flysystem($filesystem)
);

$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://localhost:8125',
        'https' => 'tcp://localhost: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: 转换的文件不可用或不可读
  • 8: 读取文件时发生其他错误

更新

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 命令解析指定的用户代理并将结果写入控制台。

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 Issue Tracker 上报告你的问题和请求新功能:https://github.com/browscap/browscap-php/issues

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