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

zblog3个月前zblog问题解答21247

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 {
    // 参数不对
}


相关文章

怎么使用百度ck 百度cookies应用到浏览器 百度账号登录免登陆

怎么使用百度ck 百度cookies应用到浏览器 百度账号登录免登陆

怎么使用百度ck 百度cookies应用到浏览器 百度账号登录免登陆Application(中文对应:应用程序(Microsoft Edge浏览器) 或 应用(谷歌chrome浏览器))BDUSS=h...

phpstorm中的正则表达式替换 编辑器IDE

phpstorm中的正则表达式替换 编辑器IDE

phpstorm中的正则表达式替换 编辑器IDE...

php 大写转小写 小写转大写 大小写转换 例子 strtolower strtoupper

在 PHP 中,可以使用内置的函数来转换字符串的大小写。以下是几个例子:大写转小写:使用 strtolower() 函数将大写字母转换为小写字母。   <...

获取百度相关词 百度下拉词 接口 360搜索相关词

https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&w...

zblog后台发文章超级慢的问题排查

zblog后台发文章超级慢的问题排查: zb_system/cmd.php  case 'ArticlePst': ... $zbp->Bu...

set_time_limit(0); // PHP取消脚本最大执行时间限制

set_time_limit(0); // 取消脚本最大执行时间限制...