工具类的代码

error_reporting(E_ERROR | E_WARNING | E_PARSE);

//判断是否是手机号

function check_mobile($str)

{

return preg_match('/^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|70|76|77)\d{8}$/', $str) ? true : false;

}

//判断是否是手机,简单判断

function check_mobile2($str)

{

return preg_match('/^1\d{10}$/', $str) ? true : false;

}

//判断字符大小写字母+数字

function check_str($str)

{

return preg_match('/^[A-Za-z0-9]+$/', $str) ? true : false;

}

//判断字符大写字母+数字

function check_str_capital_num($str)

{

return preg_match('/^[A-Z0-9]+$/', $str) ? true : false;

}

//判断字符小写字母+数字

function check_str_small_num($str)

{

return preg_match('/^[a-z0-9]+$/', $str) ? true : false;

}

//判断是否是邮箱

function check_email($str)

{

return preg_match('/^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,5}$/', $str) ? true : false;

}

//判断是否是中文

function check_name($str)

{

return preg_match('/^[\x{4e00}-\x{9fa5}]{2,10}$/u', $str) ? true : false;

}

//判断是否是链接,简单判断

function check_url($str)

{

return preg_match('/^(http|ftp|https):\/\/.*$/', $str) ? true : false;

}

//判断是否是QQ

function check_qq($str)

{

return preg_match('/^\d{5,}$/', $str) ? true : false;

}

/**

  • 构建层级(树状)数组
  • @param array $array 要进行处理的一维数组,经过该函数处理后,该数组自动转为树状数组
  • @param string $pid_name 父级ID的字段名
  • @param string $child_key_name 子元素键名
  • @return array|bool */

function array2tree(&$array, $pid_name = 'pid', $child_key_name = 'children')

{

$counter = array_children_count($array, $pid_name);

if (!isset($counter[0]) || $counter[0] == 0) {

    return $array;

}

$tree = [];

while (isset($counter[0]) && $counter[0] > 0) {

    $temp = array_shift($array);

    if (isset($counter[$temp['id']]) && $counter[$temp['id']] > 0) {

        array_push($array, $temp);

    } else {

        if ($temp[$pid_name] == 0) {

            $tree[] = $temp;

        } else {

            $array = array_child_append($array, $temp[$pid_name], $temp, $child_key_name);

        }

    }

    $counter = array_children_count($array, $pid_name);

}



return $tree;

}

/**

  • 子元素计数器
  • @param array $array
  • @param int $pid
  • @return array */

function array_children_count($array, $pid)

{

$counter = [];

foreach ($array as $item) {

    $count = isset($counter[$item[$pid]]) ? $counter[$item[$pid]] : 0;

    $count++;

    $counter[$item[$pid]] = $count;

}



return $counter;

}

/**

  • 把元素插入到对应的父元素$child_key_name字段
  • @param $parent
  • @param $pid
  • @param $child
  • @param string $child_key_name 子元素键名
  • @return mixed */

function array_child_append($parent, $pid, $child, $child_key_name)

{

foreach ($parent as &$item) {

    if ($item['id'] == $pid) {

        if (!isset($item[$child_key_name]))

            $item[$child_key_name] = [];

        $item[$child_key_name][] = $child;

    }

}



return $parent;

}

/**

  • 对树进行排序 */

function tree_sort_by($tree, $child_key_name = 'children', $field='sort', $sortby = 'asc')

{

foreach ($tree as $key => $value) {

    if (!empty($value[$child_key_name])) {

        $tree[$key][$child_key_name] = tree_sort_by($value[$child_key_name]);

    }

}

return list_sort_by($tree, $field, $sortby);

}

/**

  • 对查询结果集进行排序
  • @access public
  • @param array $list 查询结果
  • @param string $field 排序的字段名
  • @param array $sortby 排序类型
  • asc正向排序 desc逆向排序 nat自然排序
  • @return array */

function list_sort_by($list, $field, $sortby = 'asc')

{

if (is_array($list)) {

    $refer =array(); $resultSet = array();



    foreach ($list as $i => $data){





        $refer[$i] = $data[$field];



    }





    switch ($sortby) {

        case 'asc': // 正向排序

            asort($refer);

            break;

        case 'desc': // 逆向排序

            arsort($refer);

            break;

        case 'nat': // 自然排序

            natcasesort($refer);

            break;

    }

    foreach ($refer as $key => $val)

        $resultSet[] = & $list[$key];

    return $resultSet;

}

return false;

}

