<?php
|
// 应用公共文件
|
use think\facade\Config;
|
use think\facade\Db;
|
|
/**
|
* 打印调试函数
|
* @param $content
|
* @param $is_die
|
*/
|
function echo_dhklog($content, $beizhu = '', $log_name = '', $type = '')
|
{
|
header('Content-type: text/html; charset=utf-8');
|
$date = Date('Y-m-d');
|
if (is_array($content)) {
|
$content = json_encode($content, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
} else {
|
$content = print_r($content, true);
|
}
|
if (!$log_name) {
|
$log_name = $date;
|
}
|
$log_filename = root_path() . "/runtime/log/" . $log_name . ".log";
|
$logtxt = $log_name . Date('H:i:s') . $beizhu . PHP_EOL . $content . PHP_EOL;
|
if ($type == 'error') {
|
//Log::error($logtxt);
|
} else {
|
//Log::info($logtxt);
|
}
|
file_put_contents($log_filename, $logtxt, FILE_APPEND);
|
}
|
|
/**
|
* 处理数据按照某个字段分类处理
|
*/
|
function datalist($result, $one_field = '', $two_field = '', $ifarr = TRUE)
|
{
|
if (!empty($result) && is_array($result)) {
|
foreach ($result as $value) {
|
if (is_array($one_field)) {
|
$result_arr[$value[$one_field[0]]]['list'][] = $value;
|
$result_arr[$value[$one_field[0]]][$one_field[1]] = $value[$one_field[1]];
|
} else {
|
if (empty($two_field)) {
|
if ($ifarr)
|
$result_arr[strval($value[$one_field])][] = $value;
|
else
|
$result_arr[strval($value[$one_field])] = $value;
|
} else {
|
if ($ifarr)
|
$result_arr[strval($value[$one_field])][$value[$two_field]][] = $value;
|
else
|
$result_arr[$value[$one_field]][$value[$two_field]] = $value;
|
}
|
}
|
}
|
return $result_arr;
|
} else
|
return array();
|
}
|
|
/**
|
* 处理数据按照某个字段分类处理
|
*/
|
function dataField($result, $one_field = '', $two_field = '', $ifarr = TRUE)
|
{
|
if (!is_string($one_field)) {
|
return array();
|
}
|
if (!is_string($two_field)) {
|
return array();
|
}
|
if (!empty($result) && is_array($result)) {
|
foreach ($result as $value) {
|
if ($ifarr)
|
$result_arr[strval($value[$one_field])][] = $value[$two_field];
|
else
|
$result_arr[strval($value[$one_field])] = $value[$two_field];
|
}
|
return $result_arr;
|
} else
|
return array();
|
}
|
|
function datalistinfo($result, $one_field = '', $two_field = '', $ifarr = TRUE)
|
{
|
if (!empty($result) && is_array($result)) {
|
foreach ($result as $value) {
|
if (is_array($one_field)) {
|
////////////$one_field是数组的情况///////////////////
|
if (empty($two_field)) {
|
$result_arr[$value[$one_field[0]]]['list'][] = $value;
|
if (empty($result_arr[$value[$one_field[0]]]['info'])) {
|
$result_arr[$value[$one_field[0]]]['info'] = $value;
|
}
|
} else {
|
////////////处理多层级关系数据
|
$result_arr[$value[$one_field[0]]]['list'][$value[$two_field]]['list'][] = $value;
|
if (empty($result_arr[$value[$one_field[0]]]['list'][$value[$two_field]]['info'])) {
|
$result_arr[$value[$one_field[0]]]['list'][$value[$two_field]]['info'] = $value;
|
}
|
if (empty($result_arr[$value[$one_field[0]]]['info'])) {
|
$result_arr[$value[$one_field[0]]]['info'] = $value;
|
}
|
}
|
} else {
|
if (empty($two_field)) {
|
if ($ifarr)
|
$result_arr[$value[$one_field]][] = $value;
|
else
|
$result_arr[$value[$one_field]] = $value;
|
} elseif (is_array($two_field)) {
|
////////////$two_field是数组的情况///////////////////
|
$result_arr[$value[$one_field]][$value[$two_field[0]]]['list'][] = $value;
|
if (empty($result_arr[$value[$one_field]][$value[$two_field[0]]]['info'])) {
|
$result_arr[$value[$one_field]][$value[$two_field[0]]]['info'] = $value;
|
}
|
} else {
|
if ($ifarr)
|
$result_arr[$value[$one_field]][$value[$two_field]][] = $value;
|
else
|
$result_arr[$value[$one_field]][$value[$two_field]] = $value;
|
}
|
}
|
}
|
return $result_arr;
|
} else
|
return array();
|
}
|
|
function getidlist($result, $one_field = '')
|
{
|
if (!empty($result) && is_array($result)) {
|
foreach ($result as $value) {
|
$result_arr[] = $value[$one_field];
|
}
|
return $result_arr;
|
} else
|
return array();
|
}
|
|
//////将数组中的数字类型转为字符串////////
|
function arrayinttostring($result)
|
{
|
if (!empty($result) && is_array($result)) {
|
foreach ($result as $key => $value) {
|
$result_arr[$key] = (string)$value;
|
}
|
return $result_arr;
|
} else
|
return array();
|
}
|
|
////////获取当前网址/////////
|
function getcurrurl()
|
{
|
$pageurl = 'http://';
|
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
|
$pageurl = 'https://';
|
}
|
$pageurl .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
|
return $pageurl;
|
}
|
|
/**
|
* @method 多维数组转字符串
|
* @return type $srting
|
*/
|
function arraytostring($arr, $delimiter = ',')
|
{
|
if (is_array($arr)) {
|
return implode($delimiter, array_map('arraytostring', $arr));
|
}
|
return $arr;
|
}
|
|
|
/**
|
* 日期转UNIX时间戳
|
*/
|
function to_timestamp($date)
|
{
|
|
return strtotime($date);
|
}
|
|
/**
|
* 数组转成字符串
|
*/
|
function g_implode($array)
|
{
|
if (!empty($array)) {
|
return "'" . implode("','", is_array($array) ? $array : array($array)) . "'";
|
} else {
|
return 0;
|
}
|
}
|
|
function g_implodeid($array)
|
{
|
if (!empty($array)) {
|
return implode(",", is_array($array) ? $array : array($array));
|
} else {
|
return 0;
|
}
|
}
|
|
/**
|
* 数组转成字符串-针对含有多字段按某字段转字符串
|
*/
|
function arrtostr($array, $field)
|
{
|
if (!empty($array)) {
|
$temparr = array();
|
foreach ($array as $value) {
|
$temparr[] = $value[$field];
|
}
|
return implode(",", is_array($temparr) ? $temparr : array($temparr));
|
} else {
|
return '';
|
}
|
}
|
|
/**
|
* 字符串转成数组
|
* @param $str
|
* @param $delimiter
|
* @return string[]|void
|
*/
|
function strtoarray($str = '', $delimiter = ',')
|
{
|
if ($str) {
|
return explode($delimiter, $str);
|
}
|
}
|
|
/**
|
* 模板格式化 对相等情况的处理
|
* @param type $compare1
|
* @param type $compare2
|
* @return string
|
*/
|
function iseq($str, $compare, $eqbackstr = 'selected', $neqbackstr = '')
|
{
|
if (isset($str) && $str == $compare) {
|
return ' ' . $eqbackstr;
|
}
|
return '' . $neqbackstr;
|
}
|
|
function isinarray($str, $compare, $backstr = 'selected', $notinbackstr = '', $space = ' ')
|
{
|
if (is_array($compare)) {
|
if (in_array($str, $compare)) {
|
return $space . $backstr;
|
}
|
} elseif ($compare == '0') {
|
////总账号权限///////
|
return '';
|
}
|
return $space . $notinbackstr;
|
}
|
|
/**
|
* 模板格式化 对不相等情况的处理
|
* @param type $compare1
|
* @param type $compare2
|
* @return string
|
*/
|
////////////////
|
function isneq($str, $compare, $backstr = 'disabled')
|
{
|
if (isset($str) && $str != $compare) {
|
return ' ' . $backstr;
|
}
|
return '';
|
}
|
|
////大于等于///////////////
|
function isegt($str, $compare, $eqbackstr = 'selected', $neqbackstr = '')
|
{
|
if (isset($str) && $str >= $compare) {
|
return ' ' . $eqbackstr;
|
}
|
return '' . $neqbackstr;
|
}
|
|
////大于///////////////
|
function isgt($str, $compare, $eqbackstr = 'selected', $neqbackstr = '')
|
{
|
if (isset($str) && $str > $compare) {
|
return ' ' . $eqbackstr;
|
}
|
return '' . $neqbackstr;
|
}
|
|
////小于等于///////////////
|
function iselt($str, $compare, $eqbackstr = 'selected', $neqbackstr = '')
|
{
|
if (isset($str) && $str <= $compare) {
|
return ' ' . $eqbackstr;
|
}
|
return '' . $neqbackstr;
|
}
|
|
////小于///////////////
|
function islt($str, $compare, $eqbackstr = 'selected', $neqbackstr = '')
|
{
|
if (isset($str) && $str < $compare) {
|
return ' ' . $eqbackstr;
|
}
|
return '' . $neqbackstr;
|
}
|
|
function isempty($str, $emptystr = 'closed-box', $notemptystr = '', $space = ' ')
|
{
|
if (empty($str)) {
|
return $space . $emptystr;
|
}
|
return $space . $notemptystr;
|
}
|
|
|
function is_weixin()
|
{
|
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== FALSE) {
|
return TRUE;
|
}
|
return FALSE;
|
}
|
|
function isMobile()
|
{
|
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
|
if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
|
return TRUE;
|
}
|
// 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
|
if (isset($_SERVER['HTTP_VIA'])) {
|
// 找不到为flase,否则为true
|
return stristr($_SERVER['HTTP_VIA'], "wap") ? TRUE : FALSE;
|
}
|
// 脑残法,判断手机发送的客户端标志,兼容性有待提高
|
if (isset($_SERVER['HTTP_USER_AGENT'])) {
|
$clientkeywords = array(
|
'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'
|
);
|
// 从HTTP_USER_AGENT中查找手机浏览器的关键字
|
if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
|
return TRUE;
|
}
|
}
|
// 协议法,因为有可能不准确,放到最后判断
|
if (isset($_SERVER['HTTP_ACCEPT'])) {
|
// 如果只支持wml并且不支持html那一定是移动设备
|
// 如果支持wml和html但是wml在html之前则是移动设备
|
if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== FALSE) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === FALSE || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
|
return TRUE;
|
}
|
}
|
return FALSE;
|
}
|
|
/////判断是否是苹果机///////////
|
function isiphone()
|
{
|
if (isset($_SERVER['HTTP_USER_AGENT'])) {
|
$clientkeywords = array(
|
'iphone',
|
'ipad',
|
'ipod',
|
);
|
// 从HTTP_USER_AGENT中查找手机浏览器的关键字
|
if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
|
return TRUE;
|
}
|
}
|
return FALSE;
|
}
|
|
//生成随机数
|
function randomnumber($length = 11)
|
{
|
$pattern = '1234567890';
|
$key = '';
|
for ($i = 0; $i < $length; $i++) {
|
$key .= $pattern[mt_rand(0, 9)];
|
}
|
return $key;
|
}
|
|
//生成随机数
|
function randomkeys($length = 4, $str = 'forgetkey')
|
{
|
$pattern = '1234567890';
|
$key = '';
|
for ($i = 0; $i < $length; $i++) {
|
$key .= $pattern[mt_rand(0, 9)];
|
}
|
session($str, $key);
|
session($str . 'time', time());
|
return $key;
|
}
|
|
|
function destroy_session($str = 'forgetkey')
|
{
|
session($str, NULL);
|
session($str . 'time', NULL);
|
}
|
|
|
/** 获取当前时间戳,精确到毫秒 */
|
function microtime_float()
|
{
|
list($usec, $sec) = explode(" ", microtime());
|
return ((float)$usec + (float)$sec);
|
}
|
|
/** 格式化时间戳,精确到毫秒,x代表毫秒 */
|
function microtime_format($tag, $time)
|
{
|
$time = sprintf("%.3f", $time);
|
//echo $time;exit;
|
list($usec, $sec) = explode(".", $time);
|
|
$date = date($tag, $usec);
|
return str_replace('x', $sec, $date);
|
}
|
|
/**
|
* 获取客户端IP地址1
|
* @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
|
* @param boolean $adv 是否进行高级模式获取(有可能被伪装)
|
* @return mixed
|
*/
|
function getIP()
|
{
|
$ip = FALSE;
|
if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
|
$ip = $_SERVER["HTTP_CLIENT_IP"];
|
}
|
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
$ips = explode(", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
|
if ($ip) {
|
array_unshift($ips, $ip);
|
$ip = FALSE;
|
}
|
for ($i = 0; $i < count($ips); $i++) {
|
if (!preg_match("/^(10|172\.16|192\.168)\./i", $ips[$i])) {
|
$ip = $ips[$i];
|
break;
|
}
|
}
|
}
|
return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
|
}
|
|
/**
|
* 获取客户端IP地址2
|
* @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
|
* @param boolean $adv 是否进行高级模式获取(有可能被伪装)
|
* @return mixed
|
*/
|
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];
|
}
|
|
/**
|
* 根据年月日创建目录
|
* $path
|
*/
|
function g_mkdir_ymd($path)
|
{
|
$rooturl = '.';
|
$y = date('/Y');
|
$m = date('/m');
|
$d = date('/d');
|
g_mkdir($rooturl . $path . $y);
|
g_mkdir($rooturl . $path . $y . $m);
|
g_mkdir($rooturl . $path . $y . $m . $d);
|
return $path . $y . $m . $d . '/';
|
}
|
|
/**
|
* 创建目录
|
*/
|
function g_mkdir($dir, $mode = 0777, $makeindex = TRUE)
|
{
|
if (!is_dir($dir)) {
|
|
g_mkdir(dirname($dir));
|
@mkdir($dir, $mode);
|
// if($makeindex) {
|
// @touch($dir.'/index.html');
|
// @chmod($dir.'/index.html', 0777);
|
// }
|
}
|
return TRUE;
|
}
|
|
|
function getstatus($str, $comparestr, $backstr = 'disabled')
|
{
|
if ($str == $comparestr) {
|
return ' ' . $backstr;
|
}
|
return '';
|
}
|
|
/**
|
* 删除文件-图片
|
* $path
|
*/
|
function delpic($str)
|
{
|
if (!empty($str)) {
|
$rooturl = $_SERVER["DOCUMENT_ROOT"];
|
if (file_exists($rooturl . $str)) {
|
unlink($rooturl . $str);
|
}
|
}
|
}
|
|
//////文件地址是否存在/////////////
|
function isexists($str)
|
{
|
if (!empty($str)) {
|
$rooturl = $_SERVER["DOCUMENT_ROOT"];
|
if (file_exists($rooturl . $str)) {
|
return TRUE;
|
} else {
|
return FALSE;
|
}
|
} else {
|
return FALSE;
|
}
|
}
|
|
|
//判断数组是否为空
|
function is_empty($d)
|
{
|
if (is_array($d)) {
|
foreach ($d as $k => $v) {
|
if (is_array($v)) {
|
return is_empty($v);
|
} else {
|
if (strlen($v) > 0) {
|
return FALSE;
|
}
|
}
|
}
|
} else {
|
if (strlen($d) > 0) {
|
return FALSE;
|
}
|
}
|
return TRUE;
|
}
|
|
|
function isint($str = 0)
|
{
|
return preg_match("/^\d*$/", $str);
|
}
|
|
|
function joinmd5($pwd)
|
{
|
return md5(Config::get('app.md5_str') . $pwd);
|
}
|
|
|
function verifyphone($str = '')
|
{
|
if (!empty($str)) {
|
if (preg_match("/^[1689][3456789]\d{9}$/i", $str)) {
|
return TRUE;
|
} else
|
return FALSE;
|
} else
|
return FALSE;
|
}
|
|
|
/**
|
* GET 请求
|
* @param string $url
|
*/
|
function ihttpget($url)
|
{
|
$oCurl = curl_init();
|
if (stripos($url, "https://") !== FALSE) {
|
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
|
}
|
curl_setopt($oCurl, CURLOPT_URL, $url);
|
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
|
$sContent = curl_exec($oCurl);
|
$aStatus = curl_getinfo($oCurl);
|
curl_close($oCurl);
|
if (intval($aStatus["http_code"]) == 200) {
|
return $sContent;
|
} else {
|
return FALSE;
|
}
|
}
|
|
/**
|
* POST 请求
|
* @param string $url
|
* @param array $param
|
* @return string content
|
*/
|
function ihttppost($url, $param, $header = array())
|
{
|
$oCurl = curl_init();
|
if (stripos($url, "https://") !== FALSE) {
|
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
|
}
|
if (is_string($param)) {
|
$strPOST = $param;
|
} else {
|
$aPOST = array();
|
foreach ($param as $key => $val) {
|
$aPOST[] = $key . "=" . urlencode($val);
|
}
|
$strPOST = join("&", $aPOST);
|
}
|
curl_setopt($oCurl, CURLOPT_URL, $url);
|
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
|
curl_setopt($oCurl, CURLOPT_POST, TRUE);
|
curl_setopt($oCurl, CURLOPT_POSTFIELDS, $strPOST);
|
if ($header) {
|
curl_setopt($oCurl, CURLOPT_HTTPHEADER, $header);
|
}
|
$sContent = curl_exec($oCurl);
|
$aStatus = curl_getinfo($oCurl);
|
curl_close($oCurl);
|
if (intval($aStatus["http_code"]) == 200) {
|
return $sContent;
|
} else {
|
return FALSE;
|
}
|
}
|
|
|
function getext($file)
|
{
|
return pathinfo($file, PATHINFO_EXTENSION);
|
}
|
|
function pr($str = '')
|
{
|
print_r($str);
|
//exit;
|
}
|
|
function getbr($str)
|
{
|
if (!empty($str)) {
|
$str = str_replace(chr(13) . chr(10), '<br>', $str);
|
}
|
return $str;
|
}
|
|
|
//////获取当前日期时间戳/////////////
|
function getcurrdate()
|
{
|
return strtotime(date('Y-m-d', time()));
|
}
|
|
|
/**
|
* 简单的URL验证函数
|
* @param $url
|
* @return bool
|
*/
|
function isValidUrl($url): bool
|
{
|
// 请根据实际需要实现更复杂的验证逻辑
|
return filter_var($url, FILTER_VALIDATE_URL) !== FALSE;
|
}
|
|
/*
|
* 获取当前语言
|
*/
|
function getLanguage($lang = 'zh-cn')
|
{
|
switch ($lang) {
|
case 'zh-cn':
|
return '中文';
|
break;
|
case 'en-us':
|
return 'English';
|
|
case 'ar':
|
return 'عربي';
|
break;
|
// 更多的 case 语句
|
default:
|
return '中文';
|
}
|
}
|
|
// 单位自动转换函数-传字节
|
function getsizebytype($size = 0)
|
{
|
$kb = 1024; // Kilobyte
|
$mb = 1024 * $kb; // Megabyte
|
$gb = 1024 * $mb; // Gigabyte
|
$tb = 1024 * $gb; // Terabyte
|
if (!is_numeric($size)) {
|
return "0 B";
|
} else if ($size < $kb) {
|
return $size . " B";
|
} else if ($size < $mb) {
|
return round($size / $kb, 2) . " KB";
|
} else if ($size < $gb) {
|
return round($size / $mb, 2) . " MB";
|
} else if ($size < $tb) {
|
return round($size / $gb, 2) . " GB";
|
} else {
|
return round($size / $tb, 2) . " TB";
|
}
|
}
|
|
// 获取文件大小,单位字节
|
function getfileSize($filedir)
|
{
|
if (!file_exists($filedir)) {
|
return 0;
|
}
|
$size = abs(filesize($filedir));
|
return $size;
|
}
|
|
/**
|
*
|
* @return array|mixed|object|\think\App
|
* @throws \think\db\exception\DataNotFoundException
|
* @throws \think\db\exception\DbException
|
* @throws \think\db\exception\ModelNotFoundException
|
*/
|
function get_category()
|
{
|
$list = Db::name('category')->field('id,cate_code,cate_name')->cacheAlways(TRUE, 0, 'allcategory')->order('id asc')->select()->toArray();
|
return $list;
|
}
|
|
/**
|
* 生成平台商品编码
|
*/
|
function get_platform_goods_code()
|
{
|
$where[] = ['add_time', '>', getcurrdate()];
|
$count = Db::name('goods')->where($where)->count(); //获取当天新增商品数量
|
if ($count > 0) {
|
$count = $count + 1;
|
} else {
|
$count = 1;
|
}
|
$code = 'P' . substr(date('Ymd'), 2) * 10000 + $count;
|
return $code;
|
}
|
|
/**
|
* 生成刊登单号
|
*/
|
function get_publish_order_code()
|
{
|
$where[] = ['add_time', '>', getcurrdate()];
|
$count = Db::name('publish_order')->where($where)->count(); //获取当天新增商品数量
|
if ($count > 0) {
|
$count = $count + 1;
|
} else {
|
$count = 1;
|
}
|
$code = 'KD' . substr(date('Ymd'), 2) * 10000 + $count;
|
return $code;
|
}
|
|
/**
|
* 生成随机数
|
* @return int
|
*/
|
function create_random()
|
{
|
$appDebug = env('app_debug');
|
return $appDebug ? rand(1000, 9999) : 1;
|
}
|
|
//无限极分类转为带有 children的树形list表格结构
|
if (!function_exists('_generateListTree')) {
|
function _generateListTree($data, $pid = 0, $config = [])
|
{
|
$tree = [];
|
if ($data && is_array($data)) {
|
foreach ($data as $v) {
|
if ($v[$config[1]] == $pid) {
|
$tree[] = array_merge($v, ['children' => _generateListTree($data, $v[$config[0]], $config)]);
|
}
|
}
|
}
|
return $tree;
|
}
|
}
|
|
function isValidChineseMobile($phoneNumber)
|
{
|
// 中国手机号码的正则表达式
|
$pattern = '/^1(3|4|5|6|7|8|9)\d{9}$/';
|
|
// 使用preg_match函数进行匹配
|
if (preg_match($pattern, $phoneNumber)) {
|
return TRUE;
|
} else {
|
return FALSE;
|
}
|
}
|
|
function getNextTimestamp($timestamp, $years = 0, $months = 0, $days = 0)
|
{
|
// 将时间戳转换为DateTime对象
|
$dateTime = new DateTime('@' . $timestamp);
|
|
// 创建DateInterval对象
|
// 注意:由于PHP的DateInterval没有直接支持年和月的同时增加,我们需要分别处理
|
// 但为了示例的简洁性,这里我们假设用户会正确设置参数(即不会同时增加月和年导致复杂情况)
|
$interval = new DateInterval("P{$years}Y{$months}M{$days}D");
|
|
// 给DateTime对象加上时间间隔
|
$dateTime->add($interval);
|
|
// 将修改后的DateTime对象转换回时间戳
|
return $dateTime->getTimestamp();
|
}
|
|
|
/**
|
* 截取中文字符串
|
*
|
* @param string $str 需要截取的字符串
|
* @param int $start 起始位置(从0开始)
|
* @param int $length 需要截取的长度,如果为null或未设置,则截取到字符串末尾
|
* @param string $encoding 字符串编码,默认为'UTF-8'
|
* @return string 截取后的字符串
|
*/
|
function mb_substr_chinese($str, $start = 0, $length = NULL, $encoding = 'UTF-8', $suffix = '')
|
{
|
if (is_null($length)) {
|
// 如果未指定长度,则截取到字符串末尾
|
return mb_substr($str, $start, mb_strlen($str, $encoding), $encoding);
|
}
|
if (mb_strlen($str, $encoding) > $length) {
|
return mb_substr($str, $start, $length, $encoding) . $suffix;
|
} else {
|
return mb_substr($str, $start, $length, $encoding);
|
}
|
}
|
|
function formatDateTime($format, $timeStamp)
|
{
|
return date($format, $timeStamp);
|
}
|
|
function getCosName($file)
|
{
|
if ($file) {
|
return ltrim($file, "/");
|
} else {
|
return '';
|
}
|
}
|
|
//当前请求是否https
|
function isHttps()
|
{
|
if (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {
|
return TRUE;
|
} elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
|
return TRUE;
|
} elseif (!empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') {
|
return TRUE;
|
}
|
return FALSE;
|
}
|
|
function getfileurl($file, $iscos = 0)
|
{
|
if ($iscos == '1') {
|
$filepath = 'https://yifire-1328541130.cos.ap-chongqing.myqcloud.com' . $file;
|
return $filepath;
|
} else {
|
return $file;
|
}
|
}
|
|
/*
|
* 去除html标签
|
*/
|
function deletehtml($str)
|
{
|
$str = trim($str);
|
$str = strip_tags($str, "");
|
$str = preg_replace("/\t/", "", $str);
|
$str = preg_replace("/\r\n/", "", $str);
|
$str = preg_replace("/\r/", "", $str);
|
$str = preg_replace("/\n/", "", $str);
|
$str = preg_replace("/ /", " ", $str);
|
return trim($str);
|
}
|
/*
|
* 获取申请编号
|
*/
|
function get_apply_sn($prefix = 'CNLS')
|
{
|
$rand = rand(1000, 9999);
|
$order_sn = date('YmdHis') . formatId($rand);
|
return $order_sn;
|
}
|
|
/**
|
* 格式化ID
|
* @param $id
|
* @return string
|
*/
|
function formatId($id, $length = 6)
|
{
|
return str_pad($id, $length, '0', STR_PAD_LEFT);
|
}
|
|
function convertISO8601ToBeijingTime($iso8601Date)
|
{
|
// 创建一个 DateTime 对象
|
$date = new DateTime($iso8601Date, new DateTimeZone('UTC'));
|
|
// 将时区设置为北京时间(UTC+8)
|
$date->setTimezone(new DateTimeZone('Asia/Shanghai'));
|
|
// 格式化日期为所需格式,例如 'Y-m-d H:i:s'
|
$formattedDate = $date->format('Y-m-d H:i:s');
|
|
return $formattedDate;
|
}
|
|
function convertISO8601ToChineseBeijingTime($iso8601Date)
|
{
|
$date = new DateTime($iso8601Date, new DateTimeZone('UTC'));
|
$date->setTimezone(new DateTimeZone('Asia/Shanghai'));
|
|
// 获取星期几(中文)
|
$dayOfWeekMap = [
|
'Sunday' => '周日',
|
'Monday' => '周一',
|
'Tuesday' => '周二',
|
'Wednesday' => '周三',
|
'Thursday' => '周四',
|
'Friday' => '周五',
|
'Saturday' => '周六'
|
];
|
$chineseDayOfWeek = $dayOfWeekMap[$date->format('l')];
|
|
// 获取格式化后的日期部分(不包括时间)
|
$formattedDate = $date->format('Y年m月d日');
|
|
// 确定时区缩写
|
$timezoneAbbreviation = 'CST';
|
|
// 手动拼接结果字符串
|
$result = $formattedDate . ' ' . $chineseDayOfWeek . ' ' . $timezoneAbbreviation;
|
|
return $result;
|
}
|
|
function isPDT($date)
|
{
|
// 这是一个简化的示例,用于判断给定日期是否在PDT期间
|
// 实际的PDT规则可能因年份而异,这里只是演示
|
$year = $date->format('Y');
|
$startPDT = new DateTime("$year-03-14 02:00:00", new DateTimeZone('UTC')); // PDT开始时间(UTC时间)
|
$endPDT = new DateTime("$year-11-07 02:00:00", new DateTimeZone('UTC')); // PDT结束时间(UTC时间,注意这通常是夏令时结束前一晚的2点,即实际夏令时结束是在第二天的凌晨)
|
$dateInUTC = clone $date; // 克隆日期对象以避免修改原始对象
|
$dateInUTC->setTimezone(new DateTimeZone('UTC')); // 将日期转换为UTC时间
|
|
// 检查日期是否在PDT范围内(基于UTC时间)
|
return ($dateInUTC >= $startPDT && $dateInUTC < $endPDT);
|
}
|
|
function convertISO8601ToChineseFormatWithTimezone($iso8601Date)
|
{
|
$date = new DateTime($iso8601Date, new DateTimeZone('UTC'));
|
|
// 根据日期判断是PST还是PDT,并转换为北京时间
|
$isPDT = isPDT($date);
|
$pacificTimezone = $isPDT ? 'America/Los_Angeles' : 'PST8PDT'; // 太平洋时区(考虑夏令时)
|
$date->setTimezone(new DateTimeZone($pacificTimezone)); // 先转换到太平洋时区(为了获取正确的星期几)
|
|
// 但最终我们需要显示的是北京时间,所以再转换一次
|
$beijingTimezone = new DateTimeZone('Asia/Shanghai'); // 北京时间
|
$dateInBeijing = clone $date; // 克隆以避免修改原始日期对象
|
$dateInBeijing->setTimezone($beijingTimezone);
|
|
// 获取星期几(中文)
|
$dayOfWeekMap = [
|
'Sunday' => '周日',
|
'Monday' => '周一',
|
'Tuesday' => '周二',
|
'Wednesday' => '周三',
|
'Thursday' => '周四',
|
'Friday' => '周五',
|
'Saturday' => '周六'
|
];
|
$chineseDayOfWeek = $dayOfWeekMap[$dateInBeijing->format('l')]; // 注意这里使用北京时间来确定星期几,但实际上与太平洋时间相同日期星期几是一样的
|
|
// 获取格式化后的日期部分(北京时间,不包括时间)
|
$formattedDate = $dateInBeijing->format('Y年m月d日 H:i');
|
|
// 确定太平洋时间的时区缩写(用于显示)
|
$timezoneAbbreviation = $isPDT ? 'PDT' : 'PST';
|
|
// 手动拼接结果字符串
|
$result = $formattedDate . ' ' . $chineseDayOfWeek . ' ' . $timezoneAbbreviation;
|
|
return $result;
|
}
|
|
if (!function_exists('encryptUrlParam')) {
|
function encryptUrlParam($param)
|
{
|
$key = Config::get('other.Crypt.Key');
|
$iv = Config::get('other.Crypt.Iv');
|
return base64_encode(openssl_encrypt($param, 'aes-256-cbc', $key, 0, $iv));
|
}
|
}
|
|
if (!function_exists('decryptUrlParam')) {
|
function decryptUrlParam($encryptedParam)
|
{
|
$key = Config::get('other.Crypt.Key');
|
$iv = Config::get('other.Crypt.Iv');
|
return openssl_decrypt(base64_decode($encryptedParam), 'aes-256-cbc', $key, 0, $iv);
|
}
|
}
|
/*
|
* 多语言替换
|
*/
|
function get_langs_data($langsStr, $lang)
|
{
|
//多语言替换
|
$langs = json_decode($langsStr, TRUE);
|
if (!$langs) {
|
return [];
|
}
|
// 使用array_filter筛选数组
|
$data = array_filter($langs, function ($item) use ($lang) {
|
return $item['lang'] === $lang;
|
});
|
$keys = array_keys($data);
|
return $data[$keys[0]];
|
}
|
|
/**
|
* response error
|
* @param string $info
|
* @param int $status
|
* @return \think\response\Json
|
*/
|
function dhkMsg($info, $status = 0)
|
{
|
return dhkResult([], $info, $status);
|
}
|
function dhkSuccess($data = [], $status = 200)
|
{
|
return dhkResult($data, 'Successfully', $status);
|
}
|
function dhkResult($result = [], $msg = 'Successfully', $code = 200)
|
{
|
if (preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $msg)) {
|
$lang_info = \app\seller\model\LanguagePage::where('lang', 'zh-cn')->where('value', $msg)->find();
|
if ($lang_info) {
|
$msg = $lang_info['type'] . '.' . $lang_info['name'];
|
}
|
}
|
$rsarr = [
|
'code' => $code,
|
'message' => $msg,
|
'msg' => $msg,
|
'data' => $result,
|
'success' => $code == 1 ? true : false,
|
'time' => time()
|
];
|
return json($rsarr);
|
}
|
/*
|
* 获取图片路径是用本地还是cos
|
*/
|
function get_img_url($img)
|
{
|
if (Config::get('qcloud.isopencos') == 1) {
|
return Config::get('qcloud.cos_domain') . $img;
|
} else {
|
return $img;
|
}
|
}
|