workman服务端开发模式-应用开发-后端api登录之浏览器版本工具开发

news/2024/12/22 18:29:04 标签: 分布式, php, gateway

一、浏览器版本工具开发

        在根目录下extend文件夹下Other文件夹下创建浏览器控制工具并命名为Browser.php,代码如下:

<?php
/**
 * 浏览器管理
 * User: 龙哥 三年风水
 * Date: 2024/12/21/0021
 * Time: 21:58
 */
namespace Other;
class Browser
{

    /**
     * 获取浏览器及版本
     * @ return string
     */

    public static function getVersion(){
        $userAgent = $_SERVER['HTTP_USER_AGENT'];
        $browser = 'unknown';
        $version = 0;
        if (preg_match('/MSIE (\d+[\.\d]+)/i', $userAgent, $matches)) {
            $browser = 'ie';
            $version = (float)$matches[1];
        } elseif (preg_match('/Firefox\/(\d+[\.\d]+)/i', $userAgent, $matches)) {
            $browser = 'firefox';
            $version = (float)$matches[1];
        } elseif (preg_match('/Chrome\/(\d+[\.\d]+)/i', $userAgent, $matches)) {
            $browser = 'chrome';
            $version = (float)$matches[1];
        } elseif (preg_match('/Safari\/(\d+[\.\d]+)/i', $userAgent, $matches) && preg_match('/Version\/(\d+[\.\d]+)/i', $userAgent, $matches2)) {
            $browser = 'safari';
            $version = (float)$matches2[1];
        } elseif (preg_match('/Opera[\s\/](\d+[\.\d]+)/i', $userAgent, $matches)) {
            $browser = 'opera';
            $version = (float)$matches[1];
        } elseif (preg_match('/OPR\/([^\s]+)/', $userAgent, $matches)) {
            $browser = 'opera';
            $version = (float)$matches[1];
        }
        return $browser.$version;
    }
}

二、测试浏览器版本工具

        1、添加路由

                在根目录下route文件夹下app.php文件中追加如下代码:

Route::get('index/index','Index/index');// 测试使用

        2、代码调用测试

                在根目录下app文件夹下controller文件夹下修改Index.php,代码如下:

<?php
namespace app\controller;
use Other\Browser;

class Index extends Emptys
{
    public function index()
    {
        $browser = Browser::getVersion();
        var_dump($browser);exit;
    }
}

http://www.niftyadmin.cn/n/5795704.html

相关文章

《Vue3实战教程》5:响应式基础

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 响应式基础​ API 参考 本页和后面很多页面中都分别包含了选项式 API 和组合式 API 的示例代码。现在你选择的是 组合式 API。你可以使用左侧侧边栏顶部的“API 风格偏好”开关在 API 风格之间切换。 声明响应式状态…

java 基于冷热数据分离的思想设计LRU链表

java 基于冷热数据分离的思想设计LRU链表 1. LRUCache 伪代码 import java.util.HashMap; import java.util.Map;public class LRUCache {private final int capacity; // 缓存的最大容量private final Map<Integer, Node> map; // 用于快速查找节点的哈希表private fi…

Qt5HttpServer : Qt官方的HTTP服务器

QtHttpServer在Qt6已经默认编译集成。 下面介绍Qt5的编译x64的方法&#xff1a; 最后得到Qt5HttpServer.dll 1. 下载qhttpserver源码到任意目录 git clone https://code.qt.io/qt/qthttpserver.git -b master 或 git clone https://code.qt.io/qt/qthttpserver.git -b 5.15 …

自动驾驶控制与规划——Project 3: LQR车辆横向控制

目录 零、任务介绍一、系统建模1.1 连续模型1.2 离散化 二、算法2.1 离散时间LQR2.2 前馈控制 三、代码实现四、效果展示 零、任务介绍 补全src/ros-bridge/carla_shenlan_projects/carla_shenlan_lqr_pid_controller/src/lqr_controller.cpp中的TODO部分&#xff0c;实现基于…

Spring Boot 核心技术解析与应用实践

1.Spring Boot 需要独立的容器运行吗&#xff1f; Spring Boot 应用程序本身不需要独立的容器来运行&#xff0c;因为它可以被打包成一个包含所有依赖&#xff08;包括嵌入式HTTP服务器&#xff0c;如Tomcat、Jetty或Undertow&#xff09;的可执行JAR文件。这意味着你可以直接…

aiy【4】

那天下课&#xff0c;我目光呆滞地坐在位置上涂唇膏。 忽然又又想到他 到他位置旁笑他和朋友们打闹 上课铃响了 我的朋友&#xff08;男&#xff09;S小声急促的和我说&#xff1a;快&#xff01;快&#xff01;好机会&#xff01; 我红着脸吻了他的手 很快 S兴奋的叫了…

利用 Python 解决 “奇数之和” 问题

一、问题描述 在这个问题场景中&#xff0c;有着特定的时间和内存限制&#xff0c;每次测试时间限制为 2 秒&#xff0c;每个测试的内存限制为 256 MB。我们会获得两个整数 n 和 k&#xff0c;任务是判断 n 是否可以表示为 k 个不同的正奇数&#xff08;不能被 2 整除的整数&a…

ubuntu24.04使用opencv4

ubuntu24.04LTS自带opencv4.5代码实例 //opencv_example.cpp #include <opencv2/opencv.hpp> #include <iostream>int main() {// 读取图像cv::Mat img cv::imread("image.jpg", cv::IMREAD_COLOR);if (img.empty()) {std::cerr << "无法读…