<?php
//方法库

if (!function_exists('mobile_regular_expression')) {
    /**
     * 国际手机号码正则验证规则获取
     * @param string $phone_code 国际区号
     * @return string
     */
    function mobile_regular_expression($phone_code)
    {
        $list = [
            '-1' => ['regu' => '/^\d{3,15}$/', 'name' => '不验证区号正则'],
            '-2' => ['regu' => '', 'name' => '验证区号正则'],

 

            '+86' => ['regu' => '/^1[3-9]\d{9}$/', 'name' => '中国大陆'],
            '+852' => ['regu' => '/^(5[1234569]\d{6}|6\d{7}|9[0-8]\d{6})$/', 'name' => '中国香港'],
            '+853' => ['regu' => '/^6\d{7}$/', 'name' => '中国澳门'],
            '+886' => ['regu' => '/^0?9\d{8}$/', 'name' => '中国台湾'],
            '+1' => ['regu' => '/^\d{10,12}$/', 'name' => '美国'],
            '+82' => ['regu' => '/^0?[71](?:\d{8,9})$/', 'name' => '韩国'],
            '+81' => ['regu' => '/^0?[789](?:\d{8}|\d{9})$/', 'name' => '日本'],
            '+65' => ['regu' => '/^[89]\d{7}$/', 'name' => '新加坡'],
            '+60' => ['regu' => '/^1\d{8,9}$/', 'name' => '马来西亚'],
            '+61' => ['regu' => '/^4\d{8,9}$/', 'name' => '澳大利亚'],
            '+63' => ['regu' => '/^\d{10}$/', 'name' => '菲律宾'],
            '+62' => ['regu' => '/^0?[2-9]{1}\d+$/', 'name' => '印度尼西亚'],
        ];
        $phone_code = empty($phone_code) ? '+86' : $phone_code;
        return empty($list[$phone_code]) ? '' : $list[$phone_code]['regu'];
    }
}

 

if(!function_exists('str_length')){
    /**
     * @param Request $request
     * @return 获取字符串长度
     */
    function str_length($str, $charset = 'utf-8')
    {
        if ($charset == 'utf-8') $str = iconv('utf-8', 'gb2312', $str);
        $num = strlen($str);
        $cnNum = 0;
        for ($i = 0; $i < $num; $i++) {
            if (ord(substr($str, $i + 1, 1)) > 127) {
                $cnNum++;
                $i++;
            }
        }
        $enNum = $num - ($cnNum * 2);
        $number = ($enNum / 2) + $cnNum;
        return ceil($number);
    }
}

 

if(!function_exists('cc_msubstr')){
    /**
     * @param Request $request
     * @return mixed截取字符串
     */
    function cc_msubstr($str, $length, $start = 0, $charset = "utf-8", $suffix = true)
    {
        if (function_exists("mb_substr")) {
            return mb_substr($str, $start, $length, $charset);
        } elseif (function_exists('iconv_substr')) {
            return iconv_substr($str, $start, $length, $charset);
        }
        $re['utf-8'] = "/[/x01-/x7f]|[/xc2-/xdf][/x80-/xbf]|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff][/x80-/xbf]{3}/";
        $re['gb2312'] = "/[/x01-/x7f]|[/xb0-/xf7][/xa0-/xfe]/";
        $re['gbk'] = "/[/x01-/x7f]|[/x81-/xfe][/x40-/xfe]/";
        $re['big5'] = "/[/x01-/x7f]|[/x81-/xfe]([/x40-/x7e]|/xa1-/xfe])/";
        preg_match_all($re[$charset], $str, $match);
        $slice = join("", array_slice($match[0], $start, $length));
        if ($suffix) {
            return $slice . "..";
        } else {
            return $slice;
        }
    }
}

 

