🔓 Ultimate Webshell - Penetration Testing Tool

📖 File Reader

<?php
namespace app\admin\common;
use app\BaseController;
use think\facade\Db;
use think\facade\Session;
use think\facade\View;

/**
 * 配置信息
 */
class Common_config extends BaseController
{
    /**
     * 平台配置信息
     * @param $field_name 字段名称(空则查询全部)
     */
    static function config($field_name='')
    {
        $where = 1;
        if (!empty($field_name)){
            $where .= " and field_name in ($field_name)";
        }
        $list = db::name("config")->where($where)->field("id,name,field_name,value")->select();
        $data = array();//定义数组
        foreach ($list as $k => $v){
            $data[$v["field_name"]] = $v["value"];
        }
        return $data;
    }

    /**
     * 提取富文本里的图片信息
     * @param $contentStr 富文本数据
     * @return array
     */
    static function getPatternMatchImages($contentStr = ""){
        $imgSrcArr = [];
        //首先将富文本字符串中的 img 标签进行匹配
        //$pattern_imgTag = '/<img\b.*?(?:\>|\/>)/i';
        $pattern_imgTag = '/<img[^>]+>/i';
        preg_match_all($pattern_imgTag,$contentStr,$matchIMG);
        if (isset($matchIMG[0])){
            foreach ($matchIMG[0] as $key => $imgTag){
                //进一步提取 img标签中的 src属性信息
                $pattern_src = '/\bsrc\b\s*=\s*[\'\"]?([^\'\"]*)[\'\"]?/i';
                preg_match_all($pattern_src,$imgTag,$matchSrc);
                if (isset($matchSrc[1])){
                    foreach ($matchSrc[1] as $src){
                        //将匹配到的src信息压入数组
                        $imgSrcArr[] = $src;
                    }
                }
            }
        }
        //$pattern= '/<img\b.+\bsrc\b\s*=\s*[\'\"]([^\'\"]*)[\'\"]/iU';
        return $imgSrcArr;
    }

    /**
     * bese64格式图片存储本地
     * @param $base64_string 图片字符串
     * @return void
     */
    static function bese64_transition($base64_string='')
    {
        $base64_arr = explode(',',$base64_string);
        if($base64_arr[0] != 'data:image/png;base64' && $base64_arr[0] != 'data:image/jpeg;base64'){
            $data = ['code'=>400,'msg'=>'格式错误,请传入base64格式'];
            return $data;
        }
        // 去掉Base64字符串开头的数据头部
        $base64_string = explode(',', $base64_string)[1];
        // 解码Base64字符串
        $decoded_data = base64_decode($base64_string);
        ///生成文件并写入
        $file_name = md5(time().rand(0,99999).rand(0,99999).rand(0,99999)).'.png';//文件名
        $file_link = '/public/uploads/imageData/'.date("Ymd",time()).'/';
        $path = $_SERVER['DOCUMENT_ROOT'].$file_link;//文件地址
        if(!is_readable($path)) {is_file($path) or mkdir($path,0777);}
        if (file_put_contents($path.$file_name, $decoded_data) !== false) {  // 将解码后的数据写入到文件
            $data = ['code'=>200,'msg'=>'转换成功','file_link'=>$file_link.$file_name];
            return $data;
        } else {
            $data = ['code'=>400,'msg'=>'转换失败'];
            return $data;
        }
    }

    /**
     * 地区联动查询
     * @param int $region_id 地区id
     */
    static function region_d($region_id=0)
    {
        $list = db::name("region")->where("pid = $region_id")->field("id,pid,name,level")->order("id asc")->select()->toArray();
        return $list;
    }

