如何在 PHP 中用注释声明数组的结构
在开发过程中我们常常会遇到这样的注释: /** * 某某方法 * @param array $data * @return void */ // ... /** * @var array $data */ 这种注释就叫做 PHPDoc,很久以前我也介绍过 —— 《PHP注释的艺术——phpDoc规范》不过早期规范只能用来描述一些基本变量类型 有时候数组中会有一些相对固定的键,或者是更加复杂的结构,但是场景又没有复杂到需要用结构类的程度。这时你可能会希望用注释的方式说明这个数组的结构方便日
Laravel 功能测试中发起多次请求(经过自定义 Guard)时的坑
TL;DR laravel 会缓存 guards,如果你在 guard 中对 $request 做了一些操作,则需要在每次请求前 Auth::forgetGuards(); 正文 这个项目用到一个自定义 Guard,里面有这么一行代码: $this->request->attributes->add(['company' => $company]); 也就是在身份校验通过后往请求里面写入一个变量,方便后续在控制器中读取 在这个功能测试中我需要切换多个身份请求同一个接口,我发现只有第一个身份的请求正常,
Laravel 功能测试中设置请求 Cookie 的方法
TL;DR $this->withUnencryptedCookie('cookie_name', $cookieValue) ->withCredentials() 正文 在功能测试中,我们通常要使用 $this->postJson() 系列方法来测试接口,在此之前只要用 $this->actingAs() 即可解决登录态的问题 不过这次要测的接口比较特别,需要往 cookie 中塞 token 来维持登录态 我简单看了一下 postJson() 的源码,第三个参数名叫 $header。噢,我
老博客迁移上云(kubernetes)全过程 + 踩坑实录
🥰 当你看到这篇文章,就说明我的博客上云成功啦~ 前言 上一次迁移服务器时,感觉 vultr 韩国还不错。过了大概一年多发现访问量大减,还以为是我摸鱼更新太慢导致的流失(当然这也是很重要的原因) 偶然有一次没挂梯子访问自己的博客,发现慢的吓人。一测,好家伙,这延迟、这丢包、这带宽……没救了没救了 我的网站 PHP 运行环境从最早的虚拟主机、lnmp.org 再到 宝塔,一直都是本地运行。kubernetes 其实在工作中已经接触过一段时间了,但都只是学了点皮毛基础,用用腾讯云搭建好的环境、在网页后台点
让我虚惊一场的 PDF “XSS 漏洞”
手上负责的一个项目收到了一份来自外部的漏洞报告,演示了一个跟鉴权有关的 bug (此 bug 与上传文件无关,这里原本就是允许用户上传文件的) 这个 bug 不是什么疑难杂症,很快就修好了。反倒是报告最底下的补充说明让我大吃一惊: 并且可上传 xss 文件进一步扩大危害,可诱导成员点击进一步获取 cookie 等信息 什么?pdf 居然支持嵌入 js!?而且浏览器还会执行!? 完了完了,居然有这么严重的问题,要知道用户上传的文件都存在一个二级域名指向的静态存储里。要是有哪个 cookie 的 dom
Docker networks aliases 不生效的解决方法
背景 我本地开发用的 php 和 nginx 都部署在 docker 中,宿主机为 MacOS 宿主机中 hosts 一个域名 127.0.0.1 abc.test,再把 nginx 容器的 80 端口映射出来。就能正常通过 abc.test 访问到 nginx 再转发给 php 看起来很完美,直到 —— 我需要在 php 中访问 abc.test 这个站点的时候 当我在 php 容器中需要解析这个域名时(例如 curl、wget),会调用到宿主机中的 hosts 文件,返回一个 127.0.0.1。导致
Windows 10 Docker 基于 WSL 2 时读写性能的坑
Windows 10 启用 WSL 2 Windows 10 启用 Hyper-V 虚拟机 首先到 Docker 官网下载一个 Docker Desktop Windows 安装包 https://www.docker.com/get-started 这有官方的安装教程 https://docs.docker.com/docker-for-windows/install/ 安装过程中你会发现它一直在引导你启用 WSL 2,并表示基于 WSL 2 的 Docker 相比基于 Hyper-V 而言拥有各种
Windows 10 启用 WSL 2
什么是 WSL 和 WSL 2?微软官方中文文档有详细介绍 https://docs.microsoft.com/zh-cn/windows/wsl/about Win10 家庭版也支持 WSL2 所有设置 - 搜索 - 启用或关闭 Windows 功能 勾选 适用于 Linux 的 Windows 子系统 及 虚拟机平台,点击确认,稍等片刻后提示你重启电脑 重启后,点击这里 下载微软提供的 Linux 内核更新包 装完内核更新包后,在命令行输入 wsl --set-default-versio