/**

  • 记录文件日志

*

  • @param $msg 日志消息
  • @param $filenam 日志保存文件夹

*/

function set_log($msg, $filename='common')

{

$file = ROOT_PATH.'runtime/log/'.$filename.'/';

if (!is_dir($file)) {

    mkdir($file, 0777, true);

}

$log_fname = date('Ymd') . '.txt';

file_put_contents($file . $log_fname, date('Y-m-d H:i:s') . ", IP:" . Request::instance()->ip() . ", " . $msg . "\n", 8);

}

function set_log_new($data, $filename='common')

{

ob_start();

var_dump($data);

$str = ob_get_clean();

set_log($str, $filename);

}

/**

  • 获取服务器ip */

function get_server_ip()

{

// 获取服务器IP地址

if (isset ( $_SERVER )) {

    if ($_SERVER ['SERVER_ADDR']) {

        $_server_ip = $_SERVER ['SERVER_ADDR'];

    } else {

        $_server_ip = $_SERVER ['LOCAL_ADDR'];

    }

} else {

    $_server_ip = getenv ( 'SERVER_ADDR' );

}

return $_server_ip;

}

/**

  • 保存日志到数据库 *
  • @param $message 日志信息
  • @param $level info(信息-默认)、notice(提示)、warn(警告)、error(错误)
  • @param $source task(定时器)、queue(队列),其它的统一记录到主表中(默认为NULL)
  • @param $extra 根据记录表的不同,可附加其它数据(默认为空数组)
  • @return 日志记录编号 */

function db_log($message, $level = 'info', $source = NULL, $extra=array())

{

static $level_config = array (

    'info',

    'notice',

    'warn',

    'error'

);

static $source_config = array (

    'task'  => 'sys_log_tasktimer',

    'queue' => 'sys_log_queue'

);

static $_db = NULL;

if ($_db === NULL) {

    $table = isset ($source_config[$source]) ? $source_config[$source] : 'sys_log';

    $_db = Db::name($table);

}



if (Request::instance()->isCli()) {

    $url = '';

    $server_ip = '';

} else {

    $url = isset ( $_SERVER ['SCRIPT_URI'] ) ? $_SERVER ['SCRIPT_URI'] : ('http://' . $_SERVER ['SERVER_NAME'] . strtok ( $_SERVER ['REQUEST_URI'], '?' ));

    $server_ip = get_server_ip();

}



$param = print_r ( $_REQUEST, TRUE );



$data = [];

$data['level'] = in_array($level, $level_config) ? $level : 'other';

$data['time'] = time();

$data['url'] = $url;

$data['param'] = $param ? $param : '';

$data['content'] = $message;

$data['ip_client'] = Request::instance()->ip();

$data['ip_server'] = $server_ip;

$data = array_merge ($data, $extra);



$_db->insert($data);

return $_db->getLastInsID();

}

/**

  • 返回数据
  • @return boolean [description] */

function result($data=[], $code=0, $msg='')

{
$result = [

    'code' => $code,

    'msg'  => $msg,

    'time' => isset($_SERVER['REQUEST_TIME']) ? $_SERVER['REQUEST_TIME'] : time(),

    'data' => $data,

];

echo json_encode($result, JSON_UNESCAPED_UNICODE);

die;

}

/**

  • 判断是否是手机访问
  • @return boolean [description] */

function is_mobile()

{

$useragent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';

$useragent_commentsblock = preg_match('|\(.*?\)|', $useragent, $matches) > 0 ? $matches[0] : '';

$mobile_os_list = [

    'Google Wireless Transcoder', 'Windows CE', 'WindowsCE', 'Symbian', 'Android', 'armv6l', 'armv5', 'Mobile', 'CentOS', 'mowser', 'AvantGo', 'Opera Mobi', 'J2ME/MIDP', 'Smartphone', 'Go.Web', 'Palm', 'iPAQ']; 

$mobile_token_list = ['Profile/MIDP', 'Configuration/CLDC-', '160×160', '176×220', '240×240', '240×320', '320×240', 'UP.Browser', 'UP.Link', 'SymbianOS', 'PalmOS', 'PocketPC', 'SonyEricsson', 'Nokia', 'BlackBerry', 'Vodafone', 'BenQ', 'Novarra-Vision', 'Iris', 'NetFront', 'HTC_', 'Xda_', 'SAMSUNG-SGH', 'Wapaka', 'DoCoMo', 'iPhone', 'iPod', 'iPad'];

$found_mobile = check_substrs($mobile_os_list, $useragent_commentsblock) || check_substrs($mobile_token_list, $useragent);

if ($found_mobile) {

    return true;

} else {

    return false;

}

}

