function.php 5.2 KB
<?php


/**
 * redis 驱动
 * @return \Lib\RedisPool
 * @author:dc
 * @time 2023/2/13 9:44
 */
function redis():\Lib\RedisPool {

    return \Lib\RedisPool::instance(co::getCid());

}


/**
 * 操作db
 * @return \Lib\DbPool
 * @author:dc
 * @time 2023/2/13 14:15
 */
function db():\Lib\DbPool{

    return \Lib\DbPool::instance(co::getCid());
}





/**
 * 记录日志
 * @param $message
 * @author:dc
 * @time 2023/2/10 14:58
 */
function logs($message,$filename=null){

    $filename = $filename ? $filename : LOG_PATH.'/error.log';
    if(!is_dir(dirname($filename))){
        @mkdir(dirname($filename),0755,true);
    }

    @file_put_contents(
        $filename,
        date('Y-m-d H:i:s ').print_r($message,true).PHP_EOL,
        FILE_APPEND
    );

}


/**
 * 消息输出
 * @param $message
 * @author:dc
 * @time 2023/2/10 15:42
 */
function _echo($message){
    echo date('Y-m-d H:i:s').' '.$message."\n";
}



/**
 * 文本消息,多语言
 * @param $key
 * @return mixed
 * @author:dc
 * @time 2023/2/13 10:51
 */
function __($key):mixed{
   return $key ? \Lib\Lang::msg($key) : '';
}


/**
 * @return \Lib\App
 * @author:dc
 * @time 2023/2/13 11:48
 */
function app():\Lib\App{
    return \Lib\App::instance();
}


/**
 * 过滤函数
 * @param $value
 * @param null $filter
 * @return array|false|float|int|mixed
 * @author:dc
 * @time 2023/2/13 11:54
 */
function my_filter($value,$filter=null){
    if(is_array($value)){
        foreach ($value as $key=>$val){
            $value[$key]    =   my_filter($val,$filter);
        }
    } else {
        // 过滤函数
        if(!is_array($filter)){
            $filter =   [$filter];
        }
        // 合并默认过滤
        $filter =   array_merge(['trim'], $filter);

        // 循环过滤
        foreach ($filter as $fil){
            $fil && $value  =   call_user_func($fil,$value);
        }
    }
    // 强制转类型
    if(is_numeric($value)&&strlen($value)<10&&intval(substr($value,0,1))!==0){
        if(strpos($value,'.')!==false){
//            $value = doubleval($value); 这个要报毒,华为电脑
            $value = floatval($value);
        }else{
            $value = intval($value);
        }
    }

    return $value;
}

/**
 *  db 组合条件
 * @param array $where
 * @param string $ar
 * @return string
 * @author:dc
 * @time 2023/2/17 10:41
 */
function dbWhere(array $where, string $ar = 'and'):string{
    $sql = [];
    foreach ($where as $f=>$v){
        if(is_array($v)){
            $v = array_map(function ($n){
                return "'".addslashes($n)."'";
            },$v);
            $sql[] = "`{$f}` in (".implode(',',$v).")";
        }else{
            $sql[] = "`{$f}` = '".addslashes($v)."'";
        }

    }
    return implode(' '.$ar.' ',$sql);
}

/**
 * db 更新sql
 * @param array $data
 * @return string
 * @author:dc
 * @time 2023/2/17 10:43
 */
function dbUpdate(array $data):string {
    $sql = [];
    foreach ($data as $f=>$v){
        $sql[] = "`{$f}` = :{$f}";
    }
    return implode(' , ',$sql);
}


/**
 * 获取token
 * @return string
 * @author:dc
 * @time 2023/2/17 14:24
 */
function token():string {
    $toekn = app()->request('_token_');

    if(!preg_match("/^[a-z0-9]{32}$/",$toekn)){
        app()->e('token_verify_error');
    }
    return $toekn;
}


/**
 * 分页数据
 * @param $item
 * @param $total
 * @param $page
 * @param $limit
 * @return array
 * @author:dc
 * @time 2023/2/17 15:05
 */
function listsPage($item,$total,$page,$limit){
    return [
        'item'  =>  $item,
        'page'  =>  $page,
        'total'  =>  $total,
        'limit'  =>  $limit,
    ];
}




/**
 * 把返回的数据集转换成Tree
 * @param $list array 数据列表
 * @param string|int $pk 主键|root
 * @param string $pid 父id
 * @param string $child 子键
 * @param int $root 获取哪个id下面
 * @param bool $empty_child 当子数据不存在,是否要返回空子数据
 * @return array
 */
function list_to_tree($list, $pk='id',$pid = 'pid',$child = '_child',$root=0,$empty_child=true) {
    // 创建Tree
    $tree = array();
    if(is_array($list)) {
        // 创建基于主键的数组引用
        $refer = array();
        foreach ($list as $key => $data) {
            if($empty_child){
                $list[$key][$child] =   [];
            }
            $refer[$data[$pk]] =& $list[$key];
        }
        foreach ($list as $key => $data) {
            // 判断是否存在parent
            $parentId = $data[$pid];
            if ($root == $parentId) {
                $tree[] =& $list[$key];
            }else{
                if (isset($refer[$parentId])) {
                    $refer[$parentId][$child][] =   & $list[$key];
                }
            }
        }
    }
    return $tree;
}


/**
 * todo:: 立即开始同步邮件,非必要请不要手动调用,,系统有定时调用,
 * @author:dc
 * @time 2023/2/18 11:04
 */
function start_now_mail(){
    $id = 0;

    while (true){
        $ids = db()->all('select `id` from `'.\Model\emailSql::$table.'` where `id` > '.$id.' order by `id` asc limit 1000 offset 0');
        if(!$ids){
            break;
        }
        foreach ($ids as $v){
            $id = $v['id'];
            redis()->rPush('sync_email_lists', $v['id']);
        }
    }

}