    /*地区联动(多维数组)*/
    static function region_dw()
    {
        $arr_1 = db::name("region")->where("level = 1")->field("id,pid,name,level")->order("id asc")->select();
        $arr_2 = db::name("region")->where("level = 2")->field("id,pid,name,level")->order("id asc")->select();
        $arr_3 = db::name("region")->where("level = 3")->field("id,pid,name,level")->order("id asc")->select();
        $new_arr2 = [];
        foreach($arr_2 as $v2){
            $data= [
                'value' => $v2['id'],
                'label' =>  $v2['name'],
                'pid' => $v2['pid'],
                'children'=>[],
            ];
            foreach($arr_3 as $v3){
                if($v2['id'] == $v3['pid']){
                    $data['children'][] = [
                        'value'=> $v3['id'],
                        'label' =>  $v3['name'],
                        'pid' => $v3['pid'],
                        'children'=>[],
                    ];
                }
            }
            $new_arr2[]=$data;
        }
        $new_arr1 = [];
        foreach($arr_1 as $v1){
            $data= [
                'value' => $v1['id'],
                'label' =>  $v1['name'],
                'pid' =>  $v1['pid'],
                'children'=>[],
            ];
            foreach($new_arr2 as $nv2){
                if($v1['id'] == $nv2['pid']){
                    $data['children'][] = [
                        'value' => $nv2['value'],
                        'label' =>  $nv2['label'],
                        'pid' =>  $nv2['pid'],
                        'children' =>  $nv2['children']
                    ];
                }
            }
            $new_arr1[] = $data;
        }
//        $region = [
//            'value' => '1',
//            'label' => '中国',
//            'children' => $new_arr1,
//        ];
        return $new_arr1;
    }

    /**
     * 地区联动(多维数组)
     * @param in $region_id_guolv 过滤掉id
     * @return array
     */
    static function region_dw_create($region_id_guolv='')
    {
        $where = 1;
        if (!empty($region_id_guolv)){
            $where .= " and id not in ($region_id_guolv)";
        }
        $region_lindian = db::name("region")->where($where)->field("id as value,pid,name as label")->select()->toArray();
        $arr = Common_config::array_reinstallation($region_lindian);
        return $arr;
    }

    /**
     * 所管辖的地区id
     * @param string $pid 所属上级id
     * @return false|string
     */
    static function region_team($pid = '')
    {
        $team_region_id = '';//管辖地区id
        while ($pid != ''){
            $list = db::name("region")->where("pid in ($pid)")->field("id,name")->select()->toArray();
            $list_pid_id = '';
            foreach ($list as $v){
                $list_pid_id .= $v["id"].',';
            }
            $team_region_id .= $list_pid_id;
            if (!empty($list_pid_id)){
                $list_pid_id = substr($list_pid_id,0,strlen($list_pid_id)-1);
            }
            $pid = $list_pid_id;
        }
        if (!empty($team_region_id)){
            $team_region_id = substr($team_region_id,0,strlen($team_region_id)-1);
        }
        return $team_region_id;
    }

    /**
     * 数组重装(根据父级重装)
     * @param array $arr 全部数组
     * @param int $superior_id
     * @return array
     */
    static function array_reinstallation($arr=[],$superior_id=0)
    {
        $arr_list = $arr;
        $arr_xin = [];
        foreach ($arr as $v){
            $v_superior_id = $v["pid"];
            /*筛选上级是否存在,不存在重置上级id*/
            $is_cunzai = 0;
            foreach ($arr_list as $v2){
                if ($v_superior_id == $v2["value"]){
                    $is_cunzai = 1;
                }
            }
            $v_superior_id = $is_cunzai==0?0:$v_superior_id;
            if ($v_superior_id == $superior_id){
                $list = Common_config::array_reinstallation($arr_list,$v["value"]);
                $v["children"] = $list;
                $arr_xin[] = $v;
            }
        }
        return $arr_xin;
    }

    /**
     * 二维数组标识数字转字母
     * @param $num 标识1=A,以此类推
     * @return string
     */
    static function numberToLetter($num=1) {
        $num -= 1;
        $letter = '';
        while ($num >= 0) {
            $letter = chr($num % 26 + 65) . $letter;
            $num = intval($num / 26) - 1;
        }
        return $letter;
    }
}