bugbuster/browscap-php

php的本地get_browser()函数的独立替代品

7.4.0 2023-11-29 16:16 UTC

README

这是一个PHP的本地get_browser()函数的用户级替代品,该函数由浏览器功能项目官方支持

Latest Stable Fork Version

分支:为Contao 5.3和PHP 8.3以及Monolog 2.9提供的特殊版本,由Contao BotDetection Bundle使用。纯消除依赖冲突,Contao BotDetection Bundle使用NullLogger()

安装

运行以下命令通过Composer安装

composer require bugbuster/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);

命令行命令

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

每个命令行命令在一切顺利的情况下返回

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