function check_substrs($substrs, $text)

{

foreach ($substrs as $substr) if (false !== strpos($text, $substr)) {

    return true;

}

return false;

}

/**

  • 根据时间戳返回时间描述
  • @param integer $time [description]
  • @return [type] [description] */

function get_time_to_str($time=0){

if (is_string($time)) {

    $time = strtotime($time);

}

$str = '';

$c = time()-$time;

if($c<0){

    $str = '未来';

}else{

    if($c==0) $c=1;

    // 最多显示7天前

    if ($c>=86400*7) {

        $c = 86400*7;

    }

    if($c<60){

        $str = "{$c}秒前";

    }elseif($c>=60 && $c<3600){

        $i = intval($c/60);

        $str = "{$i}分钟前";

    }elseif($c>=3600 && $c<86400){

        $i = intval($c/3600);

        $str = "{$i}小时前";

    }elseif($c>=86400 && $c<86400*30){

        $i = intval($c/86400);

        $str = "{$i}天前";

    }elseif($c>=86400*30 && $c<86400*360){

        $i = intval($c/(86400*30));

        $str = "{$i}个月前";

    }elseif($c>=86400*360 && $c<86400*360*5){

        $i = intval($c/(86400*360));

        $str = "{$i}年前";

    }else{

        $str = '很久以前';

    }

}

return $str;

}

/**

  • 下划线转驼峰
  • 思路:
  • step1.原字符串转小写,原字符串中的分隔符用空格替换,在字符串开头加上分隔符
  • step2.将字符串中每个单词的首字母转换为大写,再去空格,去字符串首部附加的分隔符.

*/

function camelize($uncamelized_words,$separator='_')

{

$uncamelized_words = $separator. str_replace($separator, " ", strtolower($uncamelized_words));

return ltrim(str_replace(" ", "", ucwords($uncamelized_words)), $separator );

}

/**

  • 驼峰命名转下划线命名
  • 思路:
  • 小写和大写紧挨一起的地方,加上分隔符,然后全部转小写

*/

function uncamelize($camelCaps,$separator='_')

{

return strtolower(preg_replace('/([a-z])([A-Z])/', "$1" . $separator . "$2", $camelCaps));

}

/**

  • 判断是否是微信
  • @return boolean [description] */

function is_weixin()

{

if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) { 

    return true; 

} return false; 

}

//验证身份证是否有效

function validateIDCard($IDCard)

{

if (strlen($IDCard) == 18) {

    return check18IDCard($IDCard);

} elseif ((strlen($IDCard) == 15)) {

    $IDCard = convertIDCard15to18($IDCard);

    return check18IDCard($IDCard);

} else {

    return false;

}

}

//计算身份证的最后一位验证码,根据国家标准GB 11643-1999

function calcIDCardCode($IDCardBody)

{

if (strlen($IDCardBody) != 17) {

    return false;

}



//加权因子 

$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);

//校验码对应值 

$code = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');

$checksum = 0;



for ($i = 0; $i < strlen($IDCardBody); $i++) {

    $checksum += substr($IDCardBody, $i, 1) * $factor[$i];

}



return $code[$checksum % 11];

}

// 将15位身份证升级到18位

function convertIDCard15to18($IDCard)

{

if (strlen($IDCard) != 15) {

    return false;

} else {

    // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码 

    if (array_search(substr($IDCard, 12, 3), array('996', '997', '998', '999')) !== false) {

        $IDCard = substr($IDCard, 0, 6) . '18' . substr($IDCard, 6, 9);

    } else {

        $IDCard = substr($IDCard, 0, 6) . '19' . substr($IDCard, 6, 9);

    }

}

$IDCard = $IDCard . calcIDCardCode($IDCard);

return $IDCard;

}

// 18位身份证校验码有效性检查

function check18IDCard($IDCard)

