首页
友人帐
留言板
关于
Search
1
IDE Eval Resetter:JetBrains 全家桶无限试用插件
415 阅读
2
影视资源采集站收录大全
371 阅读
3
linux安装或升级protoc
245 阅读
4
VFM 3.7.5 源码 - 一个极简的 PHP 私人云盘!
173 阅读
5
批量采集美女写真等图片做图片站
154 阅读
谈天说地
程序源码
技术教程
成品源码
登录
Search
标签搜索
PHP
linux
源码
go
windows
centos
原创
mysql
微信
激活
采集
宝塔
绿色版
API
解析
SDK
图片
破解
域名
html
云青
累计撰写
150
篇文章
累计收到
128
条评论
首页
栏目
谈天说地
程序源码
技术教程
成品源码
页面
友人帐
留言板
关于
搜索到
92
篇与
的结果
2023-05-30
go-swagger 快速入门教程
生成描述文件命令用法: swagger [选项] generate spec [命令]应用选项: -q, --quiet 不显示log --log-output=LOG-FILE 输出Log到文件帮助选项: -h, --help 显示帮助信息[描述文件命令] -w, --work-dir= 基本工作路径 (默认: .) -t, --tags= 构建的标签 -m, --scan-models 引入模型 'swagger:model' --compact 不格式化json -o, --output= 输出文件路径 -i, --input= 添加需要合并的描述文件路径 -c, --include= 添加外部包路径 -x, --exclude= 不要引入的包路径 --include-tag= 引入带有特定tag的路径文件 (可声明多个) --exclude-tag= 不要引入带有特定tag的路径文件 (可声明多个) --exclude-deps 不引人项目所有依赖生成swagger 文件 在项目根目录执行swagger generate spec --output=./XXX.yml XXX是文件名,即可生成运行server swagger serve --no-open -F=swagger --port 36666 XXX.yml 36666是端口号,xxx是文件名其他命令合并文件swagger mixin {spec1} {spec2}扩充$refswagger expand {spec}扁平化: 所有外部 $ref 都被导入到主文档中,并且内联模式被重新组织为定义。swagger flatten {spec}生成markdownswagger generate markdown -f {spec} --output swagger.mode
2023年05月30日
56 阅读
0 评论
0 点赞
2023-05-19
linux安装或升级protoc
由于协作管理protoc版本不一致导致每次生成的文件都会冲突,直接用同一版本获取源码包Git地址:https://github.com/protocolbuffers/protobuf/releases指定版本:https://github.com/protocolbuffers/protobuf/releases/tag/v3.21.12此处以3.21.12版本为例。安装或升级protoc可以先阅读,各模块目录下的README.txt文件,了解安装和使用方法。我们必须先安装或升级ptotoc编译器,才能进一步编译获得,完整的python或java模块。unzip protobuf-3.21.12.zip cd protobuf-3.21.12 ./autogen.sh ./configure make make check make install protoc --version
2023年05月19日
245 阅读
12 评论
0 点赞
2023-03-18
golang实现百度智能小程序用户数据的解密
golang实现百度智能小程序用户数据的解密百度智能小程序官方文档博主在网上gitee github找了很多 几乎没有看到适配golang的方法,以下方法可行类库/* * @author anderyly * @email admin@aaayun.cc * @link http://blog.aaayun.cc * @copyright Copyright (c) 2023 * */ package baidu import ( "crypto/aes" "crypto/cipher" "encoding/base64" "encoding/json" "errors" "fmt" "regexp" ) var _ AppletDataCrypt = (*appletDataCrypt)(nil) type AppletDataCrypt interface { Decrypt(data string, iv string, isJSON bool) (interface{}, error) // 解密 } type appletDataCrypt struct { AppID string SessionKey string } var errorCode = map[string]int{ "IllegalAppID": -41000, "IllegalAesKey": -41001, "IllegalIV": -41002, "IllegalBuffer": -41003, "DecodeBase64Error": -41004, "DecodeJsonError": -41005, } type showError struct { errorCode int errorMsg error } func NewAppletDataCrypt(appid, sessionKey string) AppletDataCrypt { return &appletDataCrypt{ AppID: appid, SessionKey: sessionKey, } } func (e showError) Error() string { return fmt.Sprintf("{code: %v, error: \"%v\"}", e.errorCode, e.errorMsg) } func (con *appletDataCrypt) Decrypt(data string, iv string, isJSON bool) (interface{}, error) { aesKey, err := base64.StdEncoding.DecodeString(con.SessionKey) if err != nil { return nil, showError{errorCode["DecodeBase64Error"], err} } if len(iv) != 24 { return nil, showError{errorCode["IllegalIV"], errors.New("iv length is error")} } aesIV, err := base64.StdEncoding.DecodeString(iv) if err != nil { return nil, showError{errorCode["DecodeBase64Error"], err} } aesCipherText, err := base64.StdEncoding.DecodeString(data) if err != nil { return nil, showError{errorCode["DecodeBase64Error"], err} } aesPlantText := make([]byte, len(aesCipherText)) aesBlock, err := aes.NewCipher(aesKey) if err != nil { return nil, showError{errorCode["IllegalBuffer"], err} } mode := cipher.NewCBCDecrypter(aesBlock, aesIV) mode.CryptBlocks(aesPlantText, aesCipherText) aesPlantText = con.PKCS7UnPadding(aesPlantText) var decrypted map[string]interface{} re := regexp.MustCompile(`[^\{]*(\{.*\})[^\}]*`) aesPlantText = []byte(re.ReplaceAllString(string(aesPlantText), "$1")) err = json.Unmarshal(aesPlantText, &decrypted) if err != nil { return nil, showError{errorCode["DecodeJsonError"], err} } if isJSON == true { return string(aesPlantText), nil } return decrypted, nil } func (con *appletDataCrypt) PKCS7UnPadding(plantText []byte) []byte { length := len(plantText) if length > 0 { unPadding := int(plantText[length-1]) return plantText[:(length - unPadding)] } return plantText } 调用方法// res为json需要自行json.Unmarshal这里不做演示 res, err := baidu.NewAppletDataCryp("appid", "sessionKey").Decrypt("加密的数据", "偏移量", true)
2023年03月18日
35 阅读
0 评论
0 点赞
2022-12-05
TP5使用workerman开启websocket服务
前言之前代码使用websocket方式是直接下载workman文件放入vendor中进行使用,这种方式处理及其容易出现问题,比如linux运行正常而windows无法使用,每次部署代码拉取依赖包都会覆盖等奇奇怪怪的问题安装依赖 通过Composer.exe安装相关依赖:composer require topthink/think-worker 如果报错,如下:composer require topthink/think-worker Using version ^2.0 for topthink/think-worker ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 topthink/think-worker v2.0.5 requires topthink/framework 5.1.* -> satisfiable by topthink/framework[5.1.x-dev, v5.1-beta.1, v5.1-rc.1, v5.1-rc.2, v5.1-rc.3, v5.1.0, v5.1.1, v5.1.10, v5.1.11, v5.1.12, v5.1.13, v5.1.14, v5.1.15, v5.1.16, v5.1.17, v5.1.18, v5.1.19, v5.1.2, v5.1.3, v5.1.4, v5.1.5, v5.1.6, v5.1.7, v5.1.8, v5.1.9] but these conflict with your requirements or minimum-stability. - topthink/think-worker v2.0.4 requires topthink/framework 5.1.* -> satisfiable by topthink/framework[5.1.x-dev, v5.1-beta.1, v5.1-rc.1, v5.1-rc.2, v5.1-rc.3, v5.1.0, v5.1.1, v5.1.10, v5.1.11, v5.1.12, v5.1.13, v5.1.14, v5.1.15, v5.1.16, v5.1.17, v5.1.18, v5.1.19, v5.1.2, v5.1.3, v5.1.4, v5.1.5, v5.1.6, v5.1.7, v5.1.8, v5.1.9] but these conflict with your requirements or minimum-stability. - topthink/think-worker v2.0.3 requires topthink/framework 5.1.* -> satisfiable by topthink/framework[5.1.x-dev, v5.1-beta.1, v5.1-rc.1, v5.1-rc.2, v5.1-rc.3, v5.1.0, v5.1.1, v5.1.10, v5.1.11, v5.1.12, v5.1.13, v5.1.14, v5.1.15, v5.1.16, v5.1.17, v5.1.18, v5.1.19, v5.1.2, v5.1.3, v5.1.4, v5.1.5, v5.1.6, v5.1.7, v5.1.8, v5.1.9] but these conflict with your requirements or minimum-stability. - topthink/think-worker v2.0.2 requires topthink/framework 5.1.* -> satisfiable by topthink/framework[5.1.x-dev, v5.1-beta.1, v5.1-rc.1, v5.1-rc.2, v5.1-rc.3, v5.1.0, v5.1.1, v5.1.10, v5.1.11, v5.1.12, v5.1.13, v5.1.14, v5.1.15, v5.1.16, v5.1.17, v5.1.18, v5.1.19, v5.1.2, v5.1.3, v5.1.4, v5.1.5, v5.1.6, v5.1.7, v5.1.8, v5.1.9] but these conflict with your requirements or minimum-stability. - topthink/think-worker v2.0.1 requires topthink/framework 5.1.* -> satisfiable by topthink/framework[5.1.x-dev, v5.1-beta.1, v5.1-rc.1, v5.1-rc.2, v5.1-rc.3, v5.1.0, v5.1.1, v5.1.10, v5.1.11, v5.1.12, v5.1.13, v5.1.14, v5.1.15, v5.1.16, v5.1.17, v5.1.18, v5.1.19, v5.1.2, v5.1.3, v5.1.4, v5.1.5, v5.1.6, v5.1.7, v5.1.8, v5.1.9] but these conflict with your requirements or minimum-stability. - topthink/think-worker v2.0.0 requires topthink/framework 5.1.* -> satisfiable by topthink/framework[5.1.x-dev, v5.1-beta.1, v5.1-rc.1, v5.1-rc.2, v5.1-rc.3, v5.1.0, v5.1.1, v5.1.10, v5.1.11, v5.1.12, v5.1.13, v5.1.14, v5.1.15, v5.1.16, v5.1.17, v5.1.18, v5.1.19, v5.1.2, v5.1.3, v5.1.4, v5.1.5, v5.1.6, v5.1.7, v5.1.8, v5.1.9] but these conflict with your requirements or minimum-stability. - Installation requestfortopthink/think-worker ^2.0 -> satisfiable by topthink/think-worker[v2.0.0, v2.0.1, v2.0.2, v2.0.3, v2.0.4, v2.0.5].Installation failed, reverting ./composer.json to its original content. Installation failed, reverting ./composer.json to its original content. 则是版本不匹配,用低版本的workerman,更改如下:composer require topthink/think-worker=1.0.* 如果是windows系统,还需安装依赖:composer require workerman/workerman-for-win 启动服务文件在项目根目录里面新增server.php文件<?php define('APP_PATH', __DIR__ . '/../application/'); define("BIND_MODULE", "server/Screen"); // 加载框架引导文件 require __DIR__ . '/../thinkphp/start.php';增加控制器<?php namespace app\server\controller; use think\worker\Server; class Screen extends Server { protected $socket = 'websocket://127.0.0.1:2346'; private $all = []; /** * 收到信息 * @param $connection * @param $data */ public function onMessage($connection, $data) { // 广播 foreach ($this->all as $v) { $v->send(json_encode("广播")); } // $connection->send("收到消息啦,您的id:" . $connection->id); } /** * 当连接建立时触发的回调函数 * @param $connection */ public function onConnect($connection) { // 保存所有已连接的客户端id $this->all[$connection->id] = $connection; } /** * 当连接断开时触发的回调函数 * @param $connection */ public function onClose($connection) { // 去除断开连接的客户端 unset($this->all[$connection->id]); } /** * 当客户端的连接上发生错误时触发 * @param $connection * @param $code * @param $msg */ public function onError($connection, $code, $msg) { echo "error $code $msg"; } /** * 每个进程启动 * @param $worker */ public function onWorkerStart($worker) { } }启动监听服务打开cmd或bash执行以下代码php server.php测试打开chrome浏览器, 先打开127.0.0.1域名下的网页( js跨域不能通讯),按F12打开调试控制台, 在console一栏输入(或者把下面代码放入到html页面用js运行)ws = new WebSocket("ws://127.0.0.1:2346"); ws.onopen = function() { alert("连接成功"); ws.send('tom'); alert("给服务端发送一个字符串: tom"); }; ws.onmessage = function(e) { alert("收到服务端的消息: " + e.data); }; ws.send('保持连接, 发第二次信息, 查看服务器回应');
2022年12月05日
27 阅读
0 评论
0 点赞
2022-12-01
centos7系统安装php8
前言centos7默认源的php版本只有5.4,版本太老,而mediawiki需要的php版本为7.4以上,所以本文直接升级到php8.0。步骤 卸载所有已安装的phpyum remove -y php* 添加remi源(可能需要提前安装epel-release)yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm # 此处若是无法下载 可用 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://rpms.remirepo.net/enterprise/remi-release-7.rpm 单独启用php80的源(没有yum-config-manager命令的话需要安装yum-utils)yum-config-manager --disable 'remi-php*' yum-config-manager --enable remi-php80 安装php及其拓展yum install -y php php-bcmath php-cli php-common php-devel php-fpm php-gd php-intl php-ldap php-mbstring php-mysqlnd php-odbc php-pdo php-pear php-pecl-xmlrpc php-pecl-zip php-process php-snmp php-soap php-sodium php-xml 版本验证php -v
2022年12月01日
18 阅读
0 评论
0 点赞
1
2
...
19