php 序列化闭包

https://packagist.org/packages/opis/closure

发表在 php, 基础, 框架 | 标签为 , , , , , | 留下评论

mongo 简单数据分析

背景:
user_last_access 用户最后访问时间集合
statistics_users:activeUserData(3天内登录),silentUserData(3~7天内登录),lostUsersData(7天以前登录)
目的:
statistics_users 中统计的用户集合 是 user_last_access 的全部数据

#准备测试集合
db.testIds.drop()
db.testIds.insert({"_id":1,ids1:[],ids2:[]})

#设置所有的userId - str1
var ids = db.user_last_access.find({},{_id:0,media_owner_id:1})
ids.forEach( function(i){ db.testIds.update({"_id":1},{$push:{ids1:i.media_owner_id}}) } )

#设置所有统计的userId - str2
var ids = db.statistics_users.aggregate([{"$match":{endTime:'2021-02-23 00:00:00'}},{"$project":{_id:0,union:{$setUnion:["$activeUserData","$silentUserData","$lostUsersData"]}}}])
ids.forEach( function(i){ db.testIds.update({"_id":1},{$set:{"ids2":i.union}}) } )

#查看差集
db.testIds.aggregate([{'$project':{diff:{$setDifference:["$ids1","$ids2"]}}}])


#查看所有未进去的用户
db.user_last_access.find({media_owner_id:{$in:  [] }})
发表在 mongo | 标签为 , | 留下评论

python pandas 导出大数据到excel

import pandas as pd
import pymysql
import zipfile

def getDb():
    try:
        conn = pymysql.connect(
            host='xxx',  # 参数host:连接的mysql主机,如果本机是'localhost'或者127.0.0.1
            port=3306,  # mysql端口3306
            user='xxx',  # mysql用户名
            passwd='xxx!@#',  # mysql密码
            db='xxx',  # 数据库名
            charset='utf8mb4'  # 数据库编码
        )
        return conn

    except Exception as e:
        print(e)
    else:
        print('成功连接数据')



def main():
    conn = getDb()
    cur = conn.cursor()
    #导出数据库
    dbname = "res_account"
    exportFile = dbname + ".zip"
    #获取列名
    cur.execute("desc "+dbname)
    fields = cur.fetchall()
    fs = []
    for f in fields:
        fs.append(f[0])

    limit = 10000

    id = 0;
    with zipfile.ZipFile(exportFile, 'w') as zf:
        while True:
            row_count = cur.execute("select * from "+dbname+" where id > %s limit " + str(limit), id)
            if row_count == 0:
                break;

            results = cur.fetchall()

            filename = r"filename" + str(id) + "-" + str(id + limit) + ".xlsx"

            df = pd.DataFrame(results, columns=fs)

            with zf.open(filename, 'w') as buffer:
                with pd.ExcelWriter(buffer) as writer:
                    df.to_excel(writer, index=None)


            id = results[row_count - 1][0]
            print(id)

if __name__ == '__main__':
    main()
发表在 pandas, Python | 标签为 , | 留下评论

yii2 使用mongodb 扩展,查询结果按数字类型排序

yii2 mongo支持

 /**
  * @var \yii\mongodb\Query $query
  */
 $query->addOptions(['collation' => ['locale' => 'en_US', 'numericOrdering'=>true]]);
发表在 php, yii2 | 标签为 , , , | 留下评论

命令行光标控制

在写命令行脚本的时候,为了监控脚本执行进度,往往需要输出一些数据,来确认脚本是否正在执行。而处理大数据文件时,大量的输出,又不容易看到输出日志,于是需要进行命令行光标控制,使光标固定到特定位置。需要 VT100 控制码定义终端显示。如下:

