You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
think-library/src/helper/Requests.php

229 lines
6.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
// +----------------------------------------------------------------------
// | ThinkLibrary 6.0 for ThinkPhP 6.0
// +----------------------------------------------------------------------
// | 版权所有 2017~2020 [ https://www.dtapp.net ]
// +----------------------------------------------------------------------
// | 官方网站: https://gitee.com/liguangchun/ThinkLibrary
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// +----------------------------------------------------------------------
// | gitee 仓库地址 https://gitee.com/liguangchun/ThinkLibrary
// | github 仓库地址 https://github.com/GC0202/ThinkLibrary
// | Packagist 地址 https://packagist.org/packages/liguangchun/think-library
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace DtApp\ThinkLibrary\helper;
/**
* 请求管理类
* @mixin Requests
* @package DtApp\ThinkLibrary\helper
*/
class Requests
{
/**
* 判断输入的参数
* @param array $data
* @param array $arr
* @return array
*/
public function isEmpty(array $data, array $arr): array
{
foreach ($arr as $k => $v) {
if (empty($data[(string)$v] ?? '')) {
return [];
}
}
return $data;
}
/**
* 判断输入的参数为空就返回Json错误
* @param array $data
* @param array $arr
* @return array
*/
public function isEmptyRet(array $data, array $arr): array
{
foreach ($arr as $k => $v) {
if (empty($data[(string)$v] ?? '')) {
(new Returns)->jsonError('请检查参数', 102);
}
}
return $data;
}
/**
* 判断是否为GET方式
* @return bool
*/
public function isGet(): bool
{
return request()->isGet();
}
/**
* 判断是否为POST方式
* @return bool
*/
public function isPost(): bool
{
return request()->isPost();
}
/**
* 判断是否为PUT方式
* @return boolean
*/
public function isPut(): bool
{
return request()->isPut();
}
/**
* 判断是否为DELETE方式
* @return boolean
*/
public function isDelete(): bool
{
return request()->isDelete();
}
/**
* 判断是否为Ajax方式
* @return bool
*/
public function isAjax(): bool
{
return request()->isAjax();
}
/**
* 判断是否为移动端访问
* @return bool
*/
public function isMobile(): bool
{
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
return true;
}
//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
//找不到为flase,否则为true
if (isset($_SERVER['HTTP_VIA'])) {
return stripos(request()->server('HTTP_VIA'), "wap") !== false;
}
//判断手机发送的客户端标志
if (isset($_SERVER['HTTP_USER_AGENT'])) {
$clientkeywords = [
'nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp',
'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu',
'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi',
'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile', 'alipay'
];
// 从HTTP_USER_AGENT中查找手机浏览器的关键字
if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower(request()->server('HTTP_USER_AGENT')))) {
return true;
}
}
//协议法,因为有可能不准确,放到最后判断
// 如果只支持wml并且不支持html那一定是移动设备
// 如果支持wml和html但是wml在html之前则是移动设备
return isset($_SERVER['HTTP_ACCEPT']) && (strpos(request()->server('HTTP_ACCEPT'), 'vnd.wap.wml') !== false) && (strpos(request()->server('HTTP_ACCEPT'), 'text/html') === false || (strpos(request()->server('HTTP_ACCEPT'), 'vnd.wap.wml') < strpos(request()->server('HTTP_ACCEPT'), 'text/html')));
}
/**
* 判断是否微信内置浏览器访问
* @return bool
*/
public function isWeiXin(): bool
{
return strpos(request()->server('HTTP_USER_AGENT'), 'MicroMessenger') !== false;
}
/**
* 判断是否为微信小程序访问
* @return bool
*/
public function isWeiXinMp(): bool
{
return strpos(request()->server('HTTP_USER_AGENT'), 'miniProgram') !== false;
}
/**
* 判断是否支付宝内置浏览器访问
* @return bool
*/
public function isAliPay(): bool
{
return strpos(request()->server('HTTP_USER_AGENT'), 'Alipay') !== false;
}
/**
* 判断是否QQ内置浏览器访问
* @return bool
*/
public function isQQ(): bool
{
return (strpos(request()->server('HTTP_USER_AGENT'), 'QQ') !== false) && strpos(request()->server('HTTP_USER_AGENT'), '_SQ_') !== false;
}
/**
* 判断是否QQ浏览器访问
* @return bool
*/
public function isQQBrowser(): bool
{
if (strpos(request()->server('HTTP_USER_AGENT'), 'QQ') !== false) {
return !(strpos(request()->server('HTTP_USER_AGENT'), '_SQ_') !== false);
}
return false;
}
/**
* 获取客户端类型
* @return string
*/
public function getDeviceType()
{
$agent = strtolower(request()->server('HTTP_USER_AGENT'));
if (strpos($agent, 'iphone') || strpos($agent, 'ipad') || strpos($agent, 'android')) {
$type = 'mobile';
} else {
$type = 'computer';
}
return $type;
}
/**
* 获取手机设备类型
* @return string
*/
public function getMobileType()
{
$agent = strtolower(request()->server('HTTP_USER_AGENT'));
$type = 'other';
if (strpos($agent, 'iphone') || strpos($agent, 'ipad')) {
$type = 'ios';
}
if (strpos($agent, 'android')) {
$type = 'android';
}
return $type;
}
/**
* 获取域名地址
* @return string
*/
public function getWebsiteAddress(): string
{
$http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https')) ? 'https://' : 'http://';
return $http_type . $_SERVER['HTTP_HOST'] . "/";
}
}