thinphp6-封装一堆类

2023-11-12

获取文件来源路径

<?php
declare (strict_types = 1);

namespace app\util;

use think\Exception;
use think\facade\Session;

class File{

    public function getFileFromPath($path){
        set_time_limit(0);
        $ret=['code'=>400,'url'=>[],'data'=>[],'message'=>'目录不存在'];
        if(is_dir($path)) {
            $handler = opendir($path);
            while (($filename = readdir($handler)) !== false) {
                //略过linux目录的名字为'.'和‘..'的文件
                if ($filename != "." && $filename != "..") {
                    //输出文件名
                    $ret['code']  = 200;
                    $ret['url'][] = request()->domain() . '/' . $path . '/' . $filename;
                }
            }
            closedir($handler);
        }
        return $ret;
    }
}

常用公共方法

<?php
// 应用公共文件
function getSysterm(){
    $os='';
    $Agent=Request()->header('user-agent');
    setLog($Agent,'getSysterm','trace');
    if (preg_match('/(Windows)/i',$Agent) && strpos($Agent, '95')){
        $os='Windows 95';
    }elseif(preg_match('/(Windows 9x)/i',$Agent) && strpos($Agent, '4.90')){
        $os='Windows ME';
    }elseif(preg_match('/(Windows)/i',$Agent) && preg_match('/(98)/i',$Agent)){
        $os='Windows 98';
    }elseif(preg_match('/(Windows)/i',$Agent) && preg_match('/(nt 5.0)/i',$Agent)){
        $os='Windows 2000';
    }elseif(preg_match('/(Windows)/i',$Agent) && preg_match('/(nt 6.0)/i',$Agent)){
        $os='Windows Vista';
    }elseif(preg_match('/(Windows)/i',$Agent) && preg_match('/(nt 6.1)/i',$Agent)){
        $os='Windows 7';
    }elseif(preg_match('/(Windows)/i',$Agent) && preg_match('/(nt 5.1)/i',$Agent)){
        $os='Windows XP';
    }elseif(preg_match('/(Windows)/i',$Agent) && preg_match('/(nt)/i',$Agent)){
        $os='Windows NT';
    }elseif(preg_match('/(Windows)/i',$Agent) && preg_match('/(32)/i',$Agent)){
        $os='Windows 32';
    }elseif(preg_match('/(linux)/i',$Agent)){
        $os='Linux';
    }elseif(preg_match('/(unix)/i',$Agent)){
        $os='Unix';
    }else if(preg_match('/(sun)/i',$Agent) && preg_match('/(os)/i',$Agent)){
        $os='SunOS';
    }elseif(preg_match('/(ibm)/i',$Agent) && preg_match('/(os)/i',$Agent)){
        $os='IBM OS/2';
    }elseif(preg_match('/(Mac)/i',$Agent) && preg_match('/(PC)/i',$Agent)){
        $os='Macintosh';
    }elseif(preg_match('/(PowerPC)/i',$Agent)){
        $os='PowerPC';
    }elseif(preg_match('/(AIX)/i',$Agent)){
        $os='AIX';
    }elseif(preg_match('/(HPUX)/i',$Agent)){
        $os='HPUX';
    }elseif(preg_match('/(NetBSD)/i',$Agent)){
        $os='NetBSD';
    }elseif(preg_match('/(BSD)/i',$Agent)){
        $os='BSD';
    }elseif(preg_match('/(OSF1)/i',$Agent)){
        $os='OSF1';
    }elseif(preg_match('/(IRIX)/i',$Agent)){
        $os='IRIX';
    }elseif(preg_match('/(FreeBSD)/i',$Agent)){
        $os='FreeBSD';
    }elseif($os==''){
        $os='Unknown';
    }
    return $os;
}

/*去掉特殊符号
 * $str:需要去掉特殊字符的字符串
 * $type:1-仅保留数字,2-仅保留英文,3-仅保留中文,4-保留英文和数字,5-保留中英文和数字,6-中国人名,7-中文英文数字和特殊字符,8-身份证,9-仅保留数字和小数点
 *
*/
function delSpecilaChar($str,$type){
    $pattern='';
    switch($type){
        case 1:
            $pattern='/[(0-9)]+/u';
            break;
        case 2:
            $pattern='/[(a-zA-Z)]+/u';
            break;
        case 3:
            $pattern='/[(\x{4e00}-\x{9fff})]+/u';
            break;
        case 4:
            $pattern='/[(0-9a-zA-Z)]+/u';
            break;
        case 5:
            $pattern='/[(\x{4e00}-\x{9fff}0-9a-zA-Z)]+/u';
            break;
        case 6:
            $pattern='/[(\x{4e00}-\x{9fff}·)]+/u';
            break;
        case 7:
            $pattern='/[(\x{4e00}-\x{9fff}0-9a-zA-Z_·<>\(\)\'\"-—\+\-)]+/u';
            break;
        case 8:
            $pattern='/[(0-9Xx)]+/u';
            break;
        case 9:
            $pattern='/[(0-9.)]+/u';
            break;
        default:
            $pattern='/[(\x{4e00}-\x{9fff}0-9a-zA-Z_·\+\-)]+/u';
            break;
    }
    preg_match_all($pattern, $str, $matches);
    $str = join('', $matches[0]);
    return $str;
}