if(!function_exists('word_time')){
    /**
     * 时间转时间段
     */
    function word_time($time)
    {
        $time = (int)substr($time, 0, 10);
        $int = time() - $time;
        $str = '';
        if ($int <= 2) {
            $str = sprintf('刚刚', $int);
        } elseif ($int < 60) {
            $str = sprintf('%d秒前', $int);
        } elseif ($int < 3600) {
            $str = sprintf('%d分钟前', floor($int / 60));
        } elseif ($int < 86400) {
            $str = sprintf('%d小时前', floor($int / 3600));
        } elseif ($int < 2592000) {
            $str = sprintf('%d天前', floor($int / 86400));
        } else {
            $str = date('Y-m-d H:i:s', $time);
        }
        return $str;
    }
}

 

if(!function_exists('http_request')){
    /**
     * @function curl 请求
     *
     * @param $url 请求url
     * @param null $data 请求参数
     * @param int $secound 设置超时时间 0 表示无限
     * @param null $header 设置请求头部参数
     * @return mixed
     */
    function http_request($url, $data = null, $secound = 0, $header = NULL)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if ($secound > 0) {
            curl_setopt($curl, CURLOPT_TIMEOUT, $secound); //设置超时时间
        }
        if (!empty($header)) {
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //设置头信息的地方
        }
        if (!empty($data)) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
}

 

if(!function_exists('filter_str')) {
    /**
     * 过滤特殊字符(微信qq)
     *
     * @param unknown $str
     */
    function filter_str($str)
    {
        if ($str) {
            $name = $str;
            $name = preg_replace_callback('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', function ($matches) {
                return '';
            }, $name);
            $name = preg_replace_callback('/xE0[x80-x9F][x80-xBF]‘.‘|xED[xA0-xBF][x80-xBF]/S', function ($matches) {
                return '';
            }, $name);
            // 汉字不编码
            $name = json_encode($name);
            $name = preg_replace_callback("/\\\ud[0-9a-f]{3}/i", function ($matches) {
                return '';
            }, $name);
            if (!empty($name)) {
                $name = json_decode($name);
                return $name;
            } else {
                return '';
            }
        } else {
            return '';
        }
    }
}

 

if(!function_exists('get_city_by_ip')) {
    /**
     * 根据 ip 获取 当前城市
     */
    function get_city_by_ip()
    {
        if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
            $cip = $_SERVER["HTTP_CLIENT_IP"];
        } elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
            $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        } elseif (!empty($_SERVER["REMOTE_ADDR"])) {
            $cip = $_SERVER["REMOTE_ADDR"];
        } else {
            $cip = "";
        }
        $url = 'https://restapi.amap.com/v3/ip';
        $data = array(
            'output' => 'json',
            'key' => '7b9bf1c7628252f14c79c8e4c07c0ac5',
            'ip' => $cip
        );

 

        $postdata = http_build_query($data);
        $opts = array(
            'http' => array(
                'method' => 'GET',
                'header' => 'Content-type: application/x-www-form-urlencoded',
                'content' => $postdata
            )
        );

 

        $context = stream_context_create($opts);

 

        $result = file_get_contents($url, false, $context);

 

        if (!empty($result)) {
            $res = json_decode($result, true);

 

            if (!empty($res)) {

 

                if (empty($res['province'])) {
                    $res['province'] = '北京市';
                }
                if (!empty($res['province']) && $res['province'] == "局域网") {
                    $res['province'] = '北京市';
                }

 

                if (is_array($res['province'])) {
                    $province_count = count($res['province']);
                    if ($province_count == 0) {
                        $res['province'] = '北京市';
                    }
                }
                if (is_array($res['city'])) {
                    $city_count = count($res['city']);
                    if ($city_count == 0) {
                        $res['city'] = '北京市';
                    }
                }
            } else {
                $res['province'] = '北京市';
                $res['city'] = '北京市';
            }

 

            return $res;
        } else {
            return array(
                "province" => '北京市',
                "city" => '北京市'
            );
        }
    }
}

 

if(!function_exists('is_url')) {
    /**
     * 是否是url链接
     * @param unknown $string
     * @return boolean
     */
    function is_url($string)
    {
        if (strstr($string, 'http://') === false && strstr($string, 'https://') === false) {
            return false;
        } else {
            return true;
        }
    }
}

 

