// +---------------------------------------------------------------------- use think\Db; // 应用公共文件 if (!function_exists('datetime')) { function datetime($time, $format = 'Y-m-d H:i:s') { $time = is_numeric($time) ? $time : strtotime($time); return date($format, $time); } } function ajaxReturn($code, $msg = "", $data = "") { header("content:application/json;chartset=uft-8"); $return = ['code' => $code, 'msg' => $msg, 'data' => $data]; //return json($return); echo json_encode($return); exit(); } function validate_param_sign($data, $login_token) { return ['code' => 200, 'msg' => '参数合法', 'data' => null]; $app_debug = config('app.app_debug'); if (config('app.app_debug')) { return ['code' => 200, 'msg' => '参数合法', 'data' => null]; } if (empty($data['sign'])) { if ($app_debug) { return ['code' => 201, 'msg' => 'sign参数不存在', 'data' => null]; } return ['code' => 201, 'msg' => '参数非法', 'data' => null]; } if (empty($data['timestamp'])) { if ($app_debug) { return ['code' => 201, 'msg' => 'timestamp参数不存在', 'data' => null]; } return ['code' => 201, 'msg' => '参数非法', 'data' => null]; } if (!$app_debug) { if (time() - $data['timestamp'] > 5) { return ['code' => 201, 'msg' => '参数非法', 'data' => null]; } } $sign = $data['sign']; unset($data['sign']); ksort($data); $param_sign = md5(http_build_query($data) . $login_token); if ($param_sign != $sign) { if ($app_debug) { return ['code' => 201, 'msg' => "验签失败,正确sing值:$param_sign", 'data' => null]; } return ['code' => 201, 'msg' => '参数非法', 'data' => null]; } return ['code' => 200, 'msg' => '参数合法', 'data' => null]; } //生成随机数 function generateRandom($num = 0) { $code = strtolower('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789'); $str = ''; for ($i = 0; $i < $num; $i++) { $str .= $code[mt_rand(0, strlen($code) - 1)]; } return $str; } //判断文件夹是否存在不存在则创建 function mkdirs($dir, $mode = 0777) { if (is_dir($dir) || @mkdir($dir, $mode)) { return true; } if (!mkdirs(dirname($dir), $mode)) { return false; } return @mkdir($dir, $mode); } //获取系统配置信息 function get_system_config($key = "") { return model('admin/Config')->get_system_config($key); } //获取系统配置信息 function get_uncache_system_config($key = "") { return model('admin/Config')->get_uncache_system_config($key); } //本地地址转换为网络地址 function localpath_to_netpath($path) { $config = get_system_config(); if (empty($path)) { return ''; } elseif (strrpos($path, 'http') !== false) { return $path; } else { $static_resource_url = ''; if ($config['file_upload_type'] == 1) { $static_resource_url = $config['loacl_resource_url']; } elseif ($config['file_upload_type'] == 2) { $static_resource_url = $config['qiniu_cdn_url']; }elseif($config['file_upload_type'] == 3) { $static_resource_url = $config['tencent_cdn_url']; } $path = str_replace("\\", "/", $path); $path = $static_resource_url . $path; } return $path; } //根据IP地址转换为地理位置 function ip_to_position($ip) { $Ip2Region = new \Ip2Region\Ip2Region(); $reslut = $Ip2Region->memorySearch($ip); $data = explode('|', $reslut['region']); return ['country' => $data[0], 'province' => $data[2], 'city' => $data[3]]; } function myCurl($url, $post_data = array(), $header = array(), $cookie = "") { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出 $curl_header = array(); if (!empty($header)) { foreach ($header as $k => $v) { $curl_header[] = "$k:$v"; } curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_header); } if (!empty($post_data)) { curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data)); } if (!empty($cookie)) { curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); } curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $result = curl_exec($ch); curl_close($ch); return $result; } function get_content_description($content, $str_len = 10) { $post_excerpt = strip_tags(htmlspecialchars_decode($content)); $post_excerpt = trim($post_excerpt); $patternArr = array('/\s/', '/ /'); $replaceArr = array('', ''); $post_excerpt = preg_replace($patternArr, $replaceArr, $post_excerpt); return mb_strcut($post_excerpt, 0, $str_len, 'utf-8'); } function add_operation($type, $uid) { $data = []; $data['type'] = $type; $data['id'] = $uid; $data['url'] = request()->url(true); $data['param'] = json_encode(request()->param()); $data['header'] = json_encode(request()->header()); $data['user_agent'] = json_encode(request()->header('user-agent')); $data['add_ip'] = request()->ip(); $address = ip_to_position($data['add_ip']); $data['country'] = $address['country']; $data['province'] = $address['province']; $data['city'] = $address['city']; $data['add_time'] = time(); db::name('operation')->insert($data); } function formatBytes($size) { $units = array(' B', ' KB', ' MB', ' GB', ' TB'); for ($i = 0; $size >= 1024 && $i < 4; $i++) { $size /= 1024; } return round($size, 2) . $units[$i]; } function removeEmoji($clean_text) { // Match Emoticons $regexEmoticons = '/[\x{1F600}-\x{1F64F}]/u'; $clean_text = preg_replace($regexEmoticons, '', $clean_text); // Match Miscellaneous Symbols and Pictographs $regexSymbols = '/[\x{1F300}-\x{1F5FF}]/u'; $clean_text = preg_replace($regexSymbols, '', $clean_text); // Match Transport And Map Symbols $regexTransport = '/[\x{1F680}-\x{1F6FF}]/u'; $clean_text = preg_replace($regexTransport, '', $clean_text); // Match Miscellaneous Symbols $regexMisc = '/[\x{2600}-\x{26FF}]/u'; $clean_text = preg_replace($regexMisc, '', $clean_text); // Match Dingbats $regexDingbats = '/[\x{2700}-\x{27BF}]/u'; $clean_text = preg_replace($regexDingbats, '', $clean_text); return $clean_text; } function connectionRedis() { $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // $redis->auth('zzzdjsadbg444vskjvf'); return $redis; } //redis 锁 默认锁定60s function redis_lock($key, $value = 1, $time = 5) { // return true; $redis = connectionRedis(); $is_lock = $redis->setnx($key, $value); if ($is_lock) { $redis->setex($key, $time, $value); return true; } else { return false; return ajaxReturn(302, '访问频繁,请稍后重试', []); } } function redis_lock_exit($key, $value = 1, $time = 5) { // return true; $redis = connectionRedis(); $is_lock = $redis->setnx($key, $value); if (!$is_lock) { return ajaxReturn(302, '访问频繁,请稍后重试', []); } else { $redis->setex($key, $time, $value); return true; } } function redis_locks_exit($key, $value = 1, $time = 2) { // return true; $redis = connectionRedis(); $is_lock = $redis->setnx($key, $value); if (!$is_lock) { return ajaxReturn(302, '', []); } else { $redis->setex($key, $time, $value); return true; } } function redis_lock_exits($key, $value = 1, $time = 10) { // return true; $redis = connectionRedis(); $is_lock = $redis->setnx($key, $value); if (!$is_lock) { return false; } else { $redis->setex($key, $time, $value); return true; } } function redis_unlock($key) { // return true; $redis = connectionRedis(); $redis->del($key); return true; } function set_ip(){ $redis = connectionRedis(); $IP = get_real_ip(); echo '【当前IP:'.$IP."】
其它IP:
"; $IP = 'ip:'.$IP; $t = 60*60*24; $ts = date('Y-m-d H:i:s'); // $redis->del($IP);exit; $redis->set($IP, $ts, $t); //$redis->pexpire($IP, $t); $list = $redis->Keys('ip:*'); foreach($list as $val){ echo $val."
"; } } function set_ips($ip){ $redis = connectionRedis(); $IP = $ip; echo '【当前IP:'.$IP."】
其它IP:
"; $IP = 'ip:'.$IP; $t = 60*60*24; $ts = date('Y-m-d H:i:s'); // $redis->del($IP);exit; $redis->set($IP, $ts, $t); //$redis->pexpire($IP, $t); $list = $redis->Keys('ip:*'); foreach($list as $val){ echo $val."
"; } } function del_ip($ip){ $redis = connectionRedis(); $ip = 'ip:'.$ip; $redis->del($ip); $list = $redis->Keys('ip:*'); foreach($list as $val){ echo $val."
"; } } function has_ip(){ $redis = connectionRedis(); $IP = get_real_ip(); $IP = 'ip:'.$IP; if($redis->exists($IP)){ return true; } return false; } function get_real_ip() { static $realip; if (isset($_SERVER)) { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $realip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { if (isset($_SERVER['HTTP_CLIENT_IP'])) { $realip = $_SERVER['HTTP_CLIENT_IP']; } else { $realip = $_SERVER['REMOTE_ADDR']; } } } else { if (getenv('HTTP_X_FORWARDED_FOR')) { $realip = getenv('HTTP_X_FORWARDED_FOR'); } else { if (getenv('HTTP_CLIENT_IP')) { $realip = getenv('HTTP_CLIENT_IP'); } else { $realip = getenv('REMOTE_ADDR'); } } } return $realip; } /** * @desc arraySort php二维数组排序 按照指定的key 对数组进行自然排序 * @param array $arr 将要排序的数组 * @param string $keys 指定排序的key * @param string $type 排序类型 asc | desc * @return array */ function arraySort($arr, $keys, $type = 'asc') { $keysvalue = $new_array = array(); foreach ($arr as $k => $v) { $keysvalue[$k] = $v[$keys]; } $type == 'asc' ? asort($keysvalue) : arsort($keysvalue); foreach ($keysvalue as $k => $v) { $new_array[$k] = $arr[$k]; } return $new_array; } function secondary_password(){ $password = md5('159357'); return $password; } function check_password_format($password) { // $password=132; //正则验证 密码必须包含数字、字母以及特殊字符,长度8-20位 $rule = "/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,12}$/"; if (!preg_match($rule,$password)) { return ['code' => 201, 'msg' => '密码必须包含数字、字母以及特殊字符,长度8-12位', 'data' => null]; } //键盘连续字符活数字 $str_continuities = array( "1234567890 0987654321", //数字倒序 "qwertyuiop asdfghjkl zxcvbnm QWERTYUIOP ASDFGHJKL ZXCVBNM", //主键盘顺序 "poiuytrewq lkjhgfdsa mnbvcxz POIUYTREWQ LKJHGFDSA MNBVCXZ", //主键盘逆序 "qaz wsx edc rfv tgb yhn ujm QAZ WSX EDC RFV TGB YHN UJM",//主键盘正向斜 "zaq xsw cde vfr bgt nhy mju ZAQ XSW CDE VFR BGT NHY MJU",//主键盘正向斜逆序 "esz rdx tfc ygv uhb ijn okm OKM IJN UHB YGV TFC RDX ESZ",//主键盘反向斜 "zse xdr cft vgy bhu nji mko MKO NJI BHU VGY CFT XDR ZSE",//主键盘反向斜逆序 "147 369 258 852 963 741" //小键盘 //特殊字符不计算在内 否则无休止 ); //$last_char = ""; $list_char_3 = "";//连续三个字符 $chars =preg_split('/(?= 3) { $list_char_3 = substr($list_char_3, strlen($list_char_3) - 3, 3); foreach ($str_continuities as $str_continuity) { if (strpos($str_continuity, $list_char_3) !== false) { // return '密码不能包括连续的3个字符键盘键位'; return ['code' => 201, 'msg' => '密码不能包含连续的3个字符键位', 'data' => null]; } } } } return ['code' => 200, 'msg' => '通过', 'data' => null]; } function sha256($code){ return hash('sha256', $code); } function isMobile($mobile) { $pattern = '/^1\d{10}/'; if(preg_match($pattern, $mobile)) { return true; } else { return false; } } function isCardId($card_id) { $pattern = '/^[1-9]d{5}(19|20)d{2}((0[1-9])|(1[0-2]))((0[1-9])|([1-2]d)|(3[0-1]))d{3}[0-9xX]$/'; if(preg_match($pattern, $id_number)) { return true; } else { return false; } } function getAgeId($id){ if(empty($id)){ return false; } $idcard_len = strlen($id); if(!in_array($idcard_len,array(15,18))){ return false; } $date = strtotime(substr($id, 6, 8)); $today = strtotime('today'); $diff = floor(($today - $date) / 86400 / 364); $age = strtotime(substr($id, 6, 8) . '+' . $diff . 'years') > $today ? ($diff + 1) : $diff; $age = (int)$age; if($age >= 18){ return true; }else{ return false; } } //获取静态资源路径 function get_filepath_url() { $config = get_system_config(); $static_resource_url = ''; if ($config['file_upload_type'] == 1) { $static_resource_url = $config['loacl_resource_url']; } elseif ($config['file_upload_type'] == 2) { $static_resource_url = $config['qiniu_cdn_url']; } elseif($config['file_upload_type'] == 3) { $static_resource_url = $config['tencent_cdn_url']; } return $static_resource_url; } //过滤符号 function strFilter($str){ $str = str_replace('`', '', $str); $str = str_replace('·', '', $str); $str = str_replace('~', '', $str); $str = str_replace('!', '', $str); $str = str_replace('!', '', $str); $str = str_replace('@', '', $str); $str = str_replace('#', '', $str); $str = str_replace('$', '', $str); $str = str_replace('¥', '', $str); $str = str_replace('%', '', $str); $str = str_replace('^', '', $str); $str = str_replace('……', '', $str); $str = str_replace('&', '', $str); $str = str_replace('*', '', $str); $str = str_replace('(', '', $str); $str = str_replace(')', '', $str); $str = str_replace('(', '', $str); $str = str_replace(')', '', $str); $str = str_replace('-', '', $str); $str = str_replace('_', '', $str); $str = str_replace('——', '', $str); $str = str_replace('+', '', $str); $str = str_replace('=', '', $str); $str = str_replace('|', '', $str); $str = str_replace('\\', '', $str); $str = str_replace('[', '', $str); $str = str_replace(']', '', $str); $str = str_replace('【', '', $str); $str = str_replace('】', '', $str); $str = str_replace('{', '', $str); $str = str_replace('}', '', $str); $str = str_replace(';', '', $str); $str = str_replace(';', '', $str); $str = str_replace(':', '', $str); $str = str_replace(':', '', $str); $str = str_replace('\'', '', $str); $str = str_replace('"', '', $str); $str = str_replace('“', '', $str); $str = str_replace('”', '', $str); $str = str_replace(',', '', $str); $str = str_replace(',', '', $str); $str = str_replace('<', '', $str); $str = str_replace('>', '', $str); $str = str_replace('《', '', $str); $str = str_replace('》', '', $str); $str = str_replace('.', '', $str); $str = str_replace('。', '', $str); $str = str_replace('/', '', $str); $str = str_replace('、', '', $str); $str = str_replace('?', '', $str); $str = str_replace('?', '', $str); $str = str_replace(' ', '', $str); return trim($str); } /** * 全局交易币 默认小数点后截取4位小数(4位后不进行四舍五入) * 处理小数点位数 */ if (!function_exists('del_coin_num')) { function del_coin_num($data, $num = 4) { $data = sprintf("%.{$num}f", substr(sprintf("%." . ($num + 1) . "f", $data), 0, -1)); return $data; } } /** * 验签处理 */ function validate_sign($app_sign, $timestamp) { $time = time(); $last_time = abs($time - $timestamp); if($last_time > 300) { return ['code' => 201, 'msg' => '网络错误1', 'data' => null]; } if(empty($app_sign)) { return ['code' => 201, 'msg' => '网络错误2', 'data' => null]; } $md5_key = config('md5_sign.md5_key'); $base_str = base64_encode($md5_key) . $timestamp; $signs = base64_encode(md5($base_str)); if($signs != $app_sign) { return ['code' => 201, 'msg' => '网络错误3', 'data' => null]; } return ['code' => 200, 'msg' => '验签成功', 'data' => null]; } function generateRandomPhoneNumber() { $prefix = array("131", "141", "153", "164", "178", "189", "192"); $randomPrefix = $prefix[array_rand($prefix)]; $randomNumber = mt_rand(1000, 9999) . mt_rand(1000, 9999); return $randomPrefix . $randomNumber; }