//格式化浮点型数字,$amount:待格式化数组,$count保留的小数点位数
function getDecimal($amount,$count=2){
    $str='%.'.($count+1).'f';
    return substr(sprintf($str, $amount), 0, -1);
}

//生成密钥
//$type:1-全数字,2-全英文,3-英文数字,4-全小写英文,5-全大写英文,6-包含特殊符号
//$qty:密钥长度
function getKey($type,$qty){
    $str='';
    $chars = array(
      "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
      "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
      "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
      "u", "v", "w", "x", "y", "z", "A", "B", "C", "D",
      "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
      "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
      "Y", "Z", ".", ",", "+", "-", "!", "#", '$', '%',
      '^', '[', '*', '(', ')', '_', '=', '~', '`', '?'
    );
    switch($type){
        case 1:
            for($i=0;$i<$qty;$i++){
                $num=rand(0,9);
                $str.=$chars[$num];
            }
            break;
        case 2:
            for($i=0;$i<$qty;$i++){
                $num=rand(10,56);
                $str.=$chars[$num];
            }
            break;
        case 3:
            for($i=0;$i<$qty;$i++){
                $num=rand(0,56);
                $str.=$chars[$num];
            }
            break;
        case 4:
            for($i=0;$i<$qty;$i++){
                $num=rand(10,35);
                $str.=$chars[$num];
            }
            break;
        case 5:
            for($i=0;$i<$qty;$i++){
                $num=rand(36,56);
                $str.=$chars[$num];
            }
            break;
        case 6:
            for($i=0;$i<$qty;$i++){
                $num=rand(0,71);
                $str.=$chars[$num];
            }
            break;
        default:
            break;
    }
    return $str;
}

//生成编码日期+数字
//$prex:前缀
//$qty:长度
function getCode($prex='',$qty=10){
    $str=strtoupper($prex);
    $slen=$qty-strlen($prex);
    if($slen<=0){
        $str=substr( $str, 0, $slen );
    }
    if($slen<8){
        $str.=getKey(1,$slen);
    }
    if($slen==8){
        $str .= date('dHis');
    }
    if($slen>8) {
        $str .= date('Ymd');
        $nqty = $slen - 8;
        $blen = 9;
        for ($i = 1; $i < $nqty; $i++) {
            $blen = $blen*10 + 9;
        }
        $str .= str_pad(rand(0, $blen), $nqty, '0', STR_PAD_LEFT);
    }
    return $str;
}

//获取星期方法
function   get_week($date){
    //强制转换日期格式
    $date_str=date('Y-m-d',strtotime($date));

    //封装成数组
    $arr=explode("-", $date_str);

    //参数赋值
    //年
    $year=$arr[0];

    //月,输出2位整型,不够2位右对齐
    $month=sprintf('%02d',$arr[1]);

    //日,输出2位整型,不够2位右对齐
    $day=sprintf('%02d',$arr[2]);

    //时分秒默认赋值为0;
    $hour = $minute = $second = 0;

    //转换成时间戳
    $strap = mktime($hour,$minute,$second,$month,$day,$year);

    //获取数字型星期几
    $number_wk=date("w",$strap);

    //自定义星期数组
    $weekArr=array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");

    //获取数字对应的星期
    return $weekArr[$number_wk];
}

//获取客户端ip
function getClientIP()
{
    foreach (array(
               'HTTP_CLIENT_IP',
               'HTTP_X_FORWARDED_FOR',
               'HTTP_X_FORWARDED',
               'HTTP_X_CLUSTER_CLIENT_IP',
               'HTTP_FORWARDED_FOR',
               'HTTP_FORWARDED',
               'REMOTE_ADDR') as $key) {
        if (array_key_exists($key, $_SERVER)) {
            foreach (explode(',', $_SERVER[$key]) as $ip) {
                $ip = trim($ip);
                //会过滤掉保留地址和私有地址段的IP,例如 127.0.0.1会被过滤
                //也可以修改成正则验证IP
                if ((bool) filter_var($ip, FILTER_VALIDATE_IP,
                  FILTER_FLAG_IPV4 |
                  FILTER_FLAG_NO_PRIV_RANGE |
                  FILTER_FLAG_NO_RES_RANGE)) {
                    return $ip;
                }
            }
        }
    }
    return '';
}

