veronalabs / browscap-php

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

7.4.0 2023-11-29 16:16 UTC

README

这是一个PHP原生get_browser()函数的用户空间替代品,该替代品由浏览器功能项目官方支持。

CI

安装

运行以下命令通过Composer安装

composer require veronalabs/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://: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命令在一切正常时返回zero

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问题跟踪器上报告您的问题并请求新功能:https://github.com/browscap/browscap-php/issues

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