php判断搜索引擎ua 判断来路是否来自搜索 判断m移动和pc电脑的函数

zblog2个月前zblog问题解答10876

php判断搜索引擎ua 判断来路是否来自搜索  判断m移动和pc电脑的函数

### 判断是否移动

// 获取用户代理字符串
$userAgentNow = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : '';
// 移动设备正则表达式模式
$mobilePatterns = '/mobile|phone|android|ios|iphone|ipad|harmonyos|windows phone|symbian|blackberry|webos|opera mini|iemobile|ucweb|miui|flyme|pixel|touch/';
// 检查是否为iPadOS(PHP中无法直接检测maxTouchPoints,所以主要依赖UA检测)
$isIpadOS = strpos($userAgentNow, 'macintosh') !== false && strpos($userAgentNow, 'touch') !== false;
// 检测是否为移动设备
if (preg_match($mobilePatterns, $userAgentNow) || $isIpadOS ) {
    // 移动设备
} else {
    // 非移动设备
}


### 判断是否来自搜索引擎等

/**
 * 判断用户访问来路是否包含指定的搜索引擎域名
 * @return bool 包含指定域名返回true,无来路/不包含返回false
 */
function checkRefererSearchEngine()
{
    if (!isset($_SERVER['HTTP_REFERER']) || empty($_SERVER['HTTP_REFERER'])) {// 1. 检查是否存在来路信息,无则直接返回false
        return false;
    }
    $referer = strtolower($_SERVER['HTTP_REFERER']); // 2. 获取来路网址并转为小写
    // 3. 定义需要匹配的搜索引擎域名列表
    $searchDomains = ['baidu.com', 'so.com', 'bing.com', 'google.com', 'quark.cn', 'duckduckgo.com', 'sm.cn', 'qianwen.com', 'yahoo.com', 'sogou.com', 'toutiao.com', 'qq.com'];
    foreach ($searchDomains as $domain) {// 4. 遍历域名列表,检查来路是否包含任一域名
        if (strpos($referer, $domain) !== false) {// 兼容PHP 7.x的写法(如果你的环境低于8.0,替换上面这行): // if (str_contains($referer, $domain)) { // PHP 8.0+ 推荐用法
            return true;
        }
    }
    return false;// 5. 不包含指定域名则返回false
}
$sousuoUser = checkRefererSearchEngine();
if ($sousuoUser) {
    // 搜索引擎来路
} else {
    // 非搜索引擎来路
}
###  判断是否蜘蛛访问
$a_Ua = $_SERVER['HTTP_USER_AGENT'];
$a_Ua_lower = strtolower($a_Ua);
$a_Baidu = strpos($a_Ua_lower, 'baiduspider') !== false ? 1 : 0;
$a_Bing = strpos($a_Ua_lower, 'bingbot') !== false ? 1 : 0;
$a_Google = strpos($a_Ua_lower, 'googlebot') !== false ? 1 : 0;
$a_Qihu = strpos($a_Ua_lower, '360spider') !== false ? 1 : 0;
$a_Toutiao = strpos($a_Ua_lower, 'bytespider') !== false ? 1 : 0;
$a_Sougou = (strpos($a_Ua_lower, 'sogou') !== false and strpos($a_Ua_lower, 'spider') !== false) ? 1 : 0;
$a_Shenma = strpos($a_Ua_lower, 'yisouspider') !== false ? 1 : 0;
$a_Isbot = ($a_Baidu == 1 or $a_Bing == 1 or $a_Qihu == 1 or $a_Sougou == 1 or $a_Shenma == 1) ? 1 : 0;
if ($a_Isbot == 1) {
    // 蜘蛛访问
} else {
    // 非蜘蛛访问
}


### 判断参数
function checkDateParam()
{ // 先定义判断是否来自搜索引擎的函数
    $dateValue = isset($_GET['date']) ? trim($_GET['date']) : '';
    return $dateValue === '2026988';
}

$okUser = checkDateParam();

if (  $okUser ) {
    // 参数ok
} else {
    // 参数不对
}


相关文章

php 把\u8D8A\u8D70\u8D8A\u5E26\u52B2\ 转为中文 或正常字符

为了将 Unicode 编码转换为正常字符,你可以使用 json_decode 来处理这个字符串,但需要先将它包装成一个有效的 JSON 格式字符串。具体来说,可以将你的字符串放在双引号内,并确保它是...

豆包生成流程图 提示语 ai生图

比例 「4:3」生成 1 张极简风格的线框图,展示‘这硬盘也太烫了吧’的步骤。包含文字“这硬盘也太烫了吧”,UI要漂亮美观,颜色不要单一,要符合web视觉效果,符合网页UI规范,文字清晰规整,箭头要有...

通过在页面或自定义组件的 JSON 配置中添加以下配置开始适配

JSON 配置通过在页面或自定义组件的 JSON 配置中添加以下配置开始适配:{ "componentFramework": "glass-easel...

zblog更新用户文章数量sql

我有两个表     zbp_member  和 zbp_post  ,zbp_post &...

zblog查询数量sql num

$where = array('=', 'log_ID', 111); $num = $zbp-&...

zblog的 $this->lang['msg']['operation_failed'],lang到底都配置什么?在哪里查看?都有哪些值?zblog语言包

zblog的 $this->lang['msg']['operation_failed'],lang到底都配置什么?在哪里查看?都有哪些值?zblog语言包

在上一篇文章《zblog函数ShowHint('good')中good是怎么来的?允许哪些,不允许哪些?》源码中有一个 $content = $this->lang[&...