{

if (strlen($IDCard) != 18) {

    return false;

}



$IDCardBody = substr($IDCard, 0, 17); //身份证主体

$IDCardCode = strtoupper(substr($IDCard, 17, 1)); //身份证最后一位的验证码



if (calcIDCardCode($IDCardBody) != $IDCardCode) {

    return false;

} else {

    return true;

}

}

/**

  • 导入excel *
  • @param $title 标题
  • @param $data 数据行
  • @param $filename 文件名 默认随机
  • @param $type 默认xls,xlsx */

function excel_read($filename, $encode='utf-8')

{

require_once ROOT_PATH .'extend/PHPExcel/PHPExcel.php';

$objReader = PHPExcel_IOFactory::createReader('Excel5');

$objReader->setReadDataOnly(true);

$objPHPExcel = $objReader->load($filename);

$objWorksheet = $objPHPExcel->getActiveSheet();

$highestRow = $objWorksheet->getHighestRow(); 

$highestColumn = $objWorksheet->getHighestColumn(); 

$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 

$excelData = array(); 

for ($row = 1; $row <= $highestRow; $row++) { 

    for ($col = 0; $col < $highestColumnIndex; $col++) { 

        $excelData[$row][] = $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();

        // $cell =$objWorksheet->getCellByColumnAndRow($col, $row); 

        // $value = $cell->getValue();

        // $cellstyleformat=$cell->getParent()->getStyle( $cell->getCoordinate() )->getNumberFormat();  

        // $formatcode=$cellstyleformat->getFormatCode();

        // if (preg_match('/^($[A-Z]*-[0-9A-F]*)*[hmsdy]/i', $formatcode)) {  

        //     $excelData[$row][] = gmdate("Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($value));  

        // }else{

        //     $excelData[$row][] = PHPExcel_Style_NumberFormat::toFormattedString($value,$formatcode);  

        // }

    }

}

return $excelData;

}

/**

  • 导出excel *
  • @param $title 标题
  • @param $data 数据行
  • @param $filename 文件名 默认随机
  • @param $type 默认xls,xlsx */

function export_excel($title, $data, $filename=null, $type='xls')

{

require_once ROOT_PATH .'extend/PHPExcel/PHPExcel.php';

if($type=='xlsx'){

    require_once ROOT_PATH .'extend/PHPExcel/PHPExcel/Writer/Excel2007.php';

}else{

    require_once ROOT_PATH .'extend/PHPExcel/PHPExcel/Writer/Excel5.php';

}



$AZ = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');

$export_key = array(); //最多可支持26*26=676个字段

for ($i=0; $i < count($title); $i++) {

    $a = (int) ($i/26);

    $b = $i%26;

    // echo $a;echo '-';echo $b;echo '<br>';

    $export_key[] = (isset($AZ[$a-1])?$AZ[$a-1]:'') . $AZ[$b];

}

// dump($export_key);die;



// 创建一个excel

$objPHPExcel = new PHPExcel();



$objPHPExcel->setActiveSheetIndex(0);



//标题

foreach ($export_key as $key => $value) {

    $objPHPExcel->getActiveSheet()->setCellValue($value.'1', $title[$key]);

    // $objPHPExcel->getActiveSheet()->getColumnDimension($value)->setAutoSize(true);

}



//拼接数据

foreach ($data as $k=>$v){

    $kk = $k+1;

    foreach ($export_key as $key => $value) {

        $objPHPExcel->getActiveSheet()->setCellValue($value.($kk+1), $v[$key]);

    }

}



//后缀

$ext = $type=='xls' ? '.xls' : '.xlsx';



//导出的文件名

if($filename==null){

    $filename = 'excel_'.date('Ymd',time()).'_'.mt_rand(1000,9999).$ext;

}



if($type=='xlsx'){

    // 保存excel—2007格式

    $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);

}else{

    $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);

}

// $objWriter->save($filename);

// 直接输出到浏览器

header("Pragma: public");

header("Expires: 0");

header("Cache-Control:must-revalidate, post-check=0, pre-check=0");

header("Content-Type:application/force-download");

header("Content-Type:application/vnd.ms-execl");

header("Content-Type:application/octet-stream");

header("Content-Type:application/download");;

header('Content-Disposition:attachment;filename="'.$filename.'"');

header("Content-Transfer-Encoding:binary");

$objWriter->save('php://output');

}

/**

  • 导出csv格式文件
  • @param $title 标题
  • @param $data 数据行
  • @param $filename 文件名 默认随机

*/