//获取ip归属地-by 太平洋网络
function get_ip_city($ip){
    $ch = curl_init();
    $url = 'https://whois.pconline.com.cn/ipJson.jsp?ip=' . $ip;
    //用curl发送接收数据
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    //请求为https
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $location = curl_exec($ch);
    curl_close($ch);
    //转码
    $location = mb_convert_encoding($location, 'utf-8', 'GB2312');
    //var_dump($location);
    //截取{}中的字符串
    $location = substr($location, strlen('({') + strpos($location, '({'), (strlen($location) - strpos($location, '})')) * (-1));
    //将截取的字符串$location中的‘,’替换成‘&’   将字符串中的‘:‘替换成‘=’
    $location = str_replace('"', "", str_replace(":", "=", str_replace(",", "&", $location)));
    //php内置函数,将处理成类似于url参数的格式的字符串  转换成数组
    parse_str($location, $ip_location);
    return $ip_location['addr'];
}
//获取浏览器类型
function getBrower(){
    $info='';
    if (!empty($_SERVER['HTTP_USER_AGENT'])) {
        $agent = $_SERVER['HTTP_USER_AGENT'];

        if (preg_match('/Windows/i', $agent)) {
            $partern='/Windows(.*?);/i';
            $arr=[];
            preg_match($partern,$agent,$arr);
            if ($arr) {
                switch ($arr[0]) {
                    case 'Windows NT 5.0;':
                        $info .= 'Winows 2000系统 ';
                        break;
                    case 'Windows NT 5.1;':
                        $info .= 'Winows XP系统 ';
                        break;
                    case 'Windows NT 6.0;':
                        $info .= 'Winows Vista系统 ';
                        break;
                    case 'Windows NT 6.1;':
                        $info .= 'Winows 7系统 ';
                        break;
                    case 'Windows NT 6.2;':
                        $info .= 'Winows 8系统 ';
                        break;
                    case 'Windows NT 6.3;':
                        $info .= 'Winows 8.1系统 ';
                        break;
                    case 'Windows NT 10.0;':
                        $info .= 'Winows 10系统 ';
                        break;
                }
            }
        }
        if (preg_match('/Linux/i', $agent)) $info.='Linux系统 ';
        if (preg_match('/Macintosh/i', $agent)) $info.='macOS系统 ';

        if (preg_match('/MSIE/i', $agent)) {
            $info .= ' MSIE浏览器';
        } else if (preg_match('/QQ/i', $agent)) {
            $info .= ' QQ浏览器';
        } else if (preg_match('/Edge/i', $agent)) {
            $info .= ' Edge浏览器';
        } else if (preg_match('/Firefox/i', $agent)) {
            $info .= ' Firefox浏览器';
        } else if (preg_match('/Chrome/i', $agent)) {
            $info .= ' Chrome浏览器';
        } else if (preg_match('/Safari/i', $agent)) {
            $info .= ' Safari浏览器';
        } else if (preg_match('/Opera/i', $agent)) {
            $info .= ' Opera浏览器';
        }else if(preg_match('/like Gecko/i',$agent)){
            $info .= ' 360浏览器';
        }
    }
    if(!$info) $info=$_SERVER['HTTP_USER_AGENT'];
    return $info;
}

/**
 * user:Plum
 * desc: 校验设备:1pc,2mobile
 */
function checkDevice(){
    // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
    if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) {
        return 2;
    }

    // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
    if (isset ($_SERVER['HTTP_VIA'])) {
        // 找不到为flase,否则为true
        return stristr($_SERVER['HTTP_VIA'], "wap") ? 2 : 1;
    }
    // 判断手机发送的客户端标志,兼容性有待提高
    if (isset ($_SERVER['HTTP_USER_AGENT'])) {
        $clientkeywords = array (
            'nokia',
            'sony',
            'ericsson',
            'mot',
            'samsung',
            'htc',
            'sgh',
            'lg',
            'sharp',
            'sie-',
            'philips',
            'panasonic',
            'alcatel',
            'lenovo',
            'iphone',
            'ipod',
            'blackberry',
            'meizu',
            'android',
            'netfront',
            'symbian',
            'ucweb',
            'windowsce',
            'palm',
            'operamini',
            'operamobi',
            'openwave',
            'nexusone',
            'cldc',
            'midp',
            'wap',
            'mobile'
        );
        // 从HTTP_USER_AGENT中查找手机浏览器的关键字
        if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
            return 2;
        }
    }

    // 协议法,因为有可能不准确,放到最后判断
    if (isset ($_SERVER['HTTP_ACCEPT'])){
        // 如果只支持wml并且不支持html那一定是移动设备
        // 如果支持wml和html但是wml在html之前则是移动设备
        if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))){
            return 2;
        }
    }
    return 1;
}

