首页
关于
留言
友情链接
推荐
粽子SHOP
Search
1
粽子SHOP即时到账 微信插件(MyWechat)
4,863 阅读
2
PS人像美颜插件 DR5.0增强版 一键人像磨皮/美白/高低频
4,086 阅读
3
彩虹聚合登录API源码/上元二开 QQ互联分发
2,927 阅读
4
Windows Navicat Premium16.3.2 免安装 绿色汉化版
2,779 阅读
5
LayuiTable导出所有数据,无需修改后端代码
2,440 阅读
程序源码
PHP源码
HTML源码
精品程序
易语言源码
活动资讯
技术分享
实用代码
实用工具
学习笔记
PHP笔记
前端笔记
uniapp
Python
逆向
docker
thinkPHP
登录
Search
标签搜索
python
typescript
swoole
docker
thinkphp6
php
composer
composer命令
tp6
tp中间件
vue
node.js
粽子shop
thinkSwoole
timi
王者荣耀
王者荣耀ios扫码
layer
layer图片预览
layer图片
烂掉的ay
累计撰写
93
篇文章
累计收到
947
条评论
首页
栏目
程序源码
PHP源码
HTML源码
精品程序
易语言源码
活动资讯
技术分享
实用代码
实用工具
学习笔记
PHP笔记
前端笔记
uniapp
Python
逆向
docker
thinkPHP
页面
关于
留言
友情链接
推荐
粽子SHOP
搜索到
93
篇与
EN
的结果
2024-01-01
docker 常用命令与使用
容器 操作命令#查看容器列表 docker ps #其他 docker ps -a # 列出当前正在运行的容器+历史运行过的容器 docker ps -l # 列出最近创建的容器 docker ps -n 3 # 显示最近创建的3个容器 docker ps -q # 只显示容器ID # 查看命令帮助 docker run --help #-d 后台运行并返回容器ID #-it 以交互模式运行,并返回一个伪终端 #--name="容器的名称" 为容器指定一个新的名称 #-P 随机端口映射 #-p 指定端口映射 docker run -d -p 6379:6379 redis:6.0.8 docker run -it ubuntu /bin/bash docker run -it 镜像ID /bin/bash # 指定名称 docker run -it --name=myu1 ubuntu /bin/bash # 启动容器 docker start 容器ID或名称 # 停止容器 docker stop 容器ID或名称 # 强制停止容器 docker kill 容器ID或名称 #删除容器 #rm 移除一个或多个容器 docker rm -f 容器ID docker rm -f 容器ID,容器ID,容器ID docker rm -f $(docker ps -a -q) # restart 重启运行的容器 # rm -f 强制移除一个或多个容器 # tag 给源中镜像打标签 # version 查看docker版本号 exit # 停止容器、退出容器交互 #按住 ctrl+p+q #退出,不停止容器 # commit 提交容器副本使之成为一个新的镜像 # docker commit -m="这是一个新的" -a="作者" 容器ID 包/镜像名:版本号 docker commit -m="这是一个新的" -a="作者" abc en/ubuntu:1.3 镜像 操作命令#查看镜像列表 docker image ls docker images # 查看 镜像/容器/数据卷 占用的空间 docker system df # 搜索镜像 docker search 镜像名 # 从docker镜像源服务器拉取指定镜像或库镜像 docker pull 镜像名 # push 推送指定镜像或库镜像到docker源服务器 docker pull ubuntu # 移除一个或多个镜像 docker rmi 镜像ID #强制移除一个或多个镜像(正在运行的) docker rmi -f 镜像ID 交互式和守护式#守护式 后台运行 docker -d xxx #交互式 运行后进入该容器的终端 docker -it xxx #exit 停止容器、退出容器交互 #ctrl+p+q 退出,不停止容器运行镜像(以redis为例)#run 表示 创建一个新的容器并运行 # -d 表示 后台运行 # redis:6.0.8 表示 redis:版本 docker run -d redis:6.0.8 # redis-cli -p 6379 # ping # set k1 123 # get k1容器# 查看容器日志 # 684d2d24b569 表示 容器ID ( 使用 docker ps 命令查看ID ) docker logs 684d2d24b569 #查看容器内运行的进程 docder top 684d2d24b569 #查看容器内部细节 docker inspect 684d2d24b569 #重新进入正在运行的容器 并且以命令交互 #exec 是在容器中打开新的终端,启用新的进程。用exit退出不会导致容器停止 docker exec -it 684d2d24b569 /bin/bash #attach 直接进入启动命令的终端,不会启用新的进程。用exit退出会导致容器停止 docker attach 684d2d24b569 #把容器内的文件拷贝到主机(本地)上 docker cp 容器ID:容器内路径 目的主机路径 #导出 将容器导出为tar文件 docker export 容器ID > abc.tar #导入 从tar包中的内容创建一个新的文件系统 导入为镜像 cat abc.tar | docker import -镜像用户/镜像名:镜像版本号 上传到阿里云镜像仓库登录阿里云 -> 容器镜像服务/实例列表/镜像仓库/基本信息创建实例 - 设置密码 - 创建 命名空间和镜像仓库,进入管理测试修改一个ubuntu# 运行ubuntu docker run -it ubuntu /bin/bash # 安装vim apt-get update apt-get install vim vim a.txt #按i进入编辑 #...输入文字 #esc :wq 退出 # commit 将容器变成镜像 docker commit -m="这是一个新的" -a="作者" abc en/ubuntu:1.1 # 镜像列表 docker images推送#1.登录 docker login --username=阿里云账号 registry.cn-hangzhou.aliyuncs.com #>>>回车后需要输入密码 #2.设置标签 #docker tag [镜像ID] registry.cn-hangzhou.aliyuncs.com/ay/mtubuntu:[镜像版本号] docker tag 5555cd2a82d0 registry.cn-hangzhou.aliyuncs.com/ay/mtubuntu:1.1 #3.推送 docker push registry.cn-hangzhou.aliyuncs.com/ay/mtubuntu:1.1拉取#删除本地这个镜像 docker rmi -f 5555cd2a82d0 #拉取 #docker pull registry.cn-hangzhou.aliyuncs.com/ay/mtubuntu:[镜像版本号] docker pull registry.cn-hangzhou.aliyuncs.com/ay/mtubuntu:1.1 #运行 docker run -it 5555cd2a82d0 /bin/bash #查看vim命令是否可用 vim a.txt
2024年01月01日
102 阅读
0 评论
0 点赞
2024-01-01
docker Dnmp搭建php环境
创建一个文件夹 docker ,在这个文件夹中打开终端,执行git clone https://gitee.com/yeszao/dnmp.git进入项目目录cd dnmp 复制环境变量文件,如果要修改,在up之前修改cp env.sample .env复制 docker-compose 配置文件。默认启动3个服务:Nginx、PHP7和MySQL8。要开启更多其他服务,如Redis请删除服务块前的注释cp docker-compose.sample.yml docker-compose.yml创建并且启动所有容器docker-compose up安装完成访问 http://localhost/ ,出现下面截图表示安装完成。超级简单吧~映射docker/www/localhost/ 中的文件。{dotted startColor="#ff6c6c" endColor="#1989fa"/}安装php扩展1.进入php容器docker exec -it php /bin/sh安装swooleinstall-php-extensions swoole安装完成重启php容器安装redisinstall-php-extensions redis可能会出现一个错误DENIED Redis is running in protected mode because protected mode is enabled and no password is set for the default user.进入 services/redis/redis.conf 把 protected-mode no 改成 protected-mode no {dotted startColor="#ff6c6c" endColor="#1989fa"/}{dotted startColor="#ff6c6c" endColor="#1989fa"/}在本地环境绑定一个自定义域名隐藏内容,请前往内页查看详情
2024年01月01日
80 阅读
0 评论
0 点赞
2023-12-02
Window/Mac 抓包工具 Charles 正版激活/使用教程
下载安装官方下载地址:https://www.charlesproxy.com/download/当前最新的还是4.X版本的。激活默认情况下,30天内不激活也是可以正常使用的。激活码有以下几种方式获取:golang代码,也可以找个在线运行的网站执行( https://www.bejson.com/runcode/golang/ )把里面的0en换成你自己的名字package main import ( "bytes" "encoding/binary" "fmt" "math/rand" "time" ) const ( rounds = 12 roundKeys = 2 * (rounds + 1) ) func main() { rand.Seed(time.Now().UnixNano()) name := "0en" fmt.Println("name:", name, " key:", crack(name)) } func crack(text string) string { name := []byte(text) length := len(name) + 4 padded := ((-length) & (8 - 1)) + length bs := make([]byte, 4) binary.BigEndian.PutUint32(bs, uint32(len(name))) buff := bytes.Buffer{} buff.Write(bs) buff.Write(name) var ckName int64 = 0x7a21c951691cd470 var ckKey int64 = -5408575981733630035 ck := newCkCipher(ckName) outBuff := bytes.Buffer{} for i := 0; i < padded; i += 8 { bf := buff.Bytes()[i : i+8] buf := bytes.NewBuffer(bf) var nowVar int64 if err := binary.Read(buf, binary.BigEndian, &nowVar); err != nil { panic(err) } dd := ck.encrypt(nowVar) outBuff.WriteByte(byte(dd >> 56)) outBuff.WriteByte(byte(dd >> 48)) outBuff.WriteByte(byte(dd >> 40)) outBuff.WriteByte(byte(dd >> 32)) outBuff.WriteByte(byte(dd >> 24)) outBuff.WriteByte(byte(dd >> 16)) outBuff.WriteByte(byte(dd >> 8)) outBuff.WriteByte(byte(dd)) } var n int32 for _, b := range outBuff.Bytes() { n = rotateLeft(n^int32(int8(b)), 0x3) } prefix:= n ^ 0x54882f8a suffix:=rand.Int31() in := int64(prefix) << 32 s := int64(suffix) switch suffix >> 16 { case 0x0401: case 0x0402: case 0x0403: in |= s break default: in |= 0x01000000 | (s & 0xffffff) break } out := newCkCipher(ckKey).decrypt(in) var n2 int64 for i := 56; i >= 0; i -= 8 { n2 ^= int64((uint64(in) >> i) & 0xff) } vv := int32(n2 & 0xff) if vv < 0 { vv = -vv } return fmt.Sprintf("%02x%016x", vv, uint64(out)) } type ckCipher struct { rk [roundKeys]int32 } func newCkCipher(ckKey int64) ckCipher { ck := ckCipher{} var ld [2]int32 ld[0] = int32(ckKey) ld[1] = int32(uint64(ckKey) >> 32) ck.rk[0] = -1209970333 for i := 1; i < roundKeys; i++ { ck.rk[i] = ck.rk[i-1] + -1640531527 } var a, b int32 var i, j int for k := 0; k < 3*roundKeys; k++ { ck.rk[i] = rotateLeft(ck.rk[i]+(a+b), 3) a = ck.rk[i] ld[j] = rotateLeft(ld[j]+(a+b), a+b) b = ld[j] i = (i + 1) % roundKeys j = (j + 1) % 2 } return ck } func (ck ckCipher) encrypt(in int64) int64 { a := int32(in) + ck.rk[0] b := int32(uint64(in)>>32) + ck.rk[1] for r := 1; r <= rounds; r++ { a = rotateLeft(a^b, b) + ck.rk[2*r] b = rotateLeft(b^a, a) + ck.rk[2*r+1] } return pkLong(a, b) } func (ck ckCipher) decrypt(in int64) int64 { a := int32(in) b := int32(uint64(in) >> 32) for i := rounds; i > 0; i-- { b = rotateRight(b-ck.rk[2*i+1], a) ^ a a = rotateRight(a-ck.rk[2*i], b) ^ b } b -= ck.rk[1] a -= ck.rk[0] return pkLong(a, b) } func rotateLeft(x int32, y int32) int32 { return int32(x<<(y&(32-1))) | int32(uint32(x)>>(32-(y&(32-1)))) } func rotateRight(x int32, y int32) int32 { return int32(uint32(x)>>(y&(32-1))) | int32(x<<(32-(y&(32-1)))) } func pkLong(a int32, b int32) int64 { return (int64(a) & 0xffffffff) | (int64(b) << 32) }注册码 生成成功然后打开软件,help/register 注册就ok了。安装根证书:https出现unknown处理配置SSL代理:首先在charles的 Proxy选项选择SSL Proxy Settings:其他常见问题:https://blog.csdn.net/m0_58095675/article/details/126456000https://blog.csdn.net/gongzi2311/article/details/135755715
2023年12月02日
93 阅读
0 评论
0 点赞
2023-11-01
阿里云低价云服务器99/年,续费同价/新老用户都可购买
阿里云99/年的云服务器ECS。重要的是续费也是同价99/年,新老用户均可购买!重要的是续费也是同价99/年,新老用户均可购买!重要的是续费也是同价99/年,新老用户均可购买!配置:2核2G,3M固定带宽,40G ESSD Entry云盘活动地址: https://www.aliyun.com/minisite/goods?userCode=e8oi4vy5
2023年11月01日
187 阅读
0 评论
0 点赞
2023-09-01
Pycharm运行js文件、配置Node.js 详细教程
教程为Mac系统,windows系统大同小异安装node.js没有安装的先去下载安装,配置好环境变量在终端查询版本,出现版本号即表示成功在Pycharm中安装node插件在Pycharm中配置node.js一般都会自动添加路径,如果没有自己配置即可创建 1.js 文件,输入 console.log("123") ,右键运行 1.js即可在控制台看到代码输出
2023年09月01日
161 阅读
0 评论
0 点赞
2023-09-01
设计模式 - 工厂模式
简单工厂模式(Simple Factory Pattern)简单工厂模式是指由一个工厂类根据传入的参数决定创建哪一种产品类的实例。这一模式虽然简单,但它违背了开放封闭原则,因为每添加一个新产品就需要修改工厂类逻辑代码。工厂方法模式(Factory Method Pattern)工厂方法模式是指将具体产品的创建延迟到具体的工厂子类中进行,由抽象工厂定义产品对象的创建接口,而具体工厂负责产生具体的产品。抽象工厂模式(Abstract Factory Pattern)抽象工厂模式是指针对一系列相关或相互依赖的产品组成的一个产品族,提供一个统一的接口来创建这些产品。抽象工厂模式可以用于创建一组具有同样约束的产品,同样,这一模式也存在着开放封闭原则问题,新增产品可能导致所有相关工厂类的修改。普通的实现interface Car { public function getModel(); } class BMW implements Car{ public function getModel() { return "BMW"; } } class Audi implements Car{ public function getModel() { return "Audi"; } } class CarFactory { public static function createCar($type) { switch ($type) { case "BMW": return new BMW(); case "Audi": return new Audi(); default: throw new Exception("Invalid car type specified."); } } } $car1 = CarFactory::createCar("BMW"); echo $car1->getModel(); // BMW $car2 = CarFactory::createCar("Audi"); echo $car2->getModel(); // Audi在上面的代码中,我们定义了两个汽车类,BMW和Audi。我们还定义了一个CarFactory类,该类根据传递给它的参数返回所需的汽车类的实例。 我们可以使用这个工厂类轻松创建不同类型的汽车对象。在这个例子中,我们使用工厂模式创建了一个BMW实例和一个Audi实例。更加优雅的实现但是上面的代码用到了Switch显然不太优雅,我们可以借助PHP中的反射更好的实现工厂模式。反射可以为我们提供在运行时动态加载类的机制,这意味着我们可以使用反射来自动获取类名并实例化对象,而不需要在工厂类中显式指定要创建的类的名称。请看下面的代码。。<?php // 创建一个工厂类 class CarFactory { public static function createCar($carType) { $className = ucfirst($carType).'Car'; // 构建类名 if(class_exists($className)) { // 如果类存在 $reflectionClass = new ReflectionClass($className); // 创建反射类 return $reflectionClass->newInstance(); // 返回实例化后的对象 } throw new Exception('Invalid car type.'); // 如果类不存在则抛出异常 } } // 定义两个车型的类 class BenzCar {} class BMWCar {} // 调用工厂方法创建对象 $benz = CarFactory::createCar('benz'); $bmw = CarFactory::createCar('bmw');上述代码中,我们使用ReflectionClass类来反射获取类,然后使用newInstance方法实例化对象。这样,当有新的车型类被添加到系统中时,我们无需修改工厂类的代码,仍然可以使用相同的方法进行实例化。
2023年09月01日
81 阅读
0 评论
0 点赞
2023-08-23
2023可用Jetbrains激活 支持win、mac、linux
某宝售卖的Jetbrains激活教程+工具,附带详细教程以及常见问题解决方法!支持windows、mac、linux。包括idea,clion,pycharm,datagrip等软件仅供学习参考,支持正版: https://www.jetbrains.com/{cloud title="夸克网盘" type="default" url="https://pan.quark.cn/s/d7674cad5f32" password="ApFR"/}
2023年08月23日
334 阅读
0 评论
1 点赞
2023-08-16
Vue3 将字符串下载为txt文件
vue 前端有一段字符串,然后点击按钮,将字符串保存到 txt 文件下载到电脑。首先需要安装一下依赖:npm install file-saver --save安装完成,在需要下载txt文件的页面引入一下库import { saveAs } from 'file-saver';点击按钮执行下面保存 txt 文件的代码:downloadTxt() { let str = 'Vue字符串保存到txt文件下载到电脑案例' let strData = new Blob([str], { type: 'text/plain;charset=utf-8' }); saveAs(strData, "测试文件下载.txt"); },
2023年08月16日
143 阅读
0 评论
0 点赞
2023-06-03
uniapp uniCloud登陆 使用uni-id-co登陆
可以在onload中调用,也可以事件调用,不跳转到uni-id-pages提供的页面,使用uniCloud uni-Id登陆。//微信小程序 const uniIdCo = uniCloud.importObject('uni-id-co') uni.login({ provider: 'weixin', success: function(loginRes) { if (loginRes.code) { uniIdCo.loginByWeixin({ code:loginRes.code }).then(res=>{ if(res.errCode == 0){ mutations.updateUserInfo() } }) } }, fail(err) { uni.showModal({ content: err.message || '请求服务失败', showCancel: false }) } });token过期判断let token_expired = uni.getStorageSync('uni_id_token_expired')||0 let currTime = new Date().getTime(); let hostUserInfo = uni.getStorageSync('uni-id-pages-userInfo')||{} // token是否过期 if(token_expired < currTime) hostUserInfo = {} const data = { userInfo: hostUserInfo, hasLogin: Object.keys(hostUserInfo).length != 0 }
2023年06月03日
385 阅读
0 评论
0 点赞
2023-06-01
uniapp+php 微信小程序登录 获取openid
uniapp+php 微信小程序登录 获取openid前端 uni.login(wx.login) 获取code后端 jscode2session 验证code并获取openid参考、非完整demouniapp代码:const BASE_URL = "http://127.0.0.1/api/"; //接口地址 /** * 封装请求 */ export const myRequest = (options)=>{ return new Promise((resolve,rejecj)=>{ uni.request({ url:BASE_URL + options.url, method:options.method || 'GET', data:options.data || {}, dataType:"json", header: { "Content-Type": "application/x-www-form-urlencoded", }, success: (res) => { resolve(res) }, fail: (err) => { uni.showToast({ title:'请求接口失败', icon:"error" }) rejecj(err) } }) }) } /** * 微信小程序登录并获取用户信息 */ export const wxlogin = ()=>{ return new Promise((resolve,rejecj)=>{ uni.login({ provider: 'weixin', //使用微信登录 success: function (loginRes) { if(loginRes.code){ let data = {code:loginRes.code}; myRequest({ url:"api.php?act=getWxInfo", data, method:"POST" }).then(res=>{ resolve(res) }).catch(err=>{ rejecj(err) }); } },fail(err) { rejecj(err) } }); }) }php代码:接收到code后获取openid /** * jscode2session * 通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程 * https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html */ public function jscode2session($code = ""){ $api = "https://api.weixin.qq.com/sns/jscode2session?appid={$this->appid}&secret={$this->secret}&js_code={$code}&grant_type=authorization_code"; $reslut = file_get_contents($api); $reslut_arr = json_decode($reslut,true); if(!is_array($reslut_arr)){ return ['errcode' => -9999,'errmsg' => $reslut]; } return $reslut_arr; }
2023年06月01日
332 阅读
0 评论
0 点赞
1
2
3
4
...
10