记录一下使用Intervention\Image压缩图片安装扩展composer require intervention/image
确保php安装了GD库或者 Imagick才可以使用,默认使用Gd库
使用use Intervention\Image\Facades\Image;//打开图片文件()$img = Image::make('public/foo.jpg')//按宽300,等比缩放图片$content = $img->resize(300, null, function ($constraint) { $constraint->aspectRatio(); })->stream();
方法使用
make(资源) :支持二进制流、文件流、base64文件流、文件绝对路径、Gd库文件资源、Imagick文件资源等。具体可看下面代码
resize(宽,高,闭包):重置大小。宽高两个参数为整数,闭包支持下列两方法:
function ($constraint) { $constrain ...
使用MetingJS实现在任意地方使用外链播放器,在需要使用的地方插入如下html即可
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css"> <script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script><meting-js id="000owF6o3sHj50" server="tencent" type="song"autoplay="false"loop="all&quo ...
使用github搭建图床,并使用jsdeliver加速github设置
在github中新建一个公开仓库,仓库名称随意
在github的设置中添加 私人令牌token,令牌在后面使用PicGo作为图床客户端时有用
token名字随便取,要勾选repo项。token有效期如果不考虑安全性可以选不过期,然后创建即可。记得保存好token,只有生成时可见。
使用jsdelivr进行cdn加速
国内访问github难免会慢或者无法访问,使用jsdelivr加速一波
使用jsdelivr官网里github选项的这一条。
无需什么配置,只需把链接中user换成github用户名,repo换成仓库名,version换成分支名称,file换成图片在仓库中的路径即可,例如https://cdn.jsdelivr.net/gh/ashin33/alon-images@master/images/south_country.jpg
使用PicGo作为图床客户端PicGo下载地址
PicGo设置
在PicGo中选择Gith ...
php# 添加源sudo apt -y install software-properties-commonsudo add-apt-repository ppa:ondrej/php# 更新源sudo apt update# 安装php8.0-fpmsudo apt -y install php8.0-fpm# 安装扩展sudo apt install -y php8.0-{bcmath,bz2,intl,gd,mbstring,mysql,zip,gd,curl,imagick,xml,redis}# 检查php配置是否有误sudo php-fpm8.0 -t# 重启phpsudo service php8.0-fpm restart#查看当前安装了哪些版本的PHPdpkg -l | grep php
nginxsudo nginx=stable sudo add-apt-repository ppa:nginx/$nginxsudo apt updatesudo apt install nginx#启动nginxsudo systemctl start ng ...
创建模板stub
建一个stub模板,用于下面使用
在resources下新建stubs目录用于存储新建一个query-download.stub
<?phpnamespace DummyNamespace;use App\Exports\QueryExport;class DummyClass extends QueryExport{ public function headings(): array { //表头 return [ // ]; } public function columns($row): array { //每一列的数据 return [ // ]; } public function stringColumns(): array { //要转为字符串的列标 return [ ...
nginxnginx请求域名转发server { listen 80; ## 请求的域名 server_name aa.com; proxy_buffer_size 1024k; proxy_buffers 16 1024k; proxy_busy_buffers_size 2048k; proxy_temp_file_write_size 2048k; location / { ## 实际请求的域名 proxy_pass bb.com; }}
ssl证书更换
进腾讯云ssl证书控制台下载nginx证书
进入ssl目录替换证书文件(具体ssl目录看nginx配置的ssl路径)
nginx -s reload
linux杀掉端口占用进程netstat -tunlp | grep 端口号 # 查询占用的端口的进程idkill -9 进程id
服务器时间校准# 安装ntpyum install ntp# 校准时间ntpdate cn.pool.ntp.org
根据文件大小 ...
What’s RESTfulRESTful 是一种软件设计风格,由 Roy Fielding 在他的 论文 中提出,全称为 Representational State Transfer,直译为表现层状态转移
使用RESTful的优势
安全可靠,高效,易扩展。
简单明了,可读性强,没有歧义。
API 风格统一,调用规则,传入参数和返回数据有统一的标准
设计规范域名
域名应尽量使用https协议,可使用certbot制作免费https证书,后面研究一下
api应与主域名区分开,使用专用域名(.eg: https://api.alon.wang)或者放在主域名下(eg:https://alon.wang/api)
版本迭代随业务的发展,api大概率会发生迭代,为了保证新老用户的使用,应控制好版本.实现方法
版本号加入URL中
https://alon.wang/api/v1https://alon.wang/api/v2
使用HTTP请求头的Accept来进行区分
https://alon.wang/api/ Accept: application/prs.alon ...
安装官方文档
安装composer包composer require spatie/laravel-permission
配置
生成迁移文件php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
运行迁移命令php artisan migrate
生成配置文件php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
用户模型需使Spatie\Permission\Traits\HasRoles,如果使用了其他guard,还需设置guard_name属性
如果要扩展Role和Permission模型,需要继承扩展包的Spatie\Permission\Models\Role和Spatie\Permission\Models\ ...
emmmmm,发现一个问题;如果jwt过期时间设为2小时,则为绝对意义上的2小时,而不是用户无操作之后的2小时,这是为了保证token的安全,防止token被窃取后,一直使用,永远不过期。所以要用 JWTAuth::parseToken()->refresh() 刷新token,返回给前端;当然也可以设置无过期时间
jwt简单了解jwt全称json web token,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519)。特别适用于分布式站点的单点登录(SSO)场景。
jwt认证流程
客户端表单提交用户认证信息发送到服务端
服务端验证用户信息,生成jwt(包括header,payload,signature),jwt的组成后面再具体研究
服务端返回token给客户端
客户端存储token,并在后续每次请求服务端时在Http请求的header中的Authorization中上送token,(也可不放在header中,但建议在header中上送,保证安全)
服务端收到请求,验证jwt,然后处理业务逻辑返回结果
jwt认证与session认证的优 ...
最近一直在面试,发现redis的知识还是太薄弱了,慢慢梳理一下。
redis为何物redis是基于内存的可持久化的key-value型数据库。
redis的优点
读写速度快
支持持久化(AOF,RDB两种方式)
支持事务
数据类型丰富(string,hash,set,zet,list)
支持主从,读写分离
redis的缺点redis数据类型
类型
数据类型
string
字符串,整数,浮点型
hash
有键值对的列表
set
字符串的无序集合,每个字符串都是唯一的
zet
有序集合,由浮点key和字符串值组成
list
list链式表,每个节点上都一个值
string
获取值 get key
设置值 set key
删除值 del key
自增 incr key
按值自增 incrby key
hash
设置值(可同时设置多个,空格分隔)hset key field1 [field2]返回入库条数
获取值hget key field,返回值
获取所有值hgetall key,返回所有键值
删除值(可同时删除过个)hdel key field1 [ ...