保姆式 Win10 + IIS 10 + SQL Server 2017 部署 Laravel 教程
简介做了个知识库管理系统,开发时服务器使用的是宝塔LAMP架构,结果开发完要求部署到客户的服务器上。客户的服务器架构是 Win10 + IIS 10 + SQL Server 2017。折腾了一整天,终于装上了,这里记录一下。
依赖
项目 Laravel 依赖项 (5.5)
PHP >= 7.0.0
PHP OpenSSL 扩展
PHP PDO 扩展
PHP Mbstring 扩展
PHP Tokenizer 扩展
PHP XML 扩展
redis
用来存token
IIS 10
Url Rewrite 模块
fastCgi 模块
SQL Server 2017
环境搭建服务器采用阿里云购买的windows Server 2019,在阿里云面板安装成功后,通过 windows 远程桌面连接。由于windows Server版的浏览器安全配置,无法下载文件,且修改配置较麻烦,建议后续需要下载的文件全部先在本机下载完成后通过远程桌面上传。
安装 IIS 10
点击开始-服务器管理器
点击添加角色和功能
点击下一步
选择基于角色或基于功能的安装,点击下一步
...
PHP 如何在数据库中保存密码
简介在数据库中存储密码是非常常见的需求,但是直接在数据库中保存明文密码明显是不合适的。万一数据库泄漏,攻击者能拿到所有的帐号密码信息,所以,存在数据库中的密码必须加密,且这种加密必须是单向的。即正向运算很简单,但反向运算基本不可能。例如告诉你两个很大的素数,要你计算他们的乘积很简单,但是反过来,告诉你一个大数,要你求解出他是由哪两个大素数乘起来就很难。
关于本文内容,在 php 官方文档 上也有对应描述。本文讲解的是我个人的理解。
加密算法直接使用单向散列算法(md5,sha1),仍会存在隐患。这种算法最大的缺陷就是同样的内容加密后输出结果相同。有很多用户都是使用弱密码的,比如123456之类这种,那破解者只要算出123456的密文是多少,然后数据库里所有存储都是这个密文的人的密码就都是123456。为此很多人会在密码基础上拼一个随机字符串再计算md5,这个方式虽然提高了一定的安全性,但增加了各流程的复杂度,且php本身已经提供了这种解决方案。
用password_hash保存密码php 官方提供了一个password_hash函数,具体文档可以查看 文档。
函数原型
1passw ...
laravel 定时任务生成root权限日志导致应用崩溃
问题开发一个培训报名系统,需要定时关闭订单,发送上课通知等操作,于是接入了 Laravel 的定时任务。但实际运行时,出现 Laravel 无权限写入日志问题,导致应用异常崩溃的问题。
原因服务器采用的是 linux,Laravel 定时任务是直接以 root 用户的身份执行的,而定时任务执行时创建了新日志文件,新文件的权限是 -rw-r--r-- 1 root root,这样的权限配置使得正常运行项目的 www 用户无法写入此日志文件,导致错误。
解决方法经过多方查询,最后采用命令 sudo crontab -u www -e 以 www 用户身份配置定时任务解决问题。
Laravel 利用 doctrine/annotations 在注解中实现角色权限控制
基本术语项目中基于常见的角色和权限方式实现权限控制,下面介绍一些术语。
用户
登录使用系统的自然人
角色
系统中用户的身份,比如管理员,普通用户,不同的角色权限不同,同一用户可以有任意多个角色
权限
用户行为,具体为做某件事的能力,有权限即能做此事。一个角色可以有任意项权限,拥有多个角色的用户即拥有这些所有权限的并集。
简单用法本文实现的权限控制只要是针对API进行权限控制,控制力度分3级。具体的实现方法是在控制器的方法注释中添加注解。注解会在 Laravel 的中间件中被读取,然后判断是否有权限。没有权限则会返回统一的报错。
以下是三级力度的控制方法。
公开API,未填写权限注解的是公开API,无需登录即可访问 123456789/** * 获取icp备案号 * @param Request $request * @return \Illuminate\Http\JsonResponse */public function icp(Request $request){ ...}
登录后才可访问的 API,@Permission()注解指定 ...
记一次与大数据局对接的奇葩经历
背景交代本地政府单位有一份补贴人员名单,每个月需要向这批人的银行卡发放补贴,直至其离世。
实际发放过程中发现有些人已经离世半年多了,却还在一直给他发补贴,造成了财政的浪费。而人员离世,其家属并不会通知政府,所以政府无法第一时间得知其是否离世。经过调查发现,人员离世,殡仪馆一定会得知此消息,故决定做一个系统,录入人员信息,同时对接殡仪馆的接口,定期查询人员是否离世。
项目成功做完上线了。
故事开始某天,业主单位转发了本地大数据中心发送的实名制数据调用整改要求,大致意思是,你的应用调用了用户的隐私信息,为确保用户信息安全,要求在调用用户信息前需进行实名认证。
接到通知后,因为资料和要求不完整,故开始了漫漫的求问之路。主要是两个问题:1.我这个应用为什么要实名制,这个就是部门内部用用的系统2.实名认证要怎么限制,用户在登陆系统对登陆账号实名认证,还是要求被查询的人实名认证
先打电话问本地大数据中心,本地大数据中心说,他只是转发市里的要求,他也不太清楚,他也在问,这个东西是从省里下来的,必须要做,省里有个答疑的群,可以先拉你进去。
入群后开始咨询,阐述上面的两个疑问,经过确定,对方认同我的应用 ...
Layui 自定义打印
基础应用Layui 的 table 模块提供了基础的打印功能,能够满足大部分的基本打印需求。只需要两行简单代码,即可开启Layui table模块提供的打印功能:
1234567891011layui.use('table', function() { const table = layui.table; table.render({ elem: '#default_table', ... toolbar: true, // 开启表格头部工具栏 defaultToolbar: ['filter', 'print'], // 指定工具栏内容为列配置,打印 cols: ... })})
以上配置渲染的列表:
点击上图中1的按钮,可以选择只显示部分列表。
点击上图中的按钮2,Layui 构建一个新页面,仅包含内部的表格内容。
至此 Layui table 模块介绍的简单打印功能说明完毕。
扩展 Layui table的打 ...
mysql 创建新用户,同时创建同名数据库并赋予所有权限
服务器新建站点时,经常会要求新建一个数据库帐号,并新建与帐号同名的数据库,并赋予所有权限,在此记录下使用的代码。
12345678910111213141516171819202122232425262728[root@ecs-2c24 ~]# mysql -u root -pEnter password: Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 251978Server version: 5.6.43-log MySQL Community Server (GPL)Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respect ...