/**
 * user: Plum
 * desc: 图片转base64
 * @param $img_file
 * @return string
 */
function imgToBase64($img_file) {
    $img_base64 = '';
    if (file_exists($img_file)) {
        $app_img_file = $img_file; // 图片路径
        $img_info = getimagesize($app_img_file); // 取得图片的大小,类型等
        $fp = fopen($app_img_file, "r");
        if ($fp) {
            $filesize = filesize($app_img_file);
            $content = fread($fp, $filesize);
            $file_content = chunk_split(base64_encode($content)); // base64编码
            switch ($img_info[2]) {           //判读图片类型
                case 1: $img_type = "gif";
                    break;
                case 2: $img_type = "jpg";
                    break;
                case 3: $img_type = "png";
                    break;
            }

            $img_base64 = 'data:image/' . $img_type . ';base64,' . $file_content;//合成图片的base64编码
        }
        fclose($fp);
    }
    return $img_base64; //返回图片的base64
}

//写入修改日记
function setAction($str,$path='',$fileName='action'){
    $path= app()->getRootPath() . '/public/action/' . date('Ymd').'/'.$path;
    if(!is_dir($path)) mkdir($path,0755,true);
    $file=$path.'/'.$fileName.'.txt';
    $str=date('Y-d-d H:i:s')."\r\n------------------------".$str."\r\n";
    @file_put_contents($file,$str,FILE_APPEND);
}

//写入日志
//str:写入的内容;fileName:写入的文件,默认日期;pathName:写入的目录,默认/publi/log
function setLog($str,$fileName='log',$pathName='log')
{
    $path = app()->getRootPath() . '/public/' . $pathName . '/' . date('Ymd');
    if(!is_dir($path)) mkdir($path,0775,true);
    $file=$path.'/'.$fileName.'.txt';
    $str=date('Y-m-d H:i:s')."\r\n------------------------".$str."\r\n";
    @file_put_contents($file,$str,FILE_APPEND);
}

//写入调试日志
function setTrace($trace,$fname='trace_exception',$pathName='exception'){
    $path = app()->getRootPath() . '/public/'.$pathName.'/' . date('Ymd');
    if(!is_dir($path)) mkdir($path,0775,true);
    $file=$path.'/'.$fname.'.txt';


    @file_put_contents($file,date('Y-m-d H:i:s').' '.$fname.':start---------------------------------------'."\r\n",FILE_APPEND);
    foreach($trace as $t){
        @file_put_contents($file,json_encode($t)."\r\n",FILE_APPEND);
    }
    @file_put_contents($file,date('Y-m-d H:i:s').' '.$fname.':end---------------------------------------'."\r\n",FILE_APPEND);
}

//写入xml
function setXml($str,$path='',$fileName=''){
    if(!$path) $path=date('Ymd');
    $path=app()->getRootPath() . '/public/xml/'.$path.'/';
    if(!is_dir($path)) mkdir($path,0775,true);
    if(!$fileName) $fileName=date('Ymd');
    $file=$path.'/'.$fileName.'.xml';
    @file_put_contents($file, $str);
}

