`
~~~
<?php
// +----------------------------------------------------------------------
// | Created by PHPstorm: JRKAdmin框架 [ JRKAdmin ]
// +----------------------------------------------------------------------
// | Copyright (c) 2019~2022 [LuckyHHY] All rights reserved.
// +----------------------------------------------------------------------
// | SiteUrl: http://www.luckyhhy.cn
// +----------------------------------------------------------------------
// | Author: LuckyHhy <jackhhy520@qq.com>
// +----------------------------------------------------------------------
// | Date: 2020/1/3-16:13
// +----------------------------------------------------------------------
// | Description:
// +----------------------------------------------------------------------
namespace Jrk;
use think\facade\Request;
class Util
{
/**
* @param $params
* @param Request|null $request
* @param bool $suffix
* @return array
* @author: hhygyl
* @name: postMore
* @describe:获取post请求的数据
*/
public static function postMore($params, Request $request = null, $suffix = false)
{
if($request===null)
$request = Request::instance();
$p = [];
$i = 0;
foreach($params as $param){
if(!is_array($param)) {
$p[$suffix==true ? $i++ : $param] = $request->post($param);
}
else {
if(!isset($param[1]))
$param[1] = null;
if(!isset($param[2]))
$param[2] = '';
$name = is_array($param[1]) ? $param[0].'/a' : $param[0];
$p[$suffix==true ? $i++ : (isset($param[3]) ? $param[3] : $param[0])] = $request->post($name, $param[1], $param[2]);
}
}
return $p;
}
/**
* @param $params
* @param Request|null $request
* @param bool $suffix
* @return array
* @author: hhygyl
* @name: getMore
* @describe:获取get请求的数据
*/
public static function getMore($params, Request $request = null, $suffix = false)
{
if($request===null)
$request = Request::instance();
$p = [];
$i = 0;
foreach($params as $param){
if(!is_array($param)) {
$p[$suffix==true ? $i++ : $param] = $request->get($param);
}
else {
if(!isset($param[1]))
$param[1] = null;
if(!isset($param[2]))
$param[2] = '';
$name = is_array($param[1]) ? $param[0].'/a' : $param[0];
$p[$suffix==true ? $i++ : (isset($param[3]) ? $param[3] : $param[0])] = $request->get($name, $param[1], $param[2]);
}
}
return $p;
}
/**
* @param int $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
* @param bool $adv 是否进行高级模式获取(有可能被伪装)
* @return mixed
* @author: hhygyl <hhygyl520@qq.com>
* @name: get_client_ip
* @describe:获取客户端IP地址
*/
public static function get_client_ip($type = 0, $adv = false) {
$type = $type ? 1 : 0;
static $ip = NULL;
if ($ip !== NULL) {
return $ip[$type];
}
if ($adv) {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$pos = array_search('unknown', $arr);
if (false !== $pos) {
unset($arr[$pos]);
}
$ip = trim($arr[0]);
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
} elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
// IP地址合法验证
$long = sprintf("%u", ip2long($ip));
$ip = $long ? array($ip, $long) : array('0.0.0.0', 0);
return $ip[$type];
}
/**
* @param $ip
* @return array|mixed
* @Author: LuckyHhy <jackhhy520@qq.com>
* @name: getAddress
* @describe: 获取IP地址详细信息
*/
public static function getAddress($ip){
$url = file_get_contents("http://api.map.baidu.com/location/ip?ip=$ip&ak=Eay7nMQ0htmL357Yh1GSFHcN9qVVoGsg");
$res1 = json_decode($url,true);
if ($res1['status']==0){ //获取到地址信息
return $res1;
}else{
return [];
}
}
/**
* @param int $length
* @return string
* @author: LuckyHhy <jackhhy520@qq.com>
* @date: 2020/3/17
* @name: uniqidNumberCode
* @describe:唯一数字编码
*/
public static function uniqidNumberCode($length = 10)
{
$time = time() . '';
if ($length < 10) $length = 10;
$string = ($time[0] + $time[1]) . substr($time, 2) . rand(0, 9);
while (strlen($string) < $length) $string .= rand(0, 9);
return $string;
}
/**
* @param int $length
* @return string
* @author: LuckyHhy <jackhhy520@qq.com>
* @date: 2020/3/17
* @name: uniqidDateCode
* @describe: 唯一日期编码
*/
public static function uniqidDateCode($length = 14)
{
if ($length < 14) $length = 14;
$string = date('Ymd') . (date('H') + date('i')) . date('s');
while (strlen($string) < $length) $string .= rand(0, 9);
return $string;
}
/**
* @param $data
* @param StringService $key
* @param int $expire
* @return mixed
* @author: hhygyl < hhygyl520@qq.com >
* @name: think_encrypt
* @describe:系统加密方法
*/
public static function think_encrypt($data, $key = 'http://www.jackhhy.cn', $expire = 0)
{
$key = md5(empty($key) ? 'lucky_jrkadmin' : $key);
$data = base64_encode($data);
$x = 0;
$len = strlen($data);
$l = strlen($key);
$char = '';
for($i = 0; $i < $len; $i++){
if($x==$l)
$x = 0;
$char .= substr($key, $x, 1);
$x++;
}
$str = sprintf('%010d', $expire ? $expire + time() : 0);
for($i = 0; $i < $len; $i++){
$str .= chr(ord(substr($data, $i, 1)) + (ord(substr($char, $i, 1)))%256);
}
return str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($str));
}
/**
* @param $data
* @param StringService $key
* @return bool|StringService
* @author: hhygyl <hhygyl520@qq.com>
* @name: think_decrypt
* @describe:系统解密方法
*/
public static function think_decrypt($data, $key = 'http://www.jackhhy.cn')
{
$key = md5(empty($key) ? 'lucky_jrkadmin' : $key);
$data = str_replace(['-', '_'], ['+', '/'], $data);
$mod4 = strlen($data)%4;
if($mod4) {
$data .= substr('====', $mod4);
}
$data = base64_decode($data);
$expire = substr($data, 0, 10);
$data = substr($data, 10);
if($expire > 0 && $expire < time()) {
return '';
}
$x = 0;
$len = strlen($data);
$l = strlen($key);
$char = $str = '';
for($i = 0; $i < $len; $i++){
if($x==$l)
$x = 0;
$char .= substr($key, $x, 1);
$x++;
}
for($i = 0; $i < $len; $i++){
if(ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
$str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
}
else {
$str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
}
}
return base64_decode($str);
}
/**
* @param $url
* @return bool
* @author: hhygyl <jackhhy520@qq.com>
* @name: is_url
* @describe:验证url
*/
public static function is_url($url){
if(empty($url)) return false;
if(preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$url)){
return true;
}else{
return false;
}
}
/**
* @param $path
* @return StringService
* @author: hhygyl
* @name: pathToUrl
* @describe:路径转url路径
*/
public static function pathToUrl($path)
{
return trim(str_replace(DS, '/', $path), '.');
}
/**
* @param $url
* @return StringService
* @author: hhygyl
* @name: urlToPath
* @describe:url转换路径
*/
public static function urlToPath($url)
{
return ROOT_PATH.trim(str_replace('/', DS, $url), DS);
}
/**
* @param $str
* @return mixed
* @author: hhygyl
* @name: hide_phone
* @describe:替换手机号码中间四位数字
*/
public static function hide_phone($str)
{
$resstr = substr_replace($str, '****', 3, 4);
return $resstr;
}
/**
* 格式化字节大小
* @param number $size 字节数
* @param StringService $delimiter 数字和单位分隔符
* @return StringService 格式化后的带单位的大小
*/
public static function format_bytes($size, $delimiter = '')
{
$units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
for($i = 0; $size >= 1024 && $i < 5; $i++)
$size /= 1024;
return round($size, 2).$delimiter.$units[$i];
}
/**
* @return bool
* @author: hhygyl
* @name: isWechatBrowser
* @describe:是否为微信内部浏览器
*/
public static function isWechatBrowser()
{
return (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')!==false);
}
/**
* @param $name
* @return StringService
* @author: hhygyl
* @name: anonymity
* @describe:匿名处理
*/
public static function anonymity($name)
{
$strLen = mb_strlen($name, 'UTF-8');
$min = 3;
if($strLen <= 1)
return '*';
if($strLen <= $min)
return mb_substr($name, 0, 1, 'UTF-8').str_repeat('*', $min - 1);
else
return mb_substr($name, 0, 1, 'UTF-8').str_repeat('*', $strLen - 1).mb_substr($name, -1, 1, 'UTF-8');
}
/**
* @param $card
* @return bool
* @author: hhygyl
* @name: setCard
* @describe:身份证验证
*/
public static function setCard($card)
{
$city = [11 => "北京", 12 => "天津", 13 => "河北", 14 => "山西", 15 => "内蒙古", 21 => "辽宁", 22 => "吉林", 23 => "黑龙江 ", 31 => "上海", 32 => "江苏", 33 => "浙江", 34 => "安徽", 35 => "福建", 36 => "江西", 37 => "山东", 41 => "河南", 42 => "湖北 ", 43 => "湖南", 44 => "广东", 45 => "广西", 46 => "海南", 50 => "重庆", 51 => "四川", 52 => "贵州", 53 => "云南", 54 => "西藏 ", 61 => "陕西", 62 => "甘肃", 63 => "青海", 64 => "宁夏", 65 => "新疆", 71 => "台湾", 81 => "香港", 82 => "澳门", 91 => "国外 "];
$tip = "";
$match = "/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/";
$pass = true;
if(!$card || !preg_match($match, $card)) {
//身份证格式错误
$pass = false;
}
else if(!$city[substr($card, 0, 2)]) {
//地址错误
$pass = false;
}
else {
//18位身份证需要验证最后一位校验位
if(strlen($card)==18) {
$card = str_split($card);
//∑(ai×Wi)(mod 11)
//加权因子
$factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
//校验位
$parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
$sum = 0;
$ai = 0;
$wi = 0;
for($i = 0; $i < 17; $i++){
$ai = $card[$i];
$wi = $factor[$i];
$sum += $ai*$wi;
}
$last = $parity[$sum%11];
if($parity[$sum%11]!=$card[17]) {
// $tip = "校验位错误";
$pass = false;
}
}
else {
$pass = false;
}
}
if(!$pass)
return false;/* 身份证格式错误*/
return true;/* 身份证格式正确*/
}
/**
* @return bool
* @author: hhygyl
* @name: is_mobile
* @describe:判断是否为手机访问
*/
public static function is_mobile()
{
static $is_mobile;
if(isset($is_mobile)) {
return $is_mobile;
}
if(empty($_SERVER['HTTP_USER_AGENT'])) {
$is_mobile = false;
}
else if(strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile')!==false || strpos($_SERVER['HTTP_USER_AGENT'], 'Android')!==false || strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/')!==false || strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle')!==false || strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry')!==false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini')!==false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mobi')!==false) {
$is_mobile = true;
}
else {
$is_mobile = false;
}
return $is_mobile;
}
/**
* @return StringService
* @author: hhygyl
* @name: getOS
* @describe:获取客户端操作系统
*/
public static function getOS()
{
$agent = strtolower($_SERVER['HTTP_USER_AGENT']);
if(strpos($agent, 'windows')) {
$platform = 'windows';
}
else if(strpos($agent, 'macintosh')) {
$platform = 'mac';
}
else if(strpos($agent, 'ipod')) {
$platform = 'ipod';
}
else if(strpos($agent, 'ipad')) {
$platform = 'ipad';
}
else if(strpos($agent, 'iphone')) {
$platform = 'iphone';
}
else if(strpos($agent, 'android')) {
$platform = 'android';
}
else if(strpos($agent, 'unix')) {
$platform = 'unix';
}
else if(strpos($agent, 'linux')) {
$platform = 'linux';
}
else {
$platform = 'other';
}
return $platform;
}
/**
* @return array
* @author: hhygyl <hhygyl520@qq.com>
* @name: getBrowser
* @describe:获取浏览器模式
*/
public static function getBrowser()
{
// 获取用户代理基本信息
$flag = $_SERVER['HTTP_USER_AGENT'];
// 定义一个空数组
$para = array();
// 检查操作系统
if (preg_match('/Chrome\/[\d\.\w]*/', $flag, $match)) {
// 检查Chrome
$para['browser'] = $match[0];
} elseif (preg_match('/Safari\/[\d\.\w]*/', $flag, $match)) {
// 检查Safari
$para['browser'] = $match[0];
} elseif (preg_match('/MSIE [\d\.\w]*/', $flag, $match)) {
// IE
$para['browser'] = $match[0];
} elseif (preg_match('/Opera\/[\d\.\w]*/', $flag, $match)) {
// opera
$para['browser'] = $match[0];
} elseif (preg_match('/Firefox\/[\d\.\w]*/', $flag, $match)) {
// Firefox
$para['browser'] = $match[0];
} elseif (preg_match('/OmniWeb\/(v*)([^\s|;]+)/i', $flag, $match)) {
//OmniWeb
$para['browser'] = $match[2];
} elseif (preg_match('/Netscape([\d]*)\/([^\s]+)/i', $flag, $match)) {
//Netscape
$para['browser'] = $match[2];
} elseif (preg_match('/Lynx\/([^\s]+)/i', $flag, $match)) {
//Lynx
$para['browser'] = $match[1];
} elseif (preg_match('/360SE/i', $flag, $match)) {
//360SE
$para['browser'] = '360安全浏览器';
} elseif (preg_match('/SE 2.x/i', $flag, $match)) {
//搜狗
$para['browser'] = '搜狗浏览器';
} else {
$para['browser'] = 'unkown';
}
// 数据返回
return $para['browser'];
}
/**
* @return string
* @author: hhygyl <hhygyl520@qq.com>
* @name: get_url
* @describe:获取当前页面完整URL地址
*/
public static function get_url()
{
$sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT']=='443' ? 'https://' : 'http://';
$php_self = $_SERVER['PHP_SELF'] ? safe_replace($_SERVER['PHP_SELF']) : safe_replace($_SERVER['SCRIPT_NAME']);
$path_info = isset($_SERVER['PATH_INFO']) ? safe_replace($_SERVER['PATH_INFO']) : '';
$relate_url = isset($_SERVER['REQUEST_URI']) ? safe_replace($_SERVER['REQUEST_URI']) : $php_self.(isset($_SERVER['QUERY_STRING']) ? '?'.safe_replace($_SERVER['QUERY_STRING']) : $path_info);
return $sys_protocal.HTTP_HOST.$relate_url;
}
/**
* @return mixed|string
* @author: hhygyl <hhygyl520@qq.com>
* @name: getip
* @describe:获取IP地址
*/
public static function getip()
{
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$ip = getenv('HTTP_CLIENT_IP');
}
else if(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
}
else if(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$ip = getenv('REMOTE_ADDR');
}
else if(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$ip = $_SERVER['REMOTE_ADDR'];
}
return preg_match('/[\d\.]{7,15}/', $ip, $matches) ? $matches [0] : '127.0.0.1';
}
/**
* @param $email
* @return bool
* @author: hhygyl <hhygyl520@qq.com>
* @name: is_email
* @describe:判断email格式是否正确
*/
public static function is_email($email)
{
return strlen($email) > 6 && preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email);
}
/**
* @return bool
* @author: hhygyl <hhygyl520@qq.com>
* @name: is_ie
* @describe:IE浏览器判断
*/
public static function is_ie()
{
$useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
if((strpos($useragent, 'opera')!==false) || (strpos($useragent, 'konqueror')!==false))
return false;
if(strpos($useragent, 'msie ')!==false)
return true;
return false;
}
}
~~~
`
- 空白目录
- thinkphp5
- tools-常用类库
- redis类库
- Excel类库
- File文件操作类库
- Http请求类库
- Maile邮件发送
- Hooks行为钩子
- 七牛云
- 随机数和字符串生成
- 字符串处理
- 时间类处理
- tree型转换
- 工具类库
- 文件打包下载
- 常用功能
- 文件上传
- php生成word文档
- elasticsearch 基本搜索
- 使用jwt开发API接口
- 安装模及搭建
- ApiCheck.php
- ApiCheckLogin.php
- common.php
- Login.php
- Comment.php
- 汉字转拼音
- 安装使用
- Pinyin类
- elasticsearch操作
- 常用方法
- 数据源生成layui-select
- 获取自定义配置项
- 百度编辑器
- 格式化文件大小
- 多语言设置
- hook监听
- 域名绑定到模块
- thinkphp6
- 文件上传
- tp5totp6
- 创建路径
- 获取类所有方法
- password_hash加密验证
- 生成 qrcode
- 邮件发送
- 获取QQ信息
- GoogleAuthenticator
- redis限流
- redis 加锁
- 百度翻译
- QueryList爬取数据
- 获取时间类
- 命令
- Git常用命令
- easyswoole
- pix_qrcode
- 验证 cpf,cnpj
- php常用方法
- 日志
- 卡通头像
- 两位小数
- 图片转base64
- auth加密解密
- phpoffice/phpspreadsheet导入导出
- fastadmin
- 树结构
- 单选框
- 复选框
- 二级搜索
- select选择框
- selectpage选中回调事件
- 标签添加
- 修改where条件
- 表格列表中添加input框
- selectpage事件
- fieldlist
- js操作
- test_js
- 多表格
- template模板