php实现使用github授权登录
github 官网文档https://docs.github.com/cn/developers/apps/building-oauth-apps/authorizing-oauth-apps#web-application-flow
原理
客户端发起请求 redirect 到 OAuth 接入方并附带上 client_id
用户在 redirect 之后的网站上输入用户名和密码
登陆成功之后,OAuth 接入方会返回给服务端一个 code。
服务端拿到 code 之后,拿着 client_secret 和 code 向 OAuth 接入方申请获得 Token
服务端拿到 Token 之后,进入授权窗口
授权成功,跳转到客户端网站。
创建好 github 账号后点击设置
之后进入前期工作github 页面开通步骤一
步骤二
步骤三
步骤四添加好必填项
注册应用后会生成 client_id, 然后需要创建密码
1234#页面首页地址(登录成功后跳转到的地址):http://huicmf.frp.toushizhiku.com:18080/app/user#授权回调地址(代码中处理函 ...
tp6+使用cli(cmd)命令行模式访问控制器
因为 thinkphp6 简称 tp6,默认不支持直接 cli 命令行模式访问控制器,于是利用官方的 command 实现了访问控制器.
实现效果如下 :
php think action 模块/控制器/方法
1、新建 command,Action:
在 app\command 创建文件:Action.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596<?phpdeclare (strict_types=1);namespace app\command;use think\console\Command;use think\console\Input;use think\console\input\Argument;use thin ...
使用workerman接收websocket消息,并在thinkphp6控制器里处理取得的数据
一、创建 workerman 服务,并启动
用以接收 websocket 消息
1、安装 workerman 服务1composer require workerman/workerman
2、根目录下创建文件:**server.php**方法 1:使用回调函数12345678910111213141516171819202122232425262728293031323334<?phprequire_once __DIR__.'/vendor/autoload.php';use Workerman\Worker;use Workerman\Connection\AsyncTcpConnection;$worker = new Worker();$worker->onWorkerStart = function ($worker) { $con = new AsyncTcpConnection('ws://127.0.0.1:7600/wcf/socket_receiver'); // websocket握手 ...
宝塔面板进程守护管理器(Supervisor)踩坑日记
tags: [守护进程,supervisor]
categories: 学无止境
copyright_author_href: https://www.xiaohuihui.cc
copyright_url:copyright_author:
cover:
宝塔面板,正常使用过程中,突然守护进程异常报错,无论重启还是停止均无法执行。
这里记录一下,以便后期参考使用
找到错误日志:
排查看到:
Failed to start supervisord.service:Unit is not loaded properly: Is a directory.
提示 **supervisord.service **单元是一个目录。
找到对应位置:
/usr/lib/systemd/system 并搜索:**supervisord.service**
可以看到 搜索到的是一个目录而非文件。
修复方案:一、找到:软件商店》守护进程》点击修复。之后正常
二、
找到 unit 目录 /usr/lib/systemd/ ...
通过 Python|PHP 生成mysql数据字典
使用PHP和python生成数据字典,直接上代码,并保存到markdown里面
php123456789101112131415161718192021222324252627282930313233343536373839404142434445<?php $database_name = '改成your database name';$output_file = $database_name . '.md'; // Markdown 文件名// 修改配置$conn = new mysqli('127.0.0.1', 'root', '123456', $database_name, 3306);if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);}$output = ''; // 用于存储 ...
使用eacharts画行政区域规划图
用 Echarts 无论是制作省份地图还是区县域地图,他们的步骤都是基本一样的。
下面就 利用 Echarts 简单绘制省份地图 的步骤与经验与各位分享一下。
![](https://cdn.nlark.com/yuque/0/2024/png/27022430/1713511104993-e973c846-fd56-4cfb-a732-a9779e788c8e.png)
1、准备工作
1.1 下载 js 静态文件 - china.js - echarts.min.js
1.2 下载中国各省、各市的 .json 文件 - 省份或者地区的数据文件 - 网址:https://github.com/longwosion/geojson-map-china
2、获取省份数据
2.1 第一步:获取 XX 省的地图 json 数据文件(例:河南省)(是以各省身份证号 前两位 开头命名的)
2.2 第二步:将获取到的 JSON 文件 转换 成 js 文件(河南省:henan.js)
2.3 第三步:修改转换后的 js 文件 - 打开 js 文件 - 添加变量 xx (这里命名习惯为 ...
php简单读取文档数据的几种方法对比和效率
在处理大数据文件时,效率往往受到文件大小、内存限制、CPU 性能以及具体实现算法的影响。以下是对之前给出的几种方法在处理大数据效率方面的分析:
使用 file() 函数
file()函数会一次性将整个文件内容加载到内存中,转化为数组。对于非常大的文件,这可能会导致内存溢出。此外,一次性处理大量数据也增加了CPU负担。因此,对于大数据文件,这种方法的效率较低,且可能因内存限制而无法处理。
123456789101112$filename = 'path/to/your_file.txt';$fileContent = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // 去除换行符并忽略空行// 使用array_map处理每一行,按逗号分割$data = array_map(function ($line) { return explode(',', $line);}, $fileContent);// 合并为一维数组并去重$flat ...
php使用Google Authenticator (Google2fa)进行二次验证
什么是 google2fa?Google2FA 是 Google Authenticator 的简称,是一种基于时间的一次性密码(TOTP)算法,用于实现双因素身份验证。双因素身份验证通过要求用户除了输入密码外,还需提供另一个因素(通常是生成的一次性验证码),以提高账户的安全性。
Google Authenticator 生成的验证码是基于时间的,每隔一段时间就会生成一个新的验证码。用户在登录时需要输入当前时刻生成的验证码,以验证其身份。
Google2FA 库是一个用于 PHP 的库,可以帮助开发人员轻松地集成双因素身份验证功能到他们的应用程序中。通过 Google2FA,开发人员可以生成密钥、生成二维码供用户扫描、验证用户输入的验证码等操作,从而实现安全的双因素身份验证。
为什么要使用 google2fa?使用 Google2FA 或类似的库可以为应用程序增加额外的安全层,防止未经授权的访问和保护用户数据安全。这种双因素身份验证在许多网站和应用程序中被广泛采用,以提高账户的安全性。
在 php 中使用
默认环境: php8.0
要求环境:php7.1+
1、安装google2fa ...
layui流加载 终止flow.load(),执行第二个流加载时禁止上一个流加载执行
layui流加载 终止 flow.load()思路是当点击事件触发时,把 ul 移除,绑定的事件移除,重新加载 ul,相当于把之前的删除重新加载了flow.load。
123主要代码是:$("#demo").remove();$(document).unbind(); //把容器的事件解除绑定
1234567891011121314151617181920212223242526272829303132//初始化流加载getAjaxData();function getAjaxData (){ layui.use('flow', function(){ var $ = layui.jquery; //不用额外加载jQuery,flow模块本身是有依赖jQuery的,直接用即可。 var flow = layui.flow; flow.load({ elem: '#demo' //指定列表容器 ,done: function(page, next){ ...
使用 Frp 为你的 Web 服务添加 https 支持
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
本教程是根据 ftp-win 客户端 3.*版本
下载 frp前往 GitHub 下载 frp:
Releases · fatedier/frp
有适用于各种不同操作系统的 frp,如果你对外提供的公网服务器和实际提供 Web 服务的服务器不是同一台机器的话,需要为各自机器下载对应版本的 frp。
准备好 Web 服务和 SSL 证书你可以用任何方式开发你的 Web 服务,注意你的 Web 服务需要监听一个本机端口。
对于本文的后续内容,你需要将证书导出成 Nginx 格式,即一个 .pem 文件和一个 .key 文件。
配置 frp配置 frps.ini123456[common]bind_port = 5443vhost_http_port = 80vhost_https_port = 443token = ******
配置代理 http编辑 frpc.ini
12345678910111213 ...