function export_csv($title, $data, $filename=null)

{

$data_str = '';

//拼接标题

foreach ($title as $key => $value) {

    $data_str .= "\"$value\",";

}

$data_str = export_utf8( substr($data_str, 0, -1) ) . "\n";



//拼接数据

foreach ($data as $key=>$value){

    $line = '';

    foreach ($value as $k => $v) {

        $line .= "\"$v\",";

    }

    $line = export_utf8( substr($line, 0, -1) ) . "\n";

    $data_str .= $line;

}



//导出的文件名

if($filename==null){

    $filename = 'csv_'.date('Ymd',time()).'_'.mt_rand(1000,9999).'.csv';

}

ob_clean();

header("Content-type:text/csv");

header("Content-Disposition:attachment;filename=".$filename);

header('Cache-Control:must-revalidate,post-check=0,pre-check=0');

header('Expires:0');

header('Pragma:public');

echo $data_str;

die;

}

function export_utf8($data=''){

return iconv("UTF-8","GB2312//IGNORE",$data);

}

/**

  • 模拟get请求
  • @param [type] $url [description]
  • @return [type] [description] */

function httpGet($url)

{

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);        // SSL证书认证

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);        // 严格认证

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     // 显示输出结果

curl_setopt($ch, CURLOPT_HEADER, false);            // 过滤HTTP头

$content = curl_exec($ch);

// var_dump( curl_error($ch) );

curl_close($ch);

return $content;

}

/**

  • 模拟post请求
  • @param [type] $url [description]
  • @param [type] $data [description]
  • @return [type] [description] */

function httpPost($url, $data)

{

if (is_array($data)) {

    $data = http_build_query($data);

}

$curl = curl_init($url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//SSL证书认证

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证

curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头

curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);// 显示输出结果

curl_setopt($curl,CURLOPT_POST,true); // post传输数据

curl_setopt($curl,CURLOPT_POSTFIELDS,$data);// post传输数据

$content = curl_exec($curl);

//var_dump( curl_error($curl) );

curl_close($curl);

return $content;

}

/**

  • 发送邮件方法
  • @param $to:接收者 多个使用数组传递
  • @param $title:标题
  • @param $content:邮件内容
  • @param $attachment: 邮件附件
  • @return bool true:发送成功 false:发送失败

*/

function sendMail($to, $title, $content, $attachment='')

