<?php
// +----------------------------------------------------------------------
// | 函数助手 [ 天方夜谭快速开发框架 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2014~2019 http://www.eirds.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 天方夜谭 <17404785@qq.com>
// +----------------------------------------------------------------------

/**
 * 获取和设置配置参数
 * @param null $name
 * @param null $value
 * @param null $default
 * @return array|mixed|null
 */
function TFYT($name = null, $value = null, $default = null)
{
    static $_config = array();
    if (empty($name)) {
        return $_config;
    }
    if (is_string($name)) {
        if (!strpos($name, '.')) {
            $name = strtoupper($name);
            if (is_null($value)) return isset($_config[$name]) ? $_config[$name] : $default;
            $_config[$name] = $value;
            return null;
        }
        $name = explode('.', $name);
        $name[0] = strtoupper($name[0]);
        if (is_null($value)) return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : $default;
        $_config[$name[0]][$name[1]] = $value;
        return null;
    }
    if (is_array($name)) {
        $_config = array_merge($_config, array_change_key_case($name, CASE_UPPER));
        return null;
    }
    return null;
}

/**
 * object(stdclass)转数组的函数
 * @param $array
 * @return array
 */
function object_array($array){
    if(is_object($array)){
        $array = (array)$array;
    }
    if(is_array($array)){
        foreach($array as $key=>$value){
            $array[$key] = object_array($value);
        }
    }
    return $array;
}

/**
 * 加载视图
 * @param $url
 * @return mixed
 */
function Load_Template($url,$data=array()){
    //返回视图层
    return require "{$url}";
}


/**
 * 获取GET方式接收到的值
 * @param null $key
 * @return mixed|string|string[]|null
 */
function GET($key = null)
{
    if(isset($_GET[$key])){
        $str = $_GET[$key];
        //特殊字符的过滤方法
        return safestr($str);
    }else{
        return null;
    }
}

/**
 * 获取POST方式接收到的值
 * @param null $key
 * @return mixed|string|string[]|null
 */
function POST($key = null)
{
    if(isset($_POST[$key])){
        $str = $_POST[$key];
        //特殊字符的过滤方法
        return safestr($str);
    }else{
        return null;
    }
}

/**
 * 过滤危险字符串
 * @param $str
 * @return string
 */
function safestr($str) {
    if (!get_magic_quotes_gpc()) {
        return addslashes($str);
    } else {
        return $str; //过滤危险字符
    }
}

/**
 * md5加密
 * @param $pwd
 * @return string
 */
function md5Pwd($pwd){
    $pwd=md5(md5(md5($pwd).md5('QQ17404785')));
    return $pwd;
}

/**
 * 生成32位随机字符串
 * @param int $length
 * @param string $char
 * @return bool|string
 */
function str_rand($length = 32, $char = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'){
    if(!is_int($length) || $length < 0) {
        return false;
    }
    $string = '';
    for($i = $length; $i > 0; $i--) {
        $string .= $char[mt_rand(0, strlen($char) - 1)];
    }
    return $string;
}

/**
 * 获取ip地址
 * @return |null
 */
function getIp(){
    static $realip;
    if (isset($_SERVER)) {
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $realip = isset($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] : $_SERVER['REMOTE_ADDR'];
        }
    } else {
        if (getenv('HTTP_X_FORWARDED_FOR')) {
            $realip = getenv('HTTP_X_FORWARDED_FOR');
        } else {
            $realip = getenv('HTTP_CLIENT_IP') ? getenv('HTTP_CLIENT_IP') : getenv('REMOTE_ADDR');
        }
    }
    return $realip;
}

/**
 * 获取QQ名称
 * @param int $qq
 * @return bool|string
 */
function qqnick($qq=10001)
{
    return curl_get("https://cloud.xmyrs.cn/qqnick/?qq=".$qq);
}

/**
 * GET请求
 * @param $url
 * @return bool|string
 */
function curl_get($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $dom = curl_exec($ch);
    curl_close($ch);
    return $dom;
}


/**
 * GET请求2
 * @param $url
 * @return bool|string
 */
function curl_get_https($url)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);  // 跳过检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);  // 跳过检查
    $tmpInfo = curl_exec($curl);
    curl_close($curl);
    return $tmpInfo;   //返回json对象
}

/**
 * 百度ip接口
 * @param null $ip
 * @return mixed
 */
function get_region($ip=null)
{
    $ak = '4l6BwmWwdwU4hsaVZnOwpM6MLy0bYmgc';
    $url = file_get_contents("http://api.map.baidu.com/location/ip?ip=$ip&ak=$ak");
    $res1 = json_decode($url,true);
    $data =$res1;
    return $data['content']['address'];
}

/**
 * 返回上午下午
 * @return string
 */
function getStrTime(){
    $no=date("H",time());
    if ($no>0&&$no<=6){
        return "凌晨好";
    }
    if ($no>6&&$no<12){
        return "上午好";
    }
    if ($no>=12&&$no<=18){
        return "下午好";
    }
    if ($no>18&&$no<=24){
        return "晚上好";
    }
    return "您好";
}

/**
 * 时间比大小
 * @param null $time
 * @return bool
 */
function getIsTime($time1 = null,$time2 = null){
    $zero1=$time1;;
    $zero2=$time2;
    if(strtotime($zero1)>strtotime($zero2)){
        return true;
    }else{
        echo false;
    }
}

/**
 * 计算文件大小
 * @param $size
 * @return int|string
 */
function size($size){
    if($size<1024) $size.='B';
    else{
        $size/=1024;
        if($size<1024) $size=round($size,2).'KB';
        else{
            $size/=1024;
            if($size<1024) $size=round($size,2).'MB';
            else{
                $size/=1024;
                if($size<1024) $size=round($size,2).'GB';
            }
        }
    }
    return $size;
}

