php判断搜索引擎ua 判断来路是否来自搜索 判断m移动和pc电脑的函数
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 {
// 参数不对
}![zblog的 $this->lang['msg']['operation_failed'],lang到底都配置什么?在哪里查看?都有哪些值?zblog语言包](http://zblog.gongshi5.com/zb_users/upload/2023/12/202312221703247069217906.png)