个人常用php函数

/**
 * 格式化时间为 Y-m-d H:i:s
 * @param string $timestamp
 * @return false|string
 */
function datetime($timestamp='')
{
    if ($timestamp == '') {
        $timestamp = time();
    }
    return date('Y-m-d H:i:s', $timestamp);
}

/**是否为手机号码
@param $mobile 手机号码
@return boolean
 ***************************************************/
function is_mobile($mobile) {

        // todo 根据最新前三位号段,更精准区分是否手机号
    return preg_match("/^1[3-9][0-9]{9}$/", trim($mobile));
}


/***************************************************/
/**
 * 写日志到表
 */
function doLog($msg, $type='默认'){
    if (is_array($msg)) {
        $msg = arraytostr($msg);
    }

    // todo 改成写入文件。数组也可以写;多个结果如何打印?
    \think\Log::record('type:'.$type.'=>'.$msg, 'zgw_normal_log');
    // zgw_debug.log 手动建立,需要可写权限
    // file_put_contents('zgw_debug.log', $data, FILE_APPEND);
}

// 数组转合适的字符串输入
function arraytostr($data)
{
    $str = '';

    if (is_array($data)) {
        $str .=  '[';
        foreach ($data as $key => $value) {
            if (is_array($value)) {
                $str .= $key .' => '.arraytostr($value).',';
            } else {
                $str .=  $key .' => '.$value.',';
            }

        }
        $str = rtrim($str, ',');
        $str .=  ']';
    } else {
        $str = (string) $data;
    }

    return $str;
}
/***************************************************/

/**
 * 替换手机号码中间四位数字
 * @param  [type] $str [description]
 * @return [type]      [description]
 */
function hide_phone($str){
    $resstr = substr_replace($str,'****',3,4);
    return $resstr;
}

/**
 * [is_weixin 是否微信访问]
 * @return boolean
 */
function is_weixin() {
    if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) {
        return true;
    } else {
        return false;
    }
}

/**
 * 获取周期的开始跟结束
 * todo 待完善条件,比如本周:从周一开始到今天,还是到下周一0点?
 * 比如,倒数七天?倒数30天?
 * 再比如,本日、本周、本月?
 * 
 * @Author   李盛滔
 * @DateTime 2019-11-29T17:38:33+0800
 * @param    [type]                   $date [description]
 * @return   [type]                         [description]
 */
function get_week($date)
{
    //当前日期
    $sdefaultDate = $date;
    //$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
    $first = 1;
    //获取当前周的第几天 周日是 0 周一到周六是 1 - 6
    $w = date('w',strtotime($sdefaultDate));
    //获取本周开始日期,如果$w是0,则表示周日,减去 6 天
    $week_start = date('Y-m-d',strtotime("$sdefaultDate -".($w ? $w - $first : 6).' days'));
    //本周结束日期
    $week_end = date('Y-m-d',strtotime("$week_start +6 days"));
    return [$week_start,$week_end];
}

/**
 * [format_time 个性化显示时间]
 * @param  [type] $date 日期:2022-10-12 12:12:12
 * @return [type]       [description]
 */
function format_time($date)
{
    $nowTime = time();
    $showTime = strtotime($date);
    $dur = $nowTime - $showTime;

    if($dur < 60 ){
        return '刚刚';
    }elseif($dur < 3600){
        return floor($dur/60).'分钟前';
    }elseif($dur < 86400){
        return floor($dur/3600).'小时前';
    }elseif($dur < 259200){
        return floor($dur / 86400) . '天前';
    }elseif(date('Y') == date('Y',$showTime)){
        return date('m-d H:i',$showTime);
    }else{
        return $date;
    }
}

/**
 * filter_sensitive_word   过滤敏感词
 * @param  string $content 内容
 * @return string          过滤后结果
 */
function filter_sensitive_word($content)
{
    $replace = \think\Cache::store('redis')->get('sensitiveWords');
    if(!$replace){
        $list = M('SensitiveWords')->select();
        $replace = array();
        foreach ($list as $value) {
            $replace[$value['word']] = $value['replace'];
        }
        \think\Cache::store('redis')->set('sensitiveWords',$replace);
    }
    $content = strtr($content, $replace);
    return $content;
}

/**
 * 获取域名, 不包含https or http
 * @return string
 */