if(!function_exists('download')) {
//$fpath为下载文件所在文件夹,默认是downlod
    function download($fname, $newname = '')
    {
        if (empty($newname)) {
            $newname = $fname;
        } else {
            $ext = substr($fname, strrpos($fname, '.') + 1);
            $newname = $newname . "." . $ext;
        }

 

        //检查文件是否存在
        if (!file_exists($fname)) {
            header('HTTP/1.1 404 NOT FOUND');
        } else {
            //以只读和二进制模式打开文件
            $file = fopen($fname, "rb");

 

            //告诉浏览器这是一个文件流格式的文件
            Header("Content-type: application/octet-stream");
            //请求范围的度量单位
            Header("Accept-Ranges: bytes");
            //Content-Length是指定包含于请求或响应中数据的字节长度
            Header("Accept-Length: " . filesize($fname));
            //用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
            Header("Content-Disposition: attachment; filename=" . $newname);

 

            //读取文件内容并直接输出到浏览器
            echo fread($file, filesize($fname));
            fclose($file);
            exit ();
        }
    }
}

 

if(!function_exists('encrypt')) {
    /**
     * 系统加密方法
     *
     * @param string $data
     *            要加密的字符串
     * @param string $key
     *            加密密钥
     * @param int $expire
     *            过期时间 单位 秒
     * @return string
     */
    function encrypt($data, $key = '', $expire = 0)
    {
        $key = md5(empty ($key) ? 'niucloud' : $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(array(
            '+',
            '/',
            '='
        ), array(
            '-',
            '_',
            ''
        ), base64_encode($str));
    }
}

 

if(!function_exists('decrypt')) {
    /**
     * 系统解密方法
     *
     * @param string $data
     *            要解密的字符串 (必须是encrypt方法加密的字符串)
     * @param string $key
     *            加密密钥
     * @return string
     */
    function decrypt($data, $key = '')
    {
        $key = md5(empty ($key) ? 'niucloud' : $key);
        $data = str_replace(array(
            '-',
            '_'
        ), array(
            '+',
            '/'
        ), $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);
    }
}
if(!function_exists('get_sign')) {
    /**
     * md5签名
     * @param unknown $key
     * @param unknown $params
     * @return string
     */
    function get_sign($key, $params)
    {
        if (!is_array($params)) $params = array();

 

        ksort($params);
        $text = '';
        foreach ($params as $k => $v) {
            $text .= $k . $v;
        }
        return md5($key . $text . $key);

 

    }
}

 

if(!function_exists('check_phone')) {
    /**
     * 验证手机
     *
     */
    function check_phone($value)
    {
        if (preg_match('/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/', $value)) {
            return true;
        } else {
            return false;
        }
    }
}

 

if(!function_exists('check_email')) {

 

    /**
     * 验证邮箱
     *
     */
    function check_email($mail)
    {
        $checkmail = "/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/";
        if (preg_match_all($checkmail, $mail)) {
            return true;
        } else {
            return false;
        }
    }
}

 

if(!function_exists('get_ip')) {
    /**
     * 获取客户端真实ip
     * @return array|false|string
     */
    function get_ip()
    {
        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'];
                    else
                        $ip = "unknown";
        return $ip;
    }
}

 

if(!function_exists('copydirs')) {

 

    /**
     * 复制文件夹
     * @param string $source 源文件夹
     * @param string $dest 目标文件夹
     */
    function copydirs($source, $dest)
    {
        if (!is_dir($dest)) {
            mkdir($dest, 0755, true);
        }
        foreach (
            $iterator = new RecursiveIteratorIterator(
                new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST) as $item
        ) {
            if ($item->isDir()) {
                $sontDir = $dest . DS . $iterator->getSubPathName();
                if (!is_dir($sontDir)) {
                    mkdir($sontDir, 0755, true);
                }
            } else {
                copy($item, $dest . DS . $iterator->getSubPathName());
            }
        }
    }
}

 

if(!function_exists('rmdirs')) {

 

    /**
     * 删除文件夹
     * @param string $dirname 目录
     * @param bool $withself 是否删除自身
     * @return boolean
     */
    function rmdirs($dirname, $withself = true)
    {
        if (!is_dir($dirname))
            return false;
        $files = new RecursiveIteratorIterator(
            new RecursiveDirectoryIterator($dirname, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST
        );

 

        foreach ($files as $fileinfo) {
            $todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
            $todo($fileinfo->getRealPath());
        }
        if ($withself) {
            @rmdir($dirname);
        }
        return true;
    }
}

 

if(!function_exists('datetime')) {

 

    /**
     * 将时间戳转换为日期时间
     * @param int $time 时间戳
     * @param string $format 日期时间格式
     * @return string
     */
    function datetime($time, $format = 'Y-m-d H:i:s')
    {
        $time = is_numeric($time) ? $time : strtotime($time);
        return date($format, $time);
    }
}

 

if(!function_exists('get_random_string')) {

 

    /**
     * 随机生成数字字母组合
     * */
    function get_random_string($len, $chars = null)
    {
        if (is_null($chars)) {
            $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        }
        //mt_srand(10000000*(double)microtime());
        mt_srand(time());
        for ($i = 0, $str = '', $lc = strlen($chars) - 1; $i < $len; $i++) {
            $str .= $chars[mt_rand(0, $lc)];
        }
        return $str;
    }
}

 

if(!function_exists('is_weixin')) {

 

    /**
     * 判断当前是否是微信浏览器
     */
    function is_weixin()
    {
        if (strpos($_SERVER['HTTP_USER_AGENT'],

 

                'MicroMessenger') !== false) {

 

            return 1;
        }

 

        return 0;
    }
}

 

if(!function_exists('is_ali')) {

 

    /**
     * 判断当前是否是支付宝浏览器
     */
    function is_ali()
    {
        if (strpos($_SERVER['HTTP_USER_AGENT'],

 

                'Alipay') !== false) {

 

            return 1;
        }

 

        return 0;
    }
}

 

if(!function_exists('rand_str')) {

 

    /**
     * 随机产生六位数密码
     */
    function rand_str($len = 6, $format = 'ALL')
    {
        switch ($format) {
            case 'ALL':
                $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-@#~';
                break;
            case 'CHAR':
                $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-@#~';
                break;
            case 'NUMBER':
                $chars = '0123456789';
                break;
            default :
                $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-@#~';
                break;
        }
        mt_srand(intval((double)microtime() * 1000000 * getmypid()));
        $password = "";
        while (strlen($password) < $len)
            $password .= substr($chars, (mt_rand() % strlen($chars)), 1);
        return $password;
    }
}

 

if(!function_exists('sign_create')) {

 

    /**
     *  生成签名、验证签名
     * @param $param 接收到的所有参数
     * @param $private_key
     * @return string
     */
    function sign_create($param, $private_key)
    {
        //获取到传来的参数数组并排序ksort()
        ksort($param);
        $param_string = '';
        foreach ($param as $key => $value) {
            $param_string .= $key . $value;
        }
        //md5加密字符串并生成签名
        $encrypted = "";
        $md5_param_string = md5($param_string);
        openssl_sign($md5_param_string, $encrypted, $private_key, OPENSSL_ALGO_SHA1);
        $encrypted = base64_encode($encrypted);
        return $encrypted;
    }
}

 

if(!function_exists('verify_sign')) {

 

    /**
     * 验证签名
     */
    function verify_sign($param, $sign, $public_key)
    {
        //获取到传来的参数数组并排序ksort()
        ksort($param);
        $param_string = '';
        foreach ($param as $key => $value) {
            $param_string .= $key . $value;
        }
        //md5加密字符串并生成签名
        $md5_param_string = md5($param_string);
        $sign = base64_decode($sign);
        openssl_pkey_get_public($public_key);
        $result = openssl_verify($md5_param_string, $sign, $public_key, OPENSSL_ALGO_SHA1) === 1;
        return $result;
    }
}

 

// 数字金额转中文
if (!function_exists('to_chinese_number')) {
    function to_chinese_number($num) {
        $c1 = "零壹贰叁肆伍陆柒捌玖";
        $c2 = "分角元拾佰仟万拾佰仟亿";
        $num = round($num, 2);  //输入金额四舍五入
        $num = $num * 100;
        if (strlen($num) > 10) {
            return "金额太大,请检查";
        }
        $i = 0;
        $c = "";
        while (1) {
            if ($i == 0) {
                $n = substr($num, strlen($num)-1, 1);
            } else {
                $n = $num % 10;
            }
            $p1 = substr($c1, 3 * $n, 3);
            $p2 = substr($c2, 3 * $i, 3);
            if ($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元'))) {
                $c = $p1 . $p2 . $c;
            } else {
                $c = $p1 . $c;
            }
            $i = $i + 1;
            $num = $num / 10;
            $num = (int)$num;
            if ($num == 0) {
                break;
            }
        }
        $j = 0;
        $slen = strlen($c);
        while ($j < $slen) {
            $m = substr($c, $j, 6);
            if ($m == '零元' || $m == '零万' || $m == '零亿' || $m == '零零') {
                $left = substr($c, 0, $j);
                $right = substr($c, $j + 3);
                $c = $left . $right;
                $j = $j-3;
                $slen = $slen-3;
            }
            $j = $j + 3;
        }
        if (substr($c, strlen($c)-3, 3) == '零') {
            $c = substr($c, 0, strlen($c)-3);
        }
        if (empty($c)) {
            return "零元整";
        }else{
            return $c . "整";
        }
    }
}

 

//经纬度转换 高德(腾讯)转 百度
if (!function_exists('gd_trans_bd')) {
    function gd_trans_bd($gd_lat, $gd_lon){
        $x_pi = 3.14159265358979324 * 3000.0 / 180.0;
        $x = $gd_lon;
        $y = $gd_lat;
        $z = sqrt($x * $x + $y * $y) + 0.00002 * sin($y * $x_pi);
        $theta = atan2($y, $x) + 0.000003 * cos($x * $x_pi);
        $bd_lon = $z * cos($theta) + 0.0065;
        $bd_lat = $z * sin($theta) + 0.006;
        return [
            'lat' => $bd_lat,
            'lng' => $bd_lon
        ];
    }
}

 

// 经纬度转换 百度 转 高德(腾讯)
if (!function_exists('bd_trans_gd')) {
    function bd_trans_gd($bd_lat, $bd_lon){
        $x_pi = 3.14159265358979324 * 3000.0 / 180.0;
        $x = $bd_lon - 0.0065;
        $y = $bd_lat - 0.006;
        $z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * $x_pi);
        $theta = atan2($y, $x) - 0.000003 * cos($x * $x_pi);
        $gg_lon = $z * cos($theta);
        $gg_lat = $z * sin($theta);
        return [
            'lat' => $gg_lat,
            'lng' => $gg_lon
        ];
    }
}

 

// PHP弹出手机端弹窗
if (!function_exists('layer_open')) {
    function layer_open($msg, $time = 2, $url = ''){
        $str = '<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">';
        $str .= '<meta name="app-mobile-web-app-capable" content="yes">';
        $str .= '<script type="text/javascript" src="/static/js/jquery-1.11.1.min.js"></script>';
        $str .= '<script type="text/javascript" src="/static/js/layer/mobile/layer.js"></script>';
        $str .= '<script>';
        if($url == ''){
            $url = "javascript:history.go(-1);";
        }
        $str .= '$(function(){ layer.open({style: "border:none; background-color:rgba(1,1,1,0.4); color:#fff;",content:"' .
            $msg . '",skin: "msg", time: '.$time.',end:function(){ location.href = "'.$url
            .'"; } }); });';
        $str .= '</script>';
        echo $str;
        exit;
    }
}

 

// 去除字符串中的emoji表情
if (!function_exists('remove_emoji')) {
    function remove_emoji($text) {
        $clean_text = "";

 

        // Match Emoticons
        $regexEmoticons = '/[\x{1F600}-\x{1F64F}]/u';
        $clean_text = preg_replace($regexEmoticons, '', $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;
    }
}

 

// 二维数组排序(默认正序)
if (!function_exists('array_sorts')) {
    /**
     * @param $array
     * @param $field
     * @param string $sort
     * @return mixed
     */
    function array_sorts($array, $field, $sort = 'SORT_ASC')
    {
        $arrSort = [];
        foreach ($array as $uniqid => $row) {
            foreach ($row as $key => $value) {
                $arrSort[$key][$uniqid] = $value;
            }
        }
        array_multisort($arrSort[$field], constant($sort), $array);
        return $array;
    }
}

 

if (!function_exists('get_distance')) {
    /**
     * 求两个已知经纬度之间的距离,单位为米
     * @param float $lng1 经度
     * @param float $lat1 纬度
     * @param float $lng2 经度
     * @param float $lat2 纬度
     * @return float 距离,单位米
     */
    function get_distance($lng1, $lat1, $lng2, $lat2) {
        // 将角度转为狐度
        $radLat1 = deg2rad($lat1); //deg2rad()函数将角度转换为弧度
        $radLat2 = deg2rad($lat2);
        $radLng1 = deg2rad($lng1);
        $radLng2 = deg2rad($lng2);
        $a = $radLat1 - $radLat2;
        $b = $radLng1 - $radLng2;
        $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137 * 1000;
        return $s;
    }
}

 

if (!function_exists('is_json')) {
    /**
     * 判断是否为json数据.
     * @param mixed $data 带判断的数据
     * @return int
     */
    function is_json($data)
    {
        if (!is_string($data) || $data === null || $data === '' || is_numeric($data)) {
            return 0;
        }
        $data = selfHtmlspecialchars($data, 1);
        json_decode($data, true);
        switch (json_last_error()) {
            case JSON_ERROR_NONE:
                $is_json = 1;
                break;
            default:
                $is_json = 0;
        }
        return $is_json;
    }
}

 

if (!function_exists('json_format')) {
    /**
     * 数据解析
     * @param string|mixed $data 待解析数据
     * @param int $is_err_return 解析失败,是否原样返回
     * @return array|mixed
     */
    function json_format($data, $is_err_return = 0)
    {
        if (is_json($data)) {
            $data = json_decode(selfHtmlspecialchars($data, 1), true);
            if (!is_array($data)) { // 解决 '"{\"a\":\"b\"}"' 这种数据问题(is_json通过,但需要 decode 多次的问题)
                $data = [];
            }
        } else {
            $data = $is_err_return ? $data : [];
        }
        return $data;
        //return is_json($data) ? json_decode(selfHtmlspecialchars($data, 1), true) : ($is_err_return ? $data : []);
    }
}

 

if (!function_exists('selfHtmlspecialchars')) {
    /**
     * 自定义字符串实体互转
     * @param string $str
     * @param int $is_decode 0=转为html实体,1=转换普通字符串
     * @param int $flags 自定义的转换方式,默认为 单双引号都转换
     * @return string
     */
    function selfHtmlspecialchars(string $str, int $is_decode = 0, $flags = ENT_QUOTES): string
    {
        return $is_decode ? htmlspecialchars_decode($str, $flags) : htmlspecialchars($str, $flags);
    }
}

 

if (!function_exists('is_amount')) {
    /**            
     * 金额校验函数
     * @param $value
     * @param bool $isZero
     * @param bool $negative
     * @return bool
     */
    function is_amount($value, $isZero=false, $negative=false){
        // 必须是整数或浮点数,且允许为负
        if (!preg_match("/^[-]?\d+(.\d{1,2})?$/", $value)){
            return false;
        }
        // 不为 0
        if (!$isZero && empty((int)($value*100))){
            return false;
        }
        // 不为负数
        if (!$negative && (int)($value * 100) < 0){
            return false;
        }
        return true;
    }
}

 

if (!function_exists('con_url')) {
    /**
     * 富文本中图片路径处理
     * @param string $con 处理的字符串
     * @param integer $cut_host 是否去掉域名信息(只取出图片的),1=去掉
     * @return string
     */
    function con_url($con, $cut_host = 0): string
    {
        if (!empty($con)) {
            $con = stripslashes(selfHtmlspecialchars($con, 1));
            $pregRule = "/<[img|IMG].*?src=[\'|\"](.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\'|\"].*?[\/]?>/";
            preg_match_all($pregRule, $con, $imgs);
            $imgs = $imgs[1];
            if (!empty($imgs)) {
                $new_imgs = [];
                foreach ($imgs as $key => $value) {
                    $imgs[$key] = '"' . $value . '"';
                    $new_imgs[] = '"' . ($cut_host ? str_replace(host_url(), '', $value) : path_format($value)) . '"';
                }
                $con = str_replace($imgs, $new_imgs, $con);
            }
        } else {
            $con = '';  // 解决text字段null值的问题
        }
        return $con;
    }
}

 

if (!function_exists('is_mobile')) {
    /**
     * 判断是否手机号.
     * @param string mobile 需要检验的手机号
     * @return bool
     */
    function is_mobile(string $mobile): bool
    {
        if (!preg_match('/^1[3-9]\\d{9}$/', $mobile)) {
            return false;
        }
        return true;
    }
}

 


if (!function_exists('is_email')) {
    /**
     * 验证是否为邮箱
     * @param $email
     * @return int
     */
    function is_email($email)
    {
        return preg_match("/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/", $email);
    }
}

 

if (!function_exists('mobile_hide')) {
    /**
     * 手机号中间部分隐藏.
     * @param $mobile
     * @return string
     */
    function mobile_hide(string $mobile): string
    {
        return empty($mobile) ? '' : substr_replace($mobile, '****', 3 + (strpos($mobile, '+') === false ? 0 : 3), 4);
    }
}

 

if (!function_exists('is_phone')) {
    /**
     * 判断是否电话号(包含固话和手机号)
     * @param string $phone 需要检验的电话号
     * @return bool
     */
    function is_phone(string $phone): bool
    {
        if (!preg_match("/^0\d{2,3}-\d{7,8}$|^1[3-9]\d{9}$/", $phone)) {
            return false;
        }
        return true;
    }
}

 

if (!function_exists('str_replace_explode'))
{
    /**
     * 替换用户填写的数据为 后台好处理为数组的数据
     */
    function str_replace_explode( $string )
    {
        $string = str_replace(' ', ',', $string);
        $string = str_replace(' ', ',', $string);
        $string = str_replace(',', ',', $string);
        $string = str_replace(';', ',', $string);
        $string = str_replace(';', ',', $string);

 

        $l_string = substr($string,0, 1);
        $r_string = mb_substr($string,-1, 1);
        if ( $l_string == ',' )
        {
            $string = ltrim($string,',');
        }

 

        if ( $r_string == ',' )
        {
            $string = rtrim($string, ',');
        }

 

        return $string;
    }
}

 

if (!function_exists('pre_month_day')) {
/**
 * 获取上个月的某个时间
 */
function pre_month_day($time)
{
      $preMonth = mktime(0, 0, 0,
         date("n", $time), 0, date("Y", $time)); //上个月最后一天的时间戳

 

      $preMonthMaxDay =  date("t", $preMonth);  //上个月的最大天数

 

      //如果当前月的最大天数大于上个月的最大天数,则以上个月的最大天数为准 比如3月31的上个月今天就是2月28或29
      if ($preMonthMaxDay < date("j", $time)) {
          return date("Y-m-d", $preMonth);
      }

 

      return date(date("Y-m", $preMonth) . "-d", $time);
  }
}

 

if (!function_exists('replace_img_alt_title')) {
    /**
     * 替换img标签中的 alt 和 title 的值
     */
    function replace_img_alt_title($content, $title)
    {
        $pattern= "/<img.*?src=[\"|\'](.*?)[\"|\'].*?>/";
        $replace = '<img src="$1" alt="'.$title.'"title="'.$title.'">';
        $html = preg_replace($pattern, $replace, $content);
        return $html;
    }
}

 

if (!function_exists('getfiles')) {
    /**
     * 递归获取所有文件
     *
     * @param string $path             文件路径
     * @param string $allowFiles     匹配文件名的正则表达式 (默认为空 全部文件)
     * @param number $depth         递归深度, 默认 1
     * @return array                  所有文件
    **/
    function getfiles($path, $allowFiles = '', $depth = 1, $substart = 0, &$files = array()){
        $depth--;
        $path = realpath($path) . '/';
        $substart = $substart ? $substart : strlen($path);

 

        if (!is_dir($path)){
            return false;
        }

 

        if($handle = opendir($path)){
            while (false !== ($file = readdir($handle))) {
                if ($file != '.' && $file != '..') {
                    $path2 = $path . $file;
                    if (is_dir($path2) && $depth > 0){
                        getfiles($path2, $allowFiles, $depth, $substart, $files);
                    } elseif (empty($allowFiles) || preg_match($allowFiles, $file)) {
                        $files[] = substr($path2, $substart);
                    }
                }
            }
        }
        sort($files);
        return $files;
    }
}

 

if (!function_exists('str_replace_nth')) {
    // 替换字符串中的第n个字符
    function str_replace_nth($search, $replace, $subject, $nth)
    {
        $found = preg_match_all('/' . preg_quote($search).'/', $subject, $matches, PREG_OFFSET_CAPTURE);
        if (false !== $found && $found > $nth) {
            return substr_replace($subject, $replace, $matches[0][$nth][1], strlen($search));
        }
        return $subject;
    }
}

 

if (!function_exists('getArrayMerge')) {
 /*
  * 合并数据,如果键值相等其值相加
  * @param array $descs
  * @param array $json_wares
  */
function getArrayMerge($descs, $json_wares)
{
   if (is_array($descs) && is_array($json_wares)) {
            $arrayMerge = array();
            foreach ($json_wares as $key=>$value) {
                if (array_key_exists($key, $descs)) {
                    $arrayMerge[$key] = $value + $descs[$key];
                    unset($descs[$key]);
                } else {
                    $arrayMerge[$key] = $value;
                }
            }
            return $arrayMerge+$descs;
       } else {
            return false;
       }
    }
}

 

/*  base64格式编码转换为图片并保存对应文件夹 */
function base64_image_content($base64_image_content,$path){
    //匹配出图片的格式
    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
        $type = $result[2];
        $new_file = $path."/".date('Ymd',time())."/";
        if(!file_exists($new_file)){
            //检查是否有该文件夹,如果没有就创建,并给予最高权限
            mkdir($new_file, 0700);
        }
        $new_file = $new_file.time().".{$type}";
        if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))){
            return '/'.$new_file;
        }else{
            return false;
        }
    }else{
        return false;
    }
}

 