{

$log_name = 'email';
$endMailData = 'to:'.print_r($to, true).'   title:'.$title.'   content:'.$content.'   attachment:'.print_r($attachment, true);
if(empty($to)) {
\think\Log::write('endMailData: '.$endMailData, $log_name);
\think\Log::write('未传递接收者', $log_name);
return false;
}
if(empty($title)) {
\think\Log::write('endMailData: '.$endMailData, $log_name);
\think\Log::write('未传递邮件标题', $log_name);
return false;
}
if(empty($content)) {
\think\Log::write('endMailData: '.$endMailData, $log_name);
\think\Log::write('未传递邮件内容', $log_name);
return false;
}
//引入PHPMailer的核心文件 使用require_once包含避免出现PHPMailer类重复定义的警告
\think\Loader::import('PHPMailer.class#phpmailer');
//实例化PHPMailer核心类
$mail = new PHPMailer();
//是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
$mail->SMTPDebug = false;
//使用smtp鉴权方式发送邮件
$mail->IsSMTP();
//smtp需要鉴权 这个必须是true
$mail->SMTPAuth=true;
//链接qq域名邮箱的服务器地址
$mail->Host = 'smtp.qq.com';
//设置使用ssl加密方式登录鉴权
$mail->SMTPSecure = 'ssl';
//$mail->SMTPSecure = 'tls'; 
//设置ssl连接smtp服务器的远程服务器端口号,以前的默认是25,但是现在新的好像已经不可用了 可选465或587
$mail->Port = 465;
//设置smtp的helo消息头 这个可有可无 内容任意
//$mail->Helo = 'Hello smtp.qq.com Server';
//设置发件人的主机域 可有可无 默认为localhost 内容任意,建议使用你的域名
$mail->Hostname = \think\Request::instance()->domain();
//设置发送的邮件的编码 可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码
$mail->CharSet = config('email.charset');
//设置发件人姓名(昵称) 任意内容,显示在收件人邮件的发件人邮箱地址前的发件人姓名
$mail->FromName = config('email.fromname');
//smtp登录的账号 这里填入字符串格式的qq号即可
$mail->Username = config('email.username');
//smtp登录的密码 使用生成的授权码(就刚才叫你保存的最新的授权码)
$mail->Password = config('email.password');
//设置发件人邮箱地址 这里填入上述提到的“发件人邮箱”
$mail->From = config('email.username');
//回复邮箱地址
$mail->AddReplyTo(config('email.username'), config('email.charset'));
//邮件正文是否为html编码 注意此处是一个方法 不再是属性 true或false
$mail->IsHTML(true);
//设置收件人邮箱地址 该方法有两个参数 第一个参数为收件人邮箱地址 第二参数为给该地址设置的昵称 不同的邮箱系统会自动进行处理变动 这里第二个参数的意义不大
//添加多个收件人 则多次调用方法即可
if( is_string($to) ){
$mail->AddAddress($to, $to);
}elseif(is_array($to)){
foreach ($to as $key => $value) {
$mail->AddAddress($value, $value);
}
}
//添加该邮件的主题
$mail->Subject = $title;
//添加邮件正文 上方将isHTML设置成了true,则可以是完整的html字符串 如:使用file_get_contents函数读取本地的html文件
$mail->Body = $content;
//为该邮件添加附件 该方法也有两个参数 第一个参数为附件存放的目录(相对目录、或绝对目录均可) 第二参数为在邮件附件中该附件的名称
//同样该方法可以多次调用 上传多个附件
if(!empty($attachment)){
foreach ($attachment as $key => $value) {
$mail->AddAttachment($value['path'], $value['title']);
}
}
if($mail->SMTPDebug){
\think\Log::write('endMailData: '.$endMailData, $log_name);
// return false;
}
$status = $mail->Send();
//简单的判断与提示信息
if($status) {
return true;
}else{
\think\Log::write('endMailData: '.$endMailData, $log_name);
\think\Log::write('发送失败, error:'.$mail->ErrorInfo, $log_name);
return false;
}

}

/**

  • 生成全球唯一值
  • @return [type] [description] */

function guid()

{

if (function_exists('com_create_guid')){
return com_create_guid();
}else{
mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr(45); // "-"
$uuid = substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12);
return $uuid;
}

}

/**

  • 价格格式化,没有小数的不显示小数,有小数的显示一位 */

function my_price($price=0)

{

$gsh_price = sprintf('%.1f', $price);
$gsh_price2 = sprintf('%.2f', $price);
if ($gsh_price != $gsh_price2) {
$gsh_price = $gsh_price2;
}
if($gsh_price==intval($gsh_price)){
return intval($gsh_price);
}
return $gsh_price;

}

/**

  • 发送验证码 */

function sendSms($mobile, $code)

{

$params = array ();
$params["PhoneNumbers"] = $mobile;
$params["SignName"] = "SignName";
$params["TemplateCode"] = "TemplateCode";
$params['TemplateParam'] = Array (
"code" => $code
);
return _sendMsg($params);

}

/**

  • 发送操作 */

function _sendMsg($params=[])

{

return true;
exit;
require_once "extend/alidayu/SignatureHelper.php";
// fixme 必填: 请参阅 https://ak-console.aliyun.com/ 取得您的AK信息
// $accessKeyId = "accessKeyId ";
// $accessKeySecret = "accessKeySecret ";
$accessKeyId = "accessKeyId ";
$accessKeySecret = "accessKeySecret ";
if (empty($params["PhoneNumbers"])) {
return '短信接收号码不能为空';
}
if (empty($params["SignName"])) {
return '短信签名不能为空';
}
if (empty($params["TemplateCode"])) {
return '短信模板Code不能为空';
}
if (empty($params["TemplateParam"])) {
// return '模板参数不能为空';
$params["TemplateParam"] = "";
}
// fixme 可选: 设置发送短信流水号
$params['OutId'] = "";
// fixme 可选: 上行短信扩展码, 扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段
$params['SmsUpExtendCode'] = "";
// *** 需用户填写部分结束, 以下代码若无必要无需更改 ***
if (!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
$params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
}
// 初始化SignatureHelper实例用于设置参数,签名以及发送请求
$helper = new \Aliyun\DySDKLite\SignatureHelper();
// 此处可能会抛出异常,注意catch
try {
$content = $helper->request(
$accessKeyId,
$accessKeySecret,
"dysmsapi.aliyuncs.com",
array_merge($params, array(
"RegionId" => "RegionId",
"Action" => "Action",
"Version" => "Version",
))
// fixme 选填: 启用https
// ,true
);
} catch (Exception $e) {
//$e->getMessage();
set_log_new([
$params, $e->getMessage()
], 'sendMsg');
return $e->getMessage();
}
if ($content->Code == 'OK') {
return true;
} else {
set_log_new([
$params, $content->Message
], 'sendMsg');
return $content->Message;
}

}

