分类: 未分类

  • thinkphp3.2在php7下运行,出现错误”系统不支持:mysql”

    n

    php7运行thinkphp3.2,报错,出现”系统不支持:mysql”
    原因是thinkphp里面的数据库链接配置里面,php7里面,已经不能用mysql_connect,只能把mysql改为mysqli
    这样就可以了

    n
  • 正则表达式校验密码问题(要求大小写字母数字特殊符号四选三)

    n

    ^(?![a-zA-Z]+)(?![A-Z0-9]+)(?![A-ZW_]+)(?![a-z0-9]+)(?![a-zW_]+)(?![0-9\W_]+)[a-zA-Z0-9W_]{8,}$

    n
  • PHP实现大数字格式化成K/M/B结尾的简短形式

    n
    /**n * 转换数字为简短形式n * @param n int 要转换的数字n * @paramprecision int 精度n */nfunction shortenNumber(n,precision = 1)n{n    if (n<1e+3) {nout = number_format(n);n    } else if (n < 1e+6) {n        out = number_format(n / 1e+3, precision) . 'k';n    } else if (n < 1e+9) {n        out = number_format(n / 1e+6, precision) . 'm';n    } else if (n < 1e+12) {n        out = number_format(n / 1e+9, precision) . 'b';n    }nreturnout;n}
    n
  • 和「下一步」说再见!微软发布 Windows 软件包管理器 winget,应用安装仅需一行命令!

    n

    北京时间 5 月 20 日,在 Build 2020 全球开发者大会上,微软发布全新 Windows Package Manager(winget)——Windows 软件包管理器。
    例如,您可以启动 Windows Package Manager 并运行新的“ winget”命令,以获取要安装的任何应用程序的最新版本。
    您只需运行

    nnnn
    winget install PowerToysn
    nnnn

    即可安装它,而无需访问Github,第三方网站或Microsoft Store。
    Windows软件包管理器当前支持以下命令:

    nnnn
    install - 安装指定的应用程序nshow -  显示关于应用的信息nsource - 管理应用源nsearch - 查找并显示应用的基本信息n
    nnnn

    这是一个开源项目,微软欢迎全球开发者社区参与!
    下载地址:GitHub | Windows Package Manager
    文档支持:Microsoft Docs | Windows Package Manager

    nnnn
    n

    系统要求:Windows 10 版本 1709 或更高版本

    n
    n
  • PHP指定时间戳 日期加一天,一年,一周,一月

    n
    <?phpnecho date('Y-m-d H:i:s',strtotime('now'));//当前时间戳 2017-01-09 21:04:11necho date('Y-m-d H:i:s',strtotime('+1second'));//当前时间戳+1秒 2017-01-09 21:04:12necho date('Y-m-d H:i:s',strtotime('+1minute'));//当前时间戳+1分 2017-01-09 21:05:11necho date('Y-m-d H:i:s',strtotime('+1hour'));//当前时间戳+1小时 2017-01-09 22:04:11necho date('Y-m-d H:i:s',strtotime('+1day'));//当前时间戳+1天 2017-01-10 21:04:11necho date('Y-m-d H:i:s',strtotime('+1week'));//当前时间戳+1周 2017-01-16 21:04:11necho date('Y-m-d H:i:s',strtotime('+1month'));//当前时间戳+1月 2017-02-09 21:04:11necho date('Y-m-d H:i:s',strtotime('+1year'));//当前时间戳+1年 2018-01-09 21:04:11necho date('Y-m-d H:i:s',strtotime('+12year 12month 12day 12hour 12minute 12second'));//当前时间戳+12年,12月,12天,12小时,12分,12秒 2030-01-22 09:16:23nt=1483967416;//指定时间戳nechodt=date('Y-m-d H:i:s',t);//2017-01-09 21:10:16n/*方法一*/necho date('Y-m-d H:i:s',t+1*24*60*60);//指定时间戳+1天 2017-01-10 21:10:16necho date('Y-m-d H:i:s',t+365*24*60*60);//指定时间戳+1年 2018-01-09 21:10:16n/*方法二*/n//dt是指定时间戳格式化后的日期necho date('Y-m-d H:i:s',strtotime("dt+1day"));//指定时间戳+1天 2017-01-10 21:10:16necho date('Y-m-d H:i:s',strtotime("dt+1year"));//指定时间戳+1年 2018-01-09 21:10:16n/*方法三*/n//t是指定时间戳necho date('Y-m-d H:i:s',strtotime("+1day",t));//指定时间戳+1天 2017-01-10 21:10:16necho date('Y-m-d H:i:s',strtotime("+1year",$t));//指定时间戳+1年 2018-01-09 21:10:16n//指定时间戳加1月、1周、1小时、1分、1秒原理同上;
    n
  • sql 根据经纬度查找附近数据

    n
    SELECTn    ROUND(n        6378.138 * 2 * ASIN(n            SQRT(n            POW( SIN(( 23.065502 * PI()/ 180-dt_lat * PI()/ 180 )/ 2 ), 2 )+ COS( 23.065502 * PI()/ 180 )* COS( dt_lat * PI()/ 180 )* POW( SIN(( 113.803962 * PI()/ 180- dt_lng * PI()/ 180 )/ 2 ), 2 )))* 1000 n    ) AS distance,n    a.id,n    a.title,n    a.price,n    a.unit,n    a.dt_lat,n    a.dt_lng nFROMn    `cms_house` AS a nHAVINGn    distance <= 1500 nORDER BYn    distance ASCnn
    nnnn

    dt_latdt_lng 为表中 经纬度字段

    n
  • 微信云开发——基础读写

    n
    // 使用 Web 端 SDKnconst cloudbase = require('tcb-js-sdk')nconst app = cloudbase.init({ /* 初始化... */ })nnconst db = app.database()nn// 插入文档nawait db.collection('messages').add({n    author: 'stark',n    message: 'Hello World!'n})nn// 查询文档nconst data = await db.collection('messages').where({n    author: 'stark'n}).get()nn// 更新文档nawait db.collection('messages').where({n    author: 'stark'n}).update({n    message: 'Hi, Cloudbase!'n})nn// 删除文档nawait db.collection('messages').where({n    author: 'stark'n}).remove()
    n
  • 上班所闻20200414

    n

    上班路上
    途径横行马路
    群人急着过去
    1路公车迎面冲来
    大概也是想跑快点,车上的人也急着上班
    没想到
    压着实线从第一车道,跨到了第二车道
    终于停下来了
    “那么急的?怎么开车的吖”
    有人吐槽
    大部分人都匆匆过去
    哔~哔~哔~
    “哎呀,吵死啦,这不已经在走了吗,车品真差”
    被司机喇叭吓到的,说了几句
    我跟着人群,也过去了
    司机,
    还是按着喇叭
    注视着第三车道驶来的汽车
    手里握着的方向盘
    蠢蠢欲动,欲把第三车道也堵上
    四月到
    疫情稳
    气温虽凉
    人心常暖

    n
  • php 判断空对象

    n

    场景描述:

    nnnn

    今天有个需求,前端需要post一个二维数据到后端:

    nnnn
    var pageContent =('#admui-pageContent');n        ('#btn-y').click(function () {n('.city-selecter').html('');n            var pc_cat = ('.pc-cat').html();n            var app_cat =('.app-cat').html();n            var title = ('input[name="title"]').val();n            var sites = [],html='';n('input[name="city[]"]:checked').each(function(){n                sites.push((this).val());n                html += '<div class="form-group row city-config" data-city="'+(this).val()+'">';n                html += '<label class="col-sm-2 control-label">'+(this).val()+'</label>';n                html += '<div class="col-sm-4">';n                html += '<input type="text" class="form-control " placeholder="请输入标题" name="title" value="'+title+'">';n                html += '</div>';n                html += '<div class="col-sm-2">';n                html += pc_cat;n                html += '</div>';n                html += '<div class="col-sm-2">';n                html += app_cat;n                html += '</div>';n                html += '<div class="col-sm-2">';n                html += '<a class="btn btn-default del" data-cid="'+(this).val()+'">删除</a>';n                html += '</div>';n                html += '</div>';n                // html += '<input type="hidden" name="share['+(this).val()+']" value="'+(this).val()+'">';n            });n            console.log(sites);n            ('.city-selecter').append(html);n        });nnpageContent.on('submit', '.page-content form', function (e) { n            var data = {};n            var i = 0;n            ('.city-config').each(function(){n                data[i] = {};n                data[i]['city'] =(this).attr('data-city');n                data[i]['title'] = (this).find('input[name="title"]').val();n                data[i]['app_catid'] =(this).find('select[name="app_catid"]').val();n                data[i]['pc_catid'] = (this).find('select[name="pc_catid"]').val();n                i ++;n            })n            data = JSON.stringify(data);n('input[name="site_config"]').val(data);n            $.pjax.submit(e,'#admui-pageContent', { replace: true });n        });nn
    nnnn

    我把二维数组转为对象序列化再传了.到了服务端,需要判断一下那个值是不是空吧,因为穿空的就无效了.所以得判断一下.
    开始我是这样想的

    nnnn
     if (request()->isPost()) {n        data = input('post.');nsite_config = json_decode(data['site_config']);n        if(empty(site_config)) $this->error('参数错误');n        ....
    nnnn

    后来发现,文档中empty()返回值描述没有对象相关的返回,好吧~那应该是对对象不起作用了,好像也没有空对象说法吧,自己挖坑不?!用isset更加不可能了

    nnnn
        当var存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE.n    以下的东西被认为是空的:n    "" (空字符串)n    0 (作为整数的0)n    0.0 (作为浮点数的0)n    "0" (作为字符串的0)n    NULLn    FALSEn    array() (一个空数组)n    $var; (一个声明了,但是没有值的变量)
    nnnn

    灵机一动,想到了这个get_object_vars — 获取给定对象的属性

    nnnn
      if (request()->isPost()) {n        data = input('post.');nsite_config = json_decode(data['site_config']);n        if(empty(get_object_vars(site_config))) $this->error('参数错误');
    nnnn

    用get_object_vars来获取对象属性,在判断就好了~

    n
  • ubuntu 新装mysql之后无法登录

    n

    ubuntu(linux)新装mysql之后无法登录
    错误代码:mysql:error 1045(28000):Access denied for user 'root'@'localhost'(诸如此类的错误)

    nnnn

    这是因为root帐号没有设置密码;

    nnnn

    这时候,我们可以用root权限来登录:

    nnnn
    sudo mysql -u root -pn
    nnnn

    因为在安装mysql的时候没有设置密码,所以root用户的plugin值会变成auth_socket,而不是默认值mysql_native_password
    所以登录之后需要修改root密码,之后再去更改mysql数据库中user表root用户的plugin值,然后就是刷新一下mysql的用户权限,操作如下:

    nnnn
    set password for 'root'@'locathost' = password('yourpassword');n
    nnnn

    //设置密码

    nnnn
    update mysql.user set plugin = 'mysql_native_password' where user = 'root';n
    nnnn

    //更新plugin值

    nnnn
    flush privileges;n
    nnnn

    //刷新用户权限

    nnnn

    注意:如果直接更改plugin值为mysql_native_password,就可以使root免密码登录

    n