function getImageByContent($content)
{
    $preMatch = "/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/";
    @preg_match_all($preMatch, $content, $img_array);
    $img_array = isset($img_array[1]) ? array_unique($img_array[1]) : [];
    return $img_array;
}

 

function esub($str, $length = 0) {
    if($length < 1){
        return $str;
    }
    //计算字符串长度
    $strlen = (strlen($str) + mb_strlen($str,"UTF-8")) / 2;
    if($strlen < $length)
    {
        return $str;
    }
    if(mb_check_encoding($str,"UTF-8")){
        $str = mb_strcut(mb_convert_encoding($str, "GBK","UTF-8"), 0, $length, "GBK");
        $str = mb_convert_encoding($str, "UTF-8", "GBK");
    }else{
        return mb_substr($str, 0, 1000);
    }
    //    $str = rtrim($str," ,.。,-——(【、;‘“??《<@");
    return $str;
}

 

if (function_exists("verifySign")) {
        /*
     * 生成签名
     * @param array $array
     * @param string $signParam
     * @param string $signKey
     * @param bool $isSign
     * @return bool|string
     * */
    function verifySign($array=array(),$signParam='',$signKey='',$isSign=false){
        if(!$array || !$signParam){
            return false;
        }
        if(!$isSign){
            $key = $array[$signParam];
        }
        unset($array[$signParam]);
        ksort($array);
        $str="";
        foreach ($array as $k=>$v) {
            $v = urlencode(htmlspecialchars_decode($v));
            $str .= "&{$k}={$v}";
        }
        $str = substr($str, 1);
        return  $isSign ? $str."&{$signParam}=".md5($str.$signKey) : $key == md5($str.$signKey);
    }
}

点赞(2) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部