function get_domain()
{
    // 得到协议在内的完整域名,如https://news.www.baidu.com
    $domain = request()->domain();

    if (strpos($domain, 'https://') > -1 || strpos($domain, 'http://') > -1) {
        $arr1 = explode('//', $domain);
        $domain = $arr1[1];
    }

    return $domain;
}

/**
 * 获取二级域名
 * @return string
 */
function get_sub_domain()
{
    $domain = get_domain();

    $arr2 = explode('.', $domain);
    unset($arr2[count($arr2) - 1]);
    unset($arr2[count($arr2) - 1]);
    $sub_domain = implode('.', $arr2);

    return $sub_domain;
}

/***************************************/
//去掉数组里面的null
function null_filter($arr)
{
    foreach($arr as $key=>&$val) {
        if(is_array($val)) {
            $val = null_filter($val);
        } else {
            if($val === null){
                $arr[$key]='';
            }
        }
    }
    return $arr;
}
// 返回json
function backJson($info){
    echo json_encode(null_filter($info));
    exit;
}
// 快捷返回 ,增加msg兼容以前的E方法抛出异常(E不合理,要全面调整)
function fastBackJson($code, $message, $data = false)
{
    $res = array('code' => $code, 'message' => $message, 'msg' => $message);
    if ($data !== false) {
        $res['data'] = $data;
    }
    backJson($res);
}
// 非法访问
function illegal(){
    echo json_encode(array('code' => 0, 'message' => '非法访问', 'msg' => '非法访问'));die;
}
// 其他错误
function show_false($msg='错误', $code = 0){
    echo json_encode(array('code' => $code, 'message' => $msg, 'msg' => $msg));die;
}
/***************************************/
/**
 * 是否本地环境,用于判断不执行微信相关需要走非本地的情况
 */
function is_local()
{
    $host_name = explode(':', $_SERVER['HTTP_HOST'])[0];
    // happymatch.cn 使用不同的域名前缀,作为不同的公众号区分。这里非这个域名的就算是本地的
    if (preg_match('/(.*).happymatch.cn/', $host_name)) {
        return false;
    } else {
        return true;
    }
}

/**
 * 加密函数,用于id、电话双向传输时,不被修改
 * @param $txt 要加密的内容
 * @param string $key 秘钥
 * @return string
 */
function lock_url($txt,$key='r4r4')
{
    $txt = $txt.$key;
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";
    $nh = rand(0,64);
    $ch = $chars[$nh];
    $mdKey = md5($key.$ch);
    $mdKey = substr($mdKey,$nh%8, $nh%8+7);
    $txt = base64_encode($txt);
    $tmp = '';
    $i=0;$j=0;$k = 0;
    for ($i=0; $i<strlen($txt); $i++) {
        $k = $k == strlen($mdKey) ? 0 : $k;
        $j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64;
        $tmp .= $chars[$j];
    }
    return urlencode(base64_encode($ch.$tmp));
}

/**
 * 解密函数,用于id、电话双向传输时,不被修改
 * @param $txt 要解密的内容
 * @param string $key 秘钥
 * @return string
 */
function unlock_url($txt,$key='r4r4')
{
    $txt = base64_decode(urldecode($txt));
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";
    $ch = $txt[0];
    $nh = strpos($chars,$ch);
    $mdKey = md5($key.$ch);
    $mdKey = substr($mdKey,$nh%8, $nh%8+7);
    $txt = substr($txt,1);
    $tmp = '';
    $i=0;$j=0; $k = 0;
    for ($i=0; $i<strlen($txt); $i++) {
        $k = $k == strlen($mdKey) ? 0 : $k;
        $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);
        while ($j<0) $j+=64;
        $tmp .= $chars[$j];
    }
    return trim(base64_decode($tmp),$key);
}


/**
 * 过滤微信emoji字符
 * @param $nickname
 * @return string
 */
function filterNickname($nickname){
    $nickname = preg_replace('/[\x{1F600}-\x{1F64F}]/u', '', $nickname);

    $nickname = preg_replace('/[\x{1F300}-\x{1F5FF}]/u', '', $nickname);

    $nickname = preg_replace('/[\x{1F680}-\x{1F6FF}]/u', '', $nickname);

    $nickname = preg_replace('/[\x{2600}-\x{26FF}]/u', '', $nickname);

    $nickname = preg_replace('/[\x{2700}-\x{27BF}]/u', '', $nickname);
    $nickname = preg_replace('/[\xf0-\xf7].{3}/', '', $nickname);

    $nickname = str_replace(array('"','\''), '', $nickname);

    return trim($nickname);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值