在使用curl访问某https网站时,提示错误
curl: (60) SSL certificate problem: unable to get local issuer certificate
但是通过浏览器访问又是正常的,第一反应是服务器的CA列表需要更新了通过 curl.se更新了最新CA列表,但是问题仍然存在
在使用curl访问某https网站时,提示错误
curl: (60) SSL certificate problem: unable to get local issuer certificate
但是通过浏览器访问又是正常的,第一反应是服务器的CA列表需要更新了通过 curl.se更新了最新CA列表,但是问题仍然存在
Cloudflare 2022年推出了 电子邮件路由 功能,通过这个功能,我们可以直接在 cloudfalre 接收域名邮件,无需再申请其他第三方的域名邮箱服务。
关于该功能的开通已有多篇文章进行介绍,本文就不再赘述。
使用该服务时,可以选择开通 Call all 功能,将所有除自定义地址以外的邮箱,全部进行转发。
转发方式有两种,一种是转发至另一个邮箱,但这种方式有很大弊端。一是该方式仍需使用传统邮箱进行邮件接收,域名邮箱多用于客户服务方面,最好有一种编程的方式可以直接读取邮件。第二点,该方式依托第三方邮箱服务,服务商会对邮箱进行限制,如邮件过滤,登录验证,邮箱容量等,会导致邮件并不能 100% 到达。
第二种方式则使用 Cloudflare Worker 功能,将接收到的电子邮件通过 Worker 处理。结合自己开发的后端服务,将邮件存储到自己的服务器上,这样就可以通过编程的方式来获取邮箱。
Laravel 框架支持 db:seed
来填充表。相对应的,需要自己编写 DatabaseSeeder.php
文件。 如果填充文件行数少,或者可以利用工厂类生成会很方便。
但是有些数据是需要手动填写与组合的。例如:目录的组织,权限的组织,通用配置的组织。数据大,改动多,不易组织。
nuyfeng/make-database
可以直接通过数据库来生成 Seeder 文件,省去的繁琐的复制。
1 | composer require --dev nuyfeng/make-database //安装扩展 |
Dockerhub 在中国的访问速度不佳,我们通常需要使用代理来进行加速。
Windows Docker 是基于 WSL 运行的,并不是直接运行在我们的 Windows 系统之上。
通常我们设置代理会使用 127.0.0.1 作为代理的主机地址,但是在 WSL 中 127.0.0.1 已经成为了 WSL Linux 的回环地址,无法链接到运行在 Windows 上的代理服务。
安装 WSL 后,系统会生成一个虚拟的网卡:
打开 PowerShell (cmd), 输入 ipconfig
1 | PS C:\Users\program-03> ipconfig |
vEthernet (WSL) 就是 WSL 的默认地址,开启代理的局域网访问功能。
设置 Docker Proxy 为 http://172.22.144.1:10811
DcatAdmin 默认不提供固定表头的功能,可以通过自定义 CSS 来实现
本 CSS 来自 DcatAdmin 项目中另一个地方的样式。
将代码直接贴在需要固定表头的 Grid 即可。
1 | Admin::style(<<<STYLE |
其中 top 是我手动计算的,可能要根据实际高度自行修改。或者有自适应的方法也欢迎提供。
效果如题所示:
VMware 克隆后,不会给机器分配新的IP,造成多个机器共用处理的IP。需要手动配置IP:
系统版本 : Ubuntu 20.4
编辑网络配置信息:
1 | cd /etc/netplan |
需要注意的是,配置文件名并不一定是一样的,需要替换成自己的。
编辑以下内容:
1 | # This is the network config written by 'subiquity' |
我的虚拟机用的是 NAT 模式,以上内容可以根据自己的配置替换。详细信息在 “导航栏->编辑->虚拟网络编辑器”
重启生效:
1 | sudo netplan apply |
Laravel 中,更新一个资源应该使用 PUT
方法。但是在实现中, FORM 表单只支持 POST
,GET
方法,在其中添加 _method
字段让 Laravel 将请求当作 PUT
,DELETE
等字段。
今天正常运行的系统突然无法更新数据,HTTP STATUS 405
提示信息为:
1 | The POST method is not supported for this route. Supported methods: GET,HEAD,PUT,PATCH,DELETE. |
由于这个错误提示的误导,我一直以为是路由出了问题,往这方面排查了挺长时间。
最终通过查看站点日志,发现 PHP 报错了:
1 | FastCGI sent in stderr: "PHP message: PHP Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0" while reading response header from upstream |
到此问题就很清楚了,报错的表单中有很多 checkbox
导致处于表单末尾的 _method
因为默认最大提交限制为 1000 的问题无法被系统接收到,从而导致系统无法根据 _method
项来用 PUT
方式处理 POST
请求。
处理方法也很简单,在 php.ini
中修改 max_input_vars
的值即可。记得要去掉配置项前面的 ;
符号,不然不会生效(我第一次更改后还是报错,以为不是这里的问题,检查后才发现值虽然改了,但是默认是注释状态)。
PHP8 - Named arguments 与 Constructor property promotion
PHP8 已于 2020-11-26 发布,这次带来了我们期待已久的 JIT 。但这篇文章主要讲讲新特性的理解与使用。
我们会在函数参数列表中使用默认值:
1 | function setUser(int $age, string $name, string $money = "0.00", int $sex = 0, $job = null) |
以前当我们想要使用 $money
的默认值并设置 $sex
的值时:
1 | setUser(12,"Lilin", "0.00", 1); |
$money
的值被我们显式的设置了,似乎使函数声明中的默认值“浪费了”
在 PHP8 中,我们可以根据参数名来设置参数的值:
1 | setUser(12,name:"Lilin", sex:1); |
我们可以通过指定参数名来设置对应的参数值,这么做的好处不仅仅可以使我们更方便的使用预设的默认值.代码不是一成不变的,在某一天我们需要维护上个月的代码,如果我遇到了这样的函数调用:
1 | getUserWith($userId, true, 5, 100, today(), true) |
CodeIgniter4 日期自动更新 useTimestamps
在 CodeIgniter4 中,如果想要 Model
在创建及更新数据时自动更新对应的日期字段,可以使用 useTimestamps
。但是有很多人会遇到遇到一些问题,其中最主要的问题是数据库字段与数据内容不匹配导致的。我们在设置了 $useTimestamps = true
后,往往忽略了与之配套使用的字段 dateFormat
。
一般的,我们在数据库中存储时间使用时间戳,我一般设置为 int UNSIGNED
。大多人也是如此,在 CI4 中 dateFormat
的默认值为 datetime
1 | case datetime: |
默认的日期格式为 2020-05-09 12:12:12
如果我们的数据会为 int
则数据会存储被为 2020
,后边的信息无法存储。
所以我们需要将日期格式设置为 $dateFormat = int