//获取13位时间戳
function msectime() {
    list($msec, $sec) = explode(' ', microtime());
    return (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
}

//参数进行urlencode+utf-8转码
function  utf8Encode($str){
    $cur_encoding=mb_detect_encoding($str);
    if($cur_encoding!='UTF-8'){
        $str=iconv($cur_encoding, "UTF-8",$str);
    }
    $str=urlencode($str);

    return $str;
}

//数组拼接url
function arr_build_url($formdata) {
    $rlt = '';
    foreach ($formdata as $k => $v) {
        if (is_array($v)) {
            $rlt .= arr_build_url($v);
        } else {
            $rlt .= urlencode($k) . '=' . $v . '&';
        }
    }
    trim($rlt,'&');
    return $rlt;
}

//类型转换,1-供应商结算方式,2-供应商类型,3-使用状态,4-订单状态
function getSpayAttr($value,$type=1){
    switch($type){
        case 1:
            $arr=[1=>'现金',2=>'月结'];
            break;
        case 2:
            $arr=[1=>'商品',2=>'一件代发'];
            break;
        case 3:
            $arr=[0=>'未使用',1=>'已使用'];
            break;
        case 4:
            $arr=['草稿本','未处理','处理中','外发','异常','发货','完成','售后','暂存','取消'];
            break;
        default:
            $arr=['不可用','未处理','处理中','已处理','处理失败','跳过处理'];
            break;
    }
    return $arr[$value];
}

/**
 * @param $arr
 * @param $key_name
 * @return array
 * 将数据库中查出的列表以指定的 id 作为数组的键名
 */
function convert_arr_key($arr, $key_name)
{
    $arr2 = array();
    foreach($arr as $key => $val){
        $arr2[$val[$key_name]] = $val;
    }
    return $arr2;
}

//字符串转数字
function strtonum($str){
    $arr=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
    $num=0;

    $count=strlen($str);
    for($i=0;$i<$count;$i++){
        $s=$str[$i];
        echo $s.'--';
        if(is_int($s)){
            $num+=$s;
            echo $s.'--';
        }
        if(is_string($s) && in_array($s,$arr)){
            $n=array_search($s,$arr)+1;
            echo $n.'--';
            $num+=$n*10;
        }
        echo '<br />';
    }
    return $num;
}

//获取上月日期:
function getlastMonthDays($date){
    $timestamp=strtotime($date);
    $firstday=date('Y-m-01',strtotime(date('Y',$timestamp).'-'.(date('m',$timestamp)-1).'-01'));
    $lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
    return array($firstday,$lastday);
}

//根据日期,获取下一个月
function getNextMonthDays($date){
    $timestamp=strtotime($date);
    $arr=getdate($timestamp);
    if($arr['mon'] == 12){
        $year=$arr['year'] +1;
        $month=$arr['mon'] -11;
        $firstday=$year.'-0'.$month.'-01';
        $lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
    }else{
        $firstday=date('Y-m-01',strtotime(date('Y',$timestamp).'-'.(date('m',$timestamp)+1).'-01'));
        $lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
    }
    return array($firstday,$lastday);
}

//空间文件排序
function cmp_func($a, $b) {
    global $order;
    if ($a['is_dir'] && !$b['is_dir']) {
        return -1;
    } else if (!$a['is_dir'] && $b['is_dir']) {
        return 1;
    } else {
        if ($order == 'size') {
            if ($a['filesize'] > $b['filesize']) {
                return 1;
            } else if ($a['filesize'] < $b['filesize']) {
                return -1;
            } else {
                return 0;
            }
        } else if ($order == 'type') {
            return strcmp($a['filetype'], $b['filetype']);
        } else {
            return strcmp($a['filename'], $b['filename']);
        }
    }
}

//获取两个日期的相差的时间
//type:1,天数,2-小时,3-分钟
function diffBetweenTwoDays ($day1, $day2,$type=1){
    $second1 = strtotime($day1);
    $second2 = strtotime($day2);

    if ($second1 < $second2) {
        $tmp = $second2;
        $second2 = $second1;
        $second1 = $tmp;
    }

    $divisor=86400;
    if($type==2) $divisor=1440;
    if($type==3) $divisor=60;
    return ($second1 - $second2) / $divisor;
}

//生成一个uuid
function guid(){
    if (function_exists('com_create_guid')){
        return trim(com_create_guid(), '{}');
    }else{
        mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
        $charid = md5(uniqid(rand(), true));
        $hyphen = chr(45);
        $uuid = substr($charid, 0, 8).$hyphen
          .substr($charid, 8, 4).$hyphen
          .substr($charid,12, 4).$hyphen
          .substr($charid,16, 4).$hyphen
          .substr($charid,20,12);
        return $uuid;
    }
}

//cams加密
function camsSign($data){
    $key='NSCeixDrDxzKiRIDjbtbkNl60MzD7KvC';

    $str='';
    if($data) $str=json_encode($data,JSON_UNESCAPED_UNICODE);
    $time=time();
    $sign=md5($key.$str.$time.$key);

    return ['MockAuth'=>$sign,'TimeSpan'=>$time,'str'=>$str];
}

//获取地址
function getAddress($parentId = 0){
    $where=[];
    $where[]=['parentId','=',$parentId];
    $where[]=['status','=',1];
    $address = app\index\model\Address::where($where)->cache('address_'.$parentId,'10')->select();
    if (count($address)==0) $address = [];

    return $address;
}
//图片转base64
function base64EncodeImage ($image_file,$type=0) {
    $image_info = getimagesize($image_file);
    $image_data = fread(fopen($image_file, 'r'), filesize($image_file));
    $base64_image =  base64_encode($image_data);

    if($type=1) return 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data));
    return $base64_image;
}