其中格式分下列两种:
  1.数字形式。
    \033[<数字>m
  2.控制字符形式。
    \033[字母

VT控制码归类有如下:

    \033[0m 关闭所有属性

    \033[1m 设置高亮度

    \033[4m 下划线

    \033[5m 闪烁

    \033[7m 反显

    \033[8m 消隐

    \033[30m —- \033[37m 设置前景色,0-7为 黑 红 绿 黄 蓝 紫 青 白

    \033[40m —- \033[47m 设置背景色,0-7为 黑 红 绿 黄 蓝 紫 青 白

    \033[nA 光标上移n行

    \033[nB 光标下移n行

    \033[nC 光标右移n行

    \033[nD 光标左移n行

    \033[y;xH 设置光标位置

    \033[2J 清屏

    \033[K 清除从光标到行尾的内容

    \033[s 保存光标位置

    \033[u 恢复光标位置

    \033[?25l 隐藏光标

    \033[?25h 显示光标

发表在 Shell | 留下评论

跨域访问设置方式

header('Access-Control-Allow-Origin: *');//允许跨域域名
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, OPTIONS, DELETE');//允许跨域方式
header('Access-Control-Allow-Headers: *');//允许header
header('Access-Control-Expose-Headers: *');//某些header无法传递,须要指明header白名单(content-type 就在此列)
发表在 js, 前端, 设计模式, 运维 | 留下评论

js ISO-8859-1 转中文

fetch 获取的 header 内容如果是中文(多子节),则会转译成 ISO-8859-1 编码格式,需要转编码转换

var str = “ç\u0088±æ\u0088\u0091ä¸\u00ADå\u009B½”;
var utfstring =decodeURI(escape(str))//先编码再解码
//或者 utfstring =decodeURIComponent(escape(str)) 

decodeURIComponent 和 decodeURIComponent 区别具体看这里。encodeURI 自身无法产生能适用于HTTP GET 或 POST 请求的URI,例如对于 XMLHTTPRequests, 因为 “&”, “+”, 和 “=” 不会被编码,然而在 GET 和 POST 请求中它们是特殊字符。然而encodeURIComponent这个方法会对这些字符编码
参考

发表在 js, 前端 | 留下评论

fetch 下载流文件

前后端分离的项目,前端大部分使用fetch调用接口,遇到下载的时候,服务器接口一般直接返回流文件(链接本身就是一个文件)

const getExport = async (url) => {
    let options = _headerOptions('GET')
    let response = await fetch(config.apiHost+url,options)

    response.blob().then((blob) => {
        const a = window.document.createElement('a');
        const downUrl = window.URL.createObjectURL(blob);// 获取 blob 本地文件连接 (blob 为纯二进制对象,不能够直接保存到磁盘上)
        const filename = response.headers.get('Content-Disposition').split('filename=')[1].split('.');
        a.href = downUrl;
        a.download = `${decodeURI(escape(filename[0]))}.${filename[1]}`;
        a.click();
        window.URL.revokeObjectURL(downUrl);
    });

    return [];
}
发表在 js, 前端 | 留下评论

curl命令上传文件

curl 'http://xxxxxx' -F "theFile=/Users/xxxx/Downloads/1.jpg;filename=xxxx"

后台接收到的信息

var_dump($_FILE);
/*
array(1) {
  ["theFile"]=>
  array(6) {
    ["name"]=>
    string(7) "xxxx"
    ["tempName"]=>
    string(14) "/tmp/phpnk5HXI"
    ["tempResource"]=>
    array(0) {
    }
    ["type"]=>
    string(0) ""
    ["size"]=>
    int(36)
    ["error"]=>
    int(0)
  }
}
*/
发表在 Shell | 留下评论

使用 certbot 安装免费的安全证书

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot python-certbot-nginx

certbot certonly --webroot -w /xxx -d www.ivhong.com -d ivhong.com -w /xxxx -d www.ivhui.com -d ivhui.com --agree-tos --email xxxx@163.com
--------------参数解释 :
* certonly  只获取证书
* --webroot  以webroot插件去获得证书
* -w  需配合--webroot参数一起使用,用来指定网站根目录
* -d   指定域名
* --agree-tos  用意ACME用户协议(如果省略此项,则在命令执行过程中会询问是否同意)
* --email 指定邮箱用来接收一些通知(如果省略此项,则在命令执行过程中会要求填写)
* (如果有多个域名,则按照一个 -w  /var/www/example  后接一个 -d example.com  的形式继续输入。)


#使用docker或类似webroot 不在本地的
certbot certonly --standalone -d www.ivhong.com -d ivhong.com  -d xxx -d xxx.com --agree-tos --email hong350@163.com

#自动更新shell,vim refreshssh.sh,写入下面内容

#!/bin/sh
/usr/bin/docker stop ivhong_nginx_1
/usr/bin/certbot renew --force-renew
cp -rf /etc/letsencrypt/live/www.ivhong.com /[docker nginx]/www.ivhong.com
/usr/bin/docker start ivhong_nginx_1

#添加crontab
35 3 * */2 * /root/refeshssh.sh

nginx 配置:

        listen 443 ssl;
        listen 80;
        server_name ivhui.com www.ivhui.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/ivhong/www/ivhui/web;

#    ssl on;//这里如果是on的话,http访问网址将会出错
ssl_certificate /etc/letsencrypt/live/www.ivhong.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.ivhong.com/privkey.pem;
ssl_session_timeout 5m;
 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
 ssl_prefer_server_ciphers on;

来源:https://blog.csdn.net/qq_35751770/article/details/78018613

发表在 运维 | 留下评论