/**

*上传oss

*/

function upload_to_oss($object,$file)

{

require_once ROOT_PATH.'extend/aliyunoss/index.php';
$accessKeyId = "accessKeyId ";
$accessKeySecret = "accessKeySecret";
$endpoint = "endpoint ";
$OssClient = new \OSS\OssClient($accessKeyId,$accessKeySecret,$endpoint);
$bucket = "ddzu";
// $listBuckets = $OssClient->listBuckets();
// dump($listBuckets);die;
$res = $OssClient->uploadFile($bucket, $object, $file);
// dump($res['info']['url']);die;
if (!isset($res['info']['url'])) {
return false;
}
// dump($res);
// die;
$url = 'https://img.dongdongzu.com'.explode($res['oss-requestheaders']['Host'], $res['info']['url'])[1];
@unlink($file);
return $url;

}

/**

  • 百度地图-坐标转换 */

function baidu_zb_to_bd09mc($lng, $lat)

{

$ak = 'Q3icMGOqknnwYMfwhC24OodtmMKQaqUp';
$url = 'http://api.map.baidu.com/geoconv/v1/?coords='.$lng.','.$lat.'&from=5&to=6&ak='.$ak;
$result = httpGet($url);
$result = json_decode($result, true);
if ($result['status'] != 0) {
return [0,0];
}
return [$result['result'][0]['x'], $result['result'][0]['y']];

}

/**

  • 百度地图-坐标转换2 */

function gps_to_baidu($lng, $lat)

{

$ak = 'Q3icMGOqknnwYMfwhC24OodtmMKQaqUp';
$url = 'http://api.map.baidu.com/geoconv/v1/?coords='.$lng.','.$lat.'&from=3&to=5&ak='.$ak;
$result = httpGet($url);
$result = json_decode($result, true);
if ($result['status'] != 0) {
return [0,0];
}
return [$result['result'][0]['x'], $result['result'][0]['y']];

}

/**

  • 腾讯地图-坐标转换 */

function baidu_zb_to_tx($lng, $lat)

{

$key = 'TSVBZ-HTHKX-IEZ43-TLAHV-Z3KR3-VLBEP';
$url = 'https://apis.map.qq.com/ws/coord/v1/translate?locations='.$lat.','.$lng.'&type=3&key='.$key;
$result = httpGet($url);
$result = json_decode($result, true);
if ($result['status'] != 0) {
return [$lng, $lat];
}
return [$result['locations'][0]['lng'], $result['locations'][0]['lat']];

}

//前三后四

function q3h4($str='')

{

return substr($str, 0, 3) . '****' . substr($str, -4);

}

/**

  • 计算两点地理坐标之间的距离
  • @param Decimal $longitude1 起点经度
  • @param Decimal $latitude1 起点纬度
  • @param Decimal $longitude2 终点经度
  • @param Decimal $latitude2 终点纬度
  • @param Int $unit 单位 1:米 2:公里
  • @param Int $decimal 精度 保留小数位数
  • @return Decimal */

function getDistance($longitude1, $latitude1, $longitude2, $latitude2, $unit=2, $decimal=2){

$EARTH_RADIUS = 6370.996; // 地球半径系数
$PI = 3.1415926;
$radLat1 = $latitude1 * $PI / 180.0;
$radLat2 = $latitude2 * $PI / 180.0;
$radLng1 = $longitude1 * $PI / 180.0;
$radLng2 = $longitude2 * $PI /180.0;
$a = $radLat1 - $radLat2;
$b = $radLng1 - $radLng2;
$distance = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2)));
$distance = $distance * $EARTH_RADIUS * 1000;
if($unit==2){
$distance = $distance / 1000;
}
return round($distance, $decimal);

}

点赞

发表评论