//校验字段值是否已存在
    public static function checkValue($userId,$field,$value){
        $check = UserInfo::alias('a')
            ->leftJoin('user b','a.userId=b.id')
            ->where([
                ['b.status','=',1],
                ['a.'.$field,'=',$value]
            ])
            ->order('a.id desc')
            ->find();
        $result = !empty($check) && ($check['userId'] != $userId) ? 1 : 0;
        if(in_array($field,['mobile','email','qq'])){
            $check = User::where($field,$value)->order('id desc')->find();
            $result = (!empty($check) && ($check['id'] != $userId)&& $check['status'] == 1) ?1 :0;
        }

        return $result;
    }

    //手机号校验
    public static function checkMobile($phone){
        if(strlen($phone) == 11){
            if(!preg_match("/^1[3456789]\d{9}$/",$phone)){
                throw new  Exception('请填写正确的手机号码');
            }
        }else{
            throw new  Exception('手机号码为11位数字!请正确填写!');
        }
    }

    //邮箱格式校验
    public static function checkEmail($email){
        if(filter_var(strtolower($email),FILTER_VALIDATE_EMAIL)){
            return true;
        }else{
            return false;
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

thinphp6-封装一堆类 的相关文章

  • 展平数组:保持索引、值等于数组中的位置

    我在尝试以特定方式展平数组时遇到了一些麻烦 这里有一个print r我想要展平的数组的视图 Array 1 gt Array 8 gt 1 9 gt 2 10 gt Array 15 gt Array 22 gt 1
  • 在多维数组 PHP 的所有键中搜索

    我想在多维数组中的所有键中搜索特定字符串 我只需要弄清楚它是否存在 仅此而已 我想知道访问者的 IP 是否存在于任何数组中 有没有我可以用来执行此操作的 php 函数或方法 我尝试过的每个函数或方法总是返回 false 数组中 数组搜索 数
  • 是否可以在 UML 中可视化一堆函数

    我正在改进一个使用类和函数文件 只是包含各种函数的 php 文件 的内容管理系统 例如 我有一堂课叫Admin以及一个功能文件 其功能包括显示管理员概述 创建新管理员 编辑现有管理员 删除管理员 函数文件使用类并执行 mvc 概念的可视化部
  • Facebook“赞”按钮回调帮助

    我正在使用此代码进行类似 facebook 的回调 问题是 如果我调用 php 脚本 例如 有人可以看到我的 javascript 并运行此页面 甚至可以向其发送垃圾邮件或在没有先点赞的情况下使用它 我的想法是 我想为每个喜欢该页面的用户提
  • 用 PHP 截断文件末尾

    我有一个日志文件 我想在 PHP 读取该文件后将其截断 我的代码目前如下所示 fp fopen file r ftruncate fp 125000 fclose fp 但是 这会通过保留first1MB 不过 我想保留last1Mb 的文
  • 在 CodeIgniter 中添加新页面

    对于我对 CodeIgniter 和 MVC 系统的无知 我提前表示歉意 我正在帮助一位家庭成员处理他们的商业网站 到目前为止 我已经能够仅通过逻辑来完成大部分所需的更改 但现在我已经走进了死胡同 我不打算继续支持他们 因为我显然不是 Co
  • 转义用户数据,无需魔法引号

    我正在研究如何在来自外部世界的数据被用于应用程序控制 存储 逻辑等之前正确地对其进行转义 显然 随着 magic quote 指令在 php 5 3 0 中很快被弃用 并在 php6 中被删除 对于任何想要升级并进入新语言功能 同时维护遗留
  • PHP 电子邮件验证[重复]

    这个问题在这里已经有答案了 For PHP最好的电子邮件验证方法是什么preg NOT ereg因为它是已弃用 删除 I don t需要检查该网站是否存在 这不像最高安全性 我找到了很多方法ereg但它们 显然 不是好的做法 我建议你使用F
  • php隐藏所有错误[重复]

    这个问题在这里已经有答案了 隐藏的最佳做法是什么allPHP 错误 因为我不想向用户显示错误 我尝试过使用 htacess通过输入代码php flag display errors off在那里 但它返回给我一个500 error 还有其他
  • 写入 xml 文件时允许的内存大小已耗尽(尝试分配 4459414 字节)[重复] 67108864 字节

    这个问题在这里已经有答案了 可能的重复 php 中允许的内存大小已耗尽 尝试分配 43148176 字节 33554432 字节 https stackoverflow com questions 415801 allowed memory
  • Zend RegEx Validator 的自定义有意义的错误消息

    我正在验证表单中的文本字段 如下所示 name new Zend Form Element Text name name gt setLabel First Name gt setRequired true gt addFilter new
  • 错误 #520009 - 帐户受到限制

    我收到 520009 错误 帐户 电子邮件受保护 cdn cgi l email protection被限制 当尝试进行并行付款时 我的代码使用沙箱运行良好 但我切换到实时端点 它开始失败 有问题的帐户是有效的 PayPal 帐户 我使用的
  • 将 Cloudinary 与 spatie/media-library Laravel 包一起使用

    有人使用 Laravel 包 spatie media library 和 Cloudinary 吗 我认为用 Flysystem 来实现它是微不足道的 我实际上使用 Cloudinary 作为带有 silvanite nova field
  • 细胞的 fpdf 对齐

    我正在尝试使用生成 PDFfpdf我有一个小问题 我需要有 2 个单元格 如下所示 Address Line 1 Version Address Line 2 1 0 City 06 05 2011 我尝试过使用MultiCell 但没有运
  • Lumen:无法打开流:.../vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:107 中的权限被拒绝

    My OS is ubuntu 16 04 and I am running Lumen 5 5 When I try to run the app in the browser I get an error 500 我在 var log
  • 自定义 WordPress 画廊 html 布局

    当使用默认媒体上传器在 WordPress 中创建图像库时 WordPress 将图像包装在一堆 HTML 标记中 如何在生成之前覆盖它 以便我可以输出所需的标记并更改创建图库布局的方式 目前 WordPress 生成的代码如下 div d
  • Laravel,控制器中的 Auth::user()

    Laravel 框架 为什么我无法在 laravel 项目的控制器中使用 Auth user 查看用户是否已登录 Session 是否未连接到控制器 HomeController php public function isauthoriz
  • PHP-如何根据条件配对数组中的项目

    如何将数组中的项目配对 假设我有一个数组Fighters 我想根据他们的情况将他们配对Weights 体重最接近的拳手应作为配对最佳匹配 但如果他们是在同一个团队中 他们不应该配对 团队 1 战斗机A体重为60 战斗机B体重为65 2队 战
  • PHP date() 和 strtotime() 返回错误的月份 31 日

    我在用着date and strtotime 函数在下拉列表中显示接下来的 3 个月 PHP代码 echo date m Y strtotime 0 months echo date m Y strtotime 1 months echo
  • Google Drive 服务帐户上传的位置

    我正在尝试使用服务帐户将文件上传到我的 Google 云端硬盘 当我部署此代码时 我不希望用户给予授权 我希望他们上传到我的帐户 我通过 PHP 使用它 下面是我到目前为止的情况 这段代码是基于官方文档给出的例子 当我运行 php 脚本时

随机推荐

  • gin 三.请求数据的映射

    数据解析绑定 基础解释 ShouldBindWith 请求数据映射示例 ShouldBindHeader 将请求头绑定到一个结构体或接口示例 MustBindWith 方式 基础解释 解释 例如后端获取调用方参数 通常会使用一个结构体 或一
  • 深度学习高遥感影像语义分割

    深度学习遥感影像语义分割 深度学习大家都知道 在计算机视觉领域取得了很大的成功 在遥感影像自动解译方面 同样带来了快速的发展 我在遥感影像自动解译领域 也做了一些微薄的工作 发表几篇论文 我一直关注遥感影像自动解译领域 在北京出差的这段时间
  • python--类与类之间的关系

    类和类之间的关系 在我们的世界中事物和事物之间总会有一些联系 在面向对象中 类和类之间也可以产生相关的关系 1 依赖关系 执行某个动作的时候 需要xxx来帮助你完成这个操作 此时的关系是最轻的 随时可以更换另外一个东西来完成此操作 clas
  • shell脚本:循环结束语句二

    shell脚本 循环结束语句二 二 循环结束语句 1 break 跳出循环 2 continue 3 while 4 until 条件不成立时 跳出循环 5 总结 三 操作演练 二 循环结束语句 1 break 跳出循环 1 作用 控制循环
  • 旧版OpenGL 与 新版OpenGL

    分割线 OpenGL3 0 3 0之前 所有OpenGL版本都与早期版本完全向后兼容 针对OpenGL 1 1编写的代码可以在OpenGL 2 1实现中很好地执行 3 0 引入了废弃functionality的想法 许多OpenGL函数被声
  • android高级UI之PathMeasure<一>--Path测量基础(nextContour、getPosTan、getMatrix、getSegment)

    前言 在上一次android高级UI之贝塞尔曲线 lt 下 gt 贝塞尔曲线运用 QQ消息气泡完成了对于贝塞尔曲线绘制的学习 今天准备学习UI绘制中经常会用到的跟Path相关的一些知识 也是很重要 但是你不去专门花时间去研究的话其实理解起来
  • Docker从入门到干事,看这一篇就够了,mysql索引优化面试题

    docker与虚拟机的对比 物理机 别墅 虚拟机 楼房 docker 酒店式公寓 docker三大概念 库 一个总的仓库 包含所有的镜像 使用时可以从库拉取镜像到本地 镜像 从库中拉取下来的应用 比如mysql 容器 镜像运行之后就是容器
  • transformer论文学习:Attention Is All You Need

    transformer论文学习 Attention Is All You Need 文章目录 transformer论文学习 Attention Is All You Need 整体结构速览 一 网络结构 二 注意力机制 参考资源 1 原论
  • P4学习——p4runtime

    文章目录 步骤一 运行不完整代码 步骤二 开始实现隧道转发 步骤三 运行解决方案 参考 https blog csdn net qq 33681684 article details 123646883 在这个练习中 我们将使用P4Runt
  • 实战篇-OpenSSL之AES加密算法-ECB模式

    本文属于 OpenSSL加密算法库使用系列教程 之一 欢迎查看其它文章 实战篇 OpenSSL之AES加密算法 ECB模式 一 AES简介 二 ECB模式 1 命令行操作 2 函数说明 3 编程实现 1 PKCS7填充方式 2 实现ECB模
  • 语音识别入门 --各个模型的整理

    语音识别入门 前期知识储备 结构图 语音特征提取 各个模型的尝试 ASRT DeepSpeechRecognition end2end chinese speech recognition Wenet whisper 语音纠错 TTS 文本
  • QT学习笔记6--信号之间的连接

    连接 仍然使用connect函数 但是和函数重载类似 需要用到函数指针 如下所示 void teacher teachersignals void teacher hungery void student studentslots void
  • 云计算的定义和特点

    在中国大数据专家委员会成立大会上 委员会主任怀进鹏院士用一个公式描述了大数据与云计算的关系 G f x x是大数据 f是云计算 G是我们的目标 也就是说 云计算是处理大数据的手段 大数据与云计算是一杖硬币的正反面 大数据是需求 云计算是手段
  • 去除图片中仅为背景(全0,全255)的图片

    在对遥感影像进行裁剪时 很多背景也会被裁剪出来作为一个图像 而背景值过多会影响网络性能 该代码主要去除全0图片 全255图片 仅含0和255的图片 import os import cv2 import numpy as np import
  • C++中STL用法超详细总结

    目录 1 什么是STL 2 STL内容介绍 2 1 容器 2 2 STL迭代器 2 3 算法 2 4 仿函数 2 4 1 概述 2 4 2 仿函数 functor 在编程语言中的应用 2 4 3 仿函数在STL中的定义 2 5 容器适配器
  • OpenCV自适应直方图均衡CLAHE的clipLimit的含义及理解

    一 引言 关于自适应直方图均衡CLAHE的clipLimit的介绍 网上介绍的资料不多 可能对很多大佬来说 这个知识点很简单 但对于没这方面基础知识的 则不好理解 老猿今天结合OpenCV CLAHE源代码中对于clipLimit的赋值处理
  • 有哪些适合初学者的编程语言?

    C语言 那为什么我还要教你C语言呢 因为我想要让你成为一个更好 更强大的程序员 如果你要变得更好 C语言是一个极佳的选择 其原因有二 首先 C语言缺乏任何现代的安全功能 这意味着你必须更为警惕 时刻了解真正发生的事情 如果你能写出安全 健壮
  • LocalDateTime转换为时间戳(秒)

    LocalDateTime转换为时间戳 秒 不要用ZoneOffset of 8 如果你的系统默认时区不是 8就错了 localDateTime atZone ZoneId systemDefault toEpochSecond 可以看看这
  • python利器怎么编程-OpenCV-Python,计算机视觉开发利器

    人工智能 一个已经被谈论了几十年的概念 最早是 图灵 在 1950年 提出 如今这几年 相关技术的发展速度是越来越快 高大上如无人驾驶 智能安防 AI辅助诊断 接地气如刷脸支付 内容推荐 自动翻译等 众多领域借助人工智能的力量而进化 从百度
  • thinphp6-封装一堆类

    获取文件来源路径