首页
友人帐
留言板
关于
Search
1
IDE Eval Resetter:JetBrains 全家桶无限试用插件
381 阅读
2
影视资源采集站收录大全
302 阅读
3
linux安装或升级protoc
224 阅读
4
VFM 3.7.5 源码 - 一个极简的 PHP 私人云盘!
161 阅读
5
批量采集美女写真等图片做图片站
149 阅读
谈天说地
程序源码
技术教程
成品源码
登录
Search
标签搜索
PHP
linux
源码
go
windows
centos
原创
mysql
微信
激活
采集
宝塔
绿色版
API
解析
SDK
图片
破解
域名
html
云青
累计撰写
150
篇文章
累计收到
78
条评论
首页
栏目
谈天说地
程序源码
技术教程
成品源码
页面
友人帐
留言板
关于
搜索到
92
篇与
的结果
2022-08-31
win11自带SSH免密登录Linux
前言使用win11自带的SSH工具登录Linux,不需要每次都输入密码。网上找了很多教程才找到合适的,重新整理和操作并记录下来,给相同需求的小伙伴提供参考。(所有的操作都是在win11的CMD命令行)生成公钥文件ssh-keygen -t rsa -c "admin@aaayun.cc"上传公钥文件(win11)找到自己的公钥路径 (C:\Users\你的用户名\.ssh)scp C:\Users\anderyly\.ssh\id_rsa.pub root@192.168.2.222:~/.ssh重命名公钥文件 登录linux,此时仍需要密码登陆ssh root@192.168.2.222 重命名公钥文件cd /root/.ssh mv id_rsa.pub authorized_keys 修改文件权限 修改文件权限chmod 600 authorized_keys chmod 700 /root/.ssh 修改SSH配置文件vim /etc/ssh/sshd_config 保证这三句不被注释掉,如果没有则添加新的对应的语句,我需要添加"RSAAuthentication yes"RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys保存退出 重新启动SSH服务(Linux)systemctl restart sshd
2022年08月31日
23 阅读
0 评论
0 点赞
2022-06-16
AYPHP轻量级框架
开发初衷此框架陪伴了博主三年多,因为经常开发小系统,其他框架有些东西真好用(TP的连贯操作、C函数等),想把这些抠出来太难了。故此写了很多第三方类,后来觉得文件太多了,每次开发都要重新复制并命名(命名空间)很麻烦,故此开发了这样一个轻量级框架,用此框架无需担心用户注入等危险操作,框架在路由层已全面去除可能存在的危险字符(sql、xss、特殊字符)框架lib下类文件均可以独立使用,如果您并不希望使用此框架,可以单独取出所需要的类文件使用此文章将长期更新ps: 此框架支持PHP8,数据库采用PDO源码地址规范目录和文件 目录使用小写+下划线; 类库、函数文件统一以.php为后缀; 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致; 类文件采用驼峰法命名(首字母大写),其它文件采用小写+下划线命名; 类名和类文件名保持一致,统一采用驼峰法命名(首字母大写); 函数和类、属性命名 类的命名采用驼峰法(首字母大写),例如User、UserType,默认不需要添加后缀,例如UserController应该直接命名为User; 函数的命名使用小写字母和下划线(小写字母开头)的方式,例如get_client_ip; 方法的命名使用驼峰法(首字母小写),例如getUserName; 属性的命名使用驼峰法(首字母小写),例如tableName、instance; 以双下划线“__”打头的函数或方法作为魔术方法,例如__call和__autoload; 目录结构project 应用部署目录 ├─app 应用目录 │ ├─index 模块目录(可更改) │ │ ├─controller 控制器目录 │ │ ├─model 模型目录 │ │ ├─view 视图目录 │ ├─function.php 应用(公共)自定义函数 ├─ay 框架系统目录 │ ├─unity.php 核心函数 │ ├─drive 框架驱动文件 │ ├─lib 框架类文件 │ ├─Base.php 基础定义文件 │ ├─Core.php 控制台入口文件 │ └─ay.php 框架引导文件 ├─config 框架配置目录 │ │ └─app.php 基础配置文件 │ │ └─file.php 上传配置 │ │ └─database.php 数据库配置文件 │ │ └─image.php 图片配置文件 │ │ └─redis.php redis配置文件 │ │ └─route.php 路由配置文件 ├─extend 扩展类库目录 ├─public 公共资源目录 │ ├─static 静态资源存放目录(css,js,image) │ ├─index.php 应用入口文件 │ ├─.htaccess 用于 apache 的重写 ├─temp 应用的运行时目录(可写,可设置) ├─vendor 第三方类库目录(Composer) ├─README.md README 文件核心类Request请求类引入Request类use ay\lib\Request; // 获取全部参数 dump(Request::instance()->param()); // 获取get参数参数 dump(Request::instance()->get()); // 获取post请求参数 status字段并格式化成int类型 dump(Request::instance()->post("status", "int")); // 获取put请求正文 dump(Request::instance()->put()); // 获取delete请求参数 dump(Request::instance()->delete()); Session引入Session类use ay\lib\Request; // 设置 dump(Session::set("user", "123")); // 获取 dump(Session::get("user")); // 判断是否存在 dump(Session::has("user")); // 取出并删除 dump(Session::pull("user")); // 删除 Session::delete("user");Json返回类引入json类use ay\lib\Json; $data = [ "list" => [ ["id" => 1], ["id" => 2], ["id" => 3], ] ]; // 与最外层同级 $arr = ["page" => 1]; Json::msg(200, "success", $data, $arr);返回{ "code": 200, "msg": "success", "data": { "list": [ { "id": 1 }, { "id": 2 }, { "id": 3 } ] }, "page": 1 }Xml操作引入Xml类use ay\lib\Xml; // 生成xml dump(Xml::instance()->create(["a" => 1, "d" => 2])); // 转数组 dump(xml::instance()->toArray(xml字符串)); 引入dir类use ay\lib\Dir; // 创建文件夹 dump(Dir::instance()->create(PUB . "/s")); // 获取文件扩展名 dump(Dir::instance()->getExt(PUB . "static/water/water.png")); // 显示目录树 dump(Dir::instance()->treeDir(AY)); // 遍历目录内容 dump(Dir::instance()->tree(AY)); // 删除文件夹 dump(Dir::instance()->del(PUB . "/s")); // 获取目录大小 dump(Dir::instance()->getDirSize(PUB . "static/water")); // 复制目录 dump(Dir::instance()->copy(PUB . "static/water", PUB . "static/water1")); 图像处理引入image类use ay\lib\Image; // 初始化image类 详细初始化信息 看构造函数 $image = new Image(); // 生成缩略图并返回缩略图地址 echo $image->thumb(PUB . "static/water/h.png", PUB . "static/water/h1.png", 100, 100, 1); // 添加水印 var_dump($image->water(PUB . "static/water/h.png", PUB . "static/water/h2.png", [100, 100], "", 1, "123")); 缓存类引入Cache类use ay\lib\Cache; // 设置指定缓存 dump(Cache::instance()->set('data', '123')); // 取出指定缓存 dump(Cache::instance()->get('data')); // 删除指定缓存 Cache::instance()->del('data'); // 删除全部缓存 Cache::instance()->delAll(); dump(Cache::instance()->get('data')); Curl类引入Curl类use ay\lib\Curl; $url = "https://blog.aaayun.cc/test.php"; $ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'; dump( Curl::url($url) ->userAgent($ua) // 设置ua ->referer('') // 设置来源 ->param(['user' => '测试数据']) // 设置参数 ->time(10) // 最大超时时间 ->proxy('127.0.0.1', 1080) // 设置代理 ->show(true) // 显示repose信息 ->cert('') // 设置证书 ->post() );Upload类引入Upload类use ay\lib\Upload; $upload = new Upload(PUB . 'upload/', ['txt']); dump($upload->operate('file'));Env类引入Env类use ay\lib\Env; dump(Env::get('data.debug'));Api类详细使用请看Api控制器助手函数R方法// 获取所有post参数 dump(R('post.')); // 验证post下ids参数是否存在 dump(R('?post.ids')); // 获取所有get参数 dump(R('get.')); // 验证get下id参数是否存在 dump(R('?get.id')); // 获取所有参数 注意 会多返回一个s参数 此参数为当前路由 dump(R('param')); // 获取所有文件参数 dump(R('file')); // 验证file下file参数是否存在 dump(R('?file.file'));C方法// 输出全部预定义 dump(C()); // 改变指定并返回值 dump(C('APP.DEBUG', 123)); // 增加并返回值 dump(C('AAA.ACV', 123)); dump(C()); success&&fail方法success('操作成功', 'http://baidu.com'); fail('操作失败', 'http://baidu.com');无限级分类树$arr = [ ['id' => 1, 'pid' => 0, 'name' => '一级'], ['id' => 2, 'pid' => 1, 'name' => '二级'], ['id' => 3, 'pid' => 2, 'name' => '三级'], ]; dump(tree($arr, 'id', 'pid'));其它常用方法// 导入extends目录下扩展包 extends('pay/alipay.php'); $pay = new AliPay(); // 获取来源ip dump(getIp()); // 判断当前是否是ssl dump(is_ssl()); // 抛出异常 halt(); // 跳转 go('http://baidu.com/', 3, "系统正在重定向");
2022年06月16日
12 阅读
0 评论
0 点赞
2022-06-10
golang使用宝塔API快速建站
由于某些原因,需要用一行命令来创建宝塔以及数据库,此函数基于官方的API注意:宝塔创建网站需要使用php 以下代码使用php80下面代码用到了第三方库github.com/spf13/vipermd5的计算就不贴了很简单BtServer主文件/* * @Author anderyly * @email admin@aaayun.cc * @link http://blog.aaayun.cc/ * @copyright Copyright (c) 2022 */ package ay import ( "encoding/json" "fmt" "io/ioutil" "net/http" "runtime" "strconv" "strings" "time" ) type BtServer struct { } // GetSign 获取签名 func (con BtServer) GetSign() map[string]string { res := make(map[string]string, 2) res["request_time"] = strconv.FormatInt(time.Now().Unix(), 10) res["request_token"] = MD5(res["request_time"] + MD5(Yaml.GetString("bt.code"))) return res } // GetSiteId 获取网站id func (con BtServer) GetSiteId() { type r struct { Where string `json:"where"` Page string `json:"page"` Data []struct { Id int `json:"id"` Name string `json:"name"` Path string `json:"path"` Status string `json:"status"` Ps string `json:"ps"` Addtime string `json:"addtime"` Edate string `json:"edate"` Type string `json:"type"` TypeVersion string `json:"type_version"` BackupCount int `json:"backup_count"` Domain int `json:"domain"` Ssl int `json:"ssl"` } `json:"data"` } url := Yaml.GetString("bt.panel") + "/data?action=getData&table=sites" data := con.GetSign() data["limit"] = "1" data["search"] = Yaml.GetString("bt.site") res := con.Http(url, data) var rj r json.Unmarshal([]byte(res), &rj) siteId := 0 if len(rj.Data) == 1 { for _, v := range rj.Data { siteId = v.Id } } Yaml.Set("bt.site_id", siteId) Yaml.WriteConfig() } func (con BtServer) Http(url string, data map[string]string) string { str := "" for k, v := range data { str += k + "=" + v + "&" } resp, err := http.Post(url, "application/x-www-form-urlencoded", strings.NewReader(strings.TrimRight(str, "&"))) if err != nil { fmt.Println(err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { // handle error } return string(body) } // Create 创建网站 func (con BtServer) Create() (bool, string) { type r struct { SiteStatus bool `json:"siteStatus"` SiteId int `json:"siteId"` FtpStatus bool `json:"ftpStatus"` DatabaseStatus bool `json:"databaseStatus"` Status bool `json:"status"` Msg string `json:"msg"` } url := Yaml.GetString("bt.panel") + "/site?action=AddSite" data := con.GetSign() pass := MD5(strconv.FormatInt(time.Time{}.Unix(), 10))[:10] Yaml.Set("mysql.user", "shop") Yaml.Set("mysql.database", "shop") Yaml.Set("mysql.password", pass) Yaml.Set("mysql.localhost", "127.0.0.1") Yaml.Set("mysql.port", "3306") if runtime.GOOS == "linux" { data["path"] = "/www/wwwroot/shop" } else { data["path"] = "D:/wwwroot/shop" } data["webname"] = `{"domain":"` + Yaml.GetString("bt.site") + `","domainlist":[],"count":0}` data["type_id"] = "0" data["type"] = "PHP" data["version"] = "80" data["port"] = "80" data["ps"] = "微营销" data["ftp"] = "false" data["sql"] = "true" data["codeing"] = "utf8mb4" data["datauser"] = "shop" data["datapassword"] = pass res := con.Http(url, data) var rj r json.Unmarshal([]byte(res), &rj) Yaml.Set("bt.site_id", rj.SiteId) if rj.SiteStatus && rj.DatabaseStatus { Yaml.WriteConfig() return true, "success" } else { return false, rj.Msg } } // GetDomain 获取域名 func (con BtServer) GetDomain() []map[string]string { type r struct { Id int `json:"id"` Pid int `json:"pid"` Name string `json:"name"` Port int `json:"port"` Addtime string `json:"addtime"` } url := Yaml.GetString("bt.panel") + "/data?action=getData&table=domain" data := con.GetSign() data["search"] = Yaml.GetString("bt.site_id") data["list"] = "true" res := con.Http(url, data) var rj []r json.Unmarshal([]byte(res), &rj) var s []map[string]string for _, v := range rj { s = append(s, map[string]string{ "id": strconv.Itoa(v.Id), "name": v.Name, "port": strconv.Itoa(v.Port), }) } return s } // DelDomain 删除域名 func (con BtServer) DelDomain(domain, port string) (bool, string) { type r struct { Status bool `json:"status"` Msg string `json:"msg"` } url := Yaml.GetString("bt.panel") + "/site?action=DelDomain" data := con.GetSign() data["id"] = Yaml.GetString("bt.site_id") data["webname"] = Yaml.GetString("bt.site") data["domain"] = domain data["port"] = port res := con.Http(url, data) var rj r json.Unmarshal([]byte(res), &rj) return rj.Status, rj.Msg } // SetDomain 设置域名 func (con BtServer) SetDomain(domain string) (bool, string) { type r struct { Status bool `json:"status"` Msg string `json:"msg"` } url := Yaml.GetString("bt.panel") + "/site?action=AddDomain" data := con.GetSign() data["id"] = Yaml.GetString("bt.site_id") data["webname"] = Yaml.GetString("bt.site") data["domain"] = domain res := con.Http(url, data) var rj r json.Unmarshal([]byte(res), &rj) return rj.Status, rj.Msg } // UpdateDomain 更新网站域名 func (con BtServer) UpdateDomain(str string) (bool, string) { domainArr := strings.Split(str, "=") btDomain := con.GetDomain() for _, v := range domainArr { domainS := 0 for _, v1 := range btDomain { if v == v1["name"] { domainS = 1 break } } if domainS != 1 { con.SetDomain(v) } } return true, "success" }yaml文件bt: code: QGg5Ct3BlSKlvZmvVk537vuVToJ8j8ci panel: http://127.0.0.1:8888 site: baidu1.com site_id: 1 domain: http://127.0.0.1:8082 mysql: database: shop localhost: 127.0.0.1 password: root port: 3306 user: root
2022年06月10日
17 阅读
0 评论
0 点赞
2022-05-23
Centos7一键安装pptp脚本
废话不多说直接上脚本wget https://uss.aaayun.cc/typecho/uploads/2022/05/3296326676.txt -O CentOS7-pptp-host1plus.sh chmod +x ./CentOS7-pptp-host1plus.sh ./CentOS7-pptp-host1plus.sh -u your_username -p your_password 可在-u、-p后随意更改自己的登录用户名和密码。但密码长度必须大于8个 ASCII字符,否则为了安全,脚本将会随机生成密码。脚本命令及配置设置账号vim /etc/ppp/chap-secrets修改dns(ms_dns)vim /etc/ppp/options.pptpd 重启服务/bin/systemctl restart pptpd.service连不上VPN检查是否开放了 1723 端口,一般是因为这个原因吧打不开网页vim /etc/ppp/ip-up在 exit 0 前写入 : ifconfig $1 mtu 1500
2022年05月23日
41 阅读
0 评论
0 点赞
2022-03-05
最新idea激活2021版
找了很多版本都是2020.1激活的,比如像phpstorm2020版就没有php8提示,废话不多说下面开始此激活方式支持jb公司的 2021 后所有产品1.下载激活文件,并解压到一个路径下ja-netfilter.zip2.使用激活码进入idekey.txt3.进入配置文件4.修改并保存 重启ide-javaagent:第一步解压文件后的路径\ja-netfilter.jar5.成功
2022年03月05日
13 阅读
3 评论
0 点赞
1
2
3
4
...
19