/**
 * 对应js encodeURIComponent
 * @param $str
 * @return string
 */
function encodeURIComponent($str) {
    $revert = array('%21'=>'!', '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')');
    return strtr(rawurlencode($str), $revert);
}

/**
 * 判断数组里是否存在某个值
 * @param $value
 * @param $array
 * @return bool
 */
function deep_in_array($value, $array) {
    foreach($array as $item) {
        if(!is_array($item)) {
            if ($item == $value) {
                return true;
            } else {
                continue;
            }
        }
        if(in_array($value, $item)) {
            return true;
        } else if(deep_in_array($value, $item)) {
            return true;
        }
    }
    return false;
}

/**
 * 写入文本
 * @param $str
 */
function writelog($str=null)
{
    $open=fopen($_SERVER['DOCUMENT_ROOT']."/Monitor/log.txt","w" );
    fwrite($open,$str);
    fclose($open);
}

/**
 * 函数检测1
 * @param $a
 * @param bool $b
 * @return string
 */
function checkfunc($a, $b = false){
    if (function_exists($a)) {
        return '<font color="green">可用</font>';
    } else {
        if ($b == false) {
            return '<font color="black">不支持</font>';
        } else {
            return '<font color="red">不支持</font>';
        }
    }
}

/**
 * 函数检测2
 * @param $a
 * @param bool $b
 * @return string
 */
function checkclass($a, $b = false){
    if (class_exists($a)) {
        return '<font color="green">可用</font>';
    } else {
        if ($b == false) {
            return '<font color="black">不支持</font>';
        } else {
            return '<font color="red">不支持</font>';
        }
    }
}

/**
 * 计算VIP
 * @param $vip
 * @param $end
 * @return int
 */
function get_isvip($vip='0', $end='')
{
    if ($vip) {
        if (strtotime($end) > time()) {
            return 1;
        } else {
            return 0;
        }
    } else {
        return 0;
    }
}

/**
 * 获取已经过了多久
 * PHP时间转换
 * 刚刚、几分钟前、几小时前
 * 今天昨天前天几天前
 * @param  string $targetTime 时间戳
 * @return string
 */
function get_last_time($targetTime)
{
    $targetTime = strtotime($targetTime);
    // 今天最大时间
    $todayLast   = strtotime(date('Y-m-d 23:59:59'));
    $agoTimeTrue = time() - $targetTime;
    $agoTime     = $todayLast - $targetTime;
    $agoDay      = floor($agoTime / 86400);

    if ($agoTimeTrue < 60) {
        $result = '刚刚';
    } elseif ($agoTimeTrue < 3600) {
        $result = (ceil($agoTimeTrue / 60)) . '分钟前';
    } elseif ($agoTimeTrue < 3600 * 12) {
        $result = (ceil($agoTimeTrue / 3600)) . '小时前';
    } elseif ($agoDay == 0) {
        $result = '今天 ' . date('H:i', $targetTime).'分';
    } elseif ($agoDay == 1) {
        $result = '昨天 ' . date('H:i', $targetTime).'分';
    } elseif ($agoDay == 2) {
        $result = '前天 ' . date('H:i', $targetTime).'分';
    } elseif ($agoDay > 2 && $agoDay < 16) {
        $result = $agoDay . '天前 ' . date('H:i', $targetTime).'分';
    } else {
        $format = date('Y') != date('Y', $targetTime) ? "Y-m-d H:i" : "m-d H:i";
        $result = date($format, $targetTime);
    }
    return $result;
}

/**
 * 判断手机/电脑端
 * @return bool|null
 */
function wp_is_mobile()
{
    static $is_mobile = null;
    if (isset($is_mobile)) {
        return $is_mobile;
    }
    if (empty($_SERVER['HTTP_USER_AGENT'])) {
        $is_mobile = false;
    } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false // many mobile devices (all iPhone, iPad, etc.)
        || 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;
}

/**
 * 判断QQ状态
 * @param $status
 * @return int
 */
function is_qqzt($status){
    if($status==0){
        return 1;
    }else{
        return 0;
    }
}

/**
 * 功能运行
 * @param $state
 * @return string
 */
function is_run($state){
    if($state>0){
        return '运行中';
    }else{
        return '等待启动';
    }
}

/**
 * 按钮运行颜色
 * @param $state
 * @return string
 */
function is_run_bnt($state){
    if($state>0){
        return 'success';
    }else{
        return 'danger';
    }
}

/**
 * 获取运行时间
 * @param $time
 * @return string
 */
function is_run_time($time){
    if(empty($time)){
        return '0000-00-00 00:00:00';
    }else{
        return $time;
    }
}

/*
 * 经典的概率算法，
 * $proArr是一个预先设置的数组，
 * 假设数组为：array(100,200,300，400)，
 * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内，
 * 如果不在，则将概率空间，也就是k的值减去刚刚的那个数字的概率空间，
 * 在本例当中就是减去100，也就是说第二个数是在1，900这个范围内筛选的。
 * 这样 筛选到最终，总会有一个数满足要求。
 * 就相当于去一个箱子里摸东西，
 * 第一个不是，第二个不是，第三个还不是，那最后一个一定是。
 * 这个算法简单，而且效率非常高，
 * 这个算法在大数据量的项目中效率非常棒。
 */
function get_rand_luck($proArr) {
    $result = '';
    //概率数组的总概率精度
    $proSum = array_sum($proArr);
    //概率数组循环
    foreach ($proArr as $key => $proCur) {
        $randNum = mt_rand(1, $proSum);
        if ($randNum <= $proCur) {
            $result = $key;
            break;
        } else {
            $proSum -= $proCur;
        }
    }
    unset ($proArr);
    return $result;
}