在 Laravel 中使用 Http::fake 模拟测试的最佳实践

Laravel 的 `Http::fake()` 不只是“把外部请求挡下来”这么简单,它还关系到测试速度、稳定性以及请求断言是否可信。本文从常见测试痛点出发,梳理 `Http::fake()` 的几种实用写法、适用场景,以及如何避免漏拦截请求。

在 Laravel 中使用 Http::fake 模拟测试的最佳实践

如何避免把用户输入直接拼接到 SQL 语句

避免 SQL 注入,关键不在转义技巧,而在彻底停止把用户输入拼进语句。文章从转义函数失效原因讲起,说明 PHP 与 Python 中参数化查询的正确姿势,并给出动态表名、列名和排序字段的白名单处理办法。

如何避免把用户输入直接拼接到 SQL 语句

PHP 如何重写 Trait 方法,并在新实现里调用原始逻辑

在 PHP 里,类方法会覆盖 Trait 同名方法,但这不代表原始实现就无法再用。本文围绕“重写后如何保留 Trait 逻辑”展开,重点讲清方法优先级、`as` 别名的实际写法,以及多 Trait 冲突下如何配合 `insteadof` 一起处理。

PHP 如何重写 Trait 方法,并在新实现里调用原始逻辑

PHP 日志中的超时怎么解决

PHP 脚本执行超时并不只靠把时间上限调大来解决。处理这类问题,通常要先分清是临时放宽执行时间、单脚本例外,还是代码和任务模型本身存在瓶颈;按这个顺序排查,才能避免反复超时。

PHP 日志中的超时怎么解决

PHP 里的 self 和 static,到底差在哪?

PHP 里的 `self` 和 `static` 看起来只差一个关键字,实际对应的是两套完全不同的绑定规则。搞清它们在实例化、静态调用、继承场景里的行为差异,才能判断什么时候要固定返回父类,什么时候要把结果留给子类扩展。

PHP 里的 self 和 static,到底差在哪?

Ubuntu 上 PHP 性能瓶颈主要出在哪

Ubuntu 上的 PHP 性能问题,通常不是单点故障,而是代码、数据库、PHP-FPM、缓存与系统资源共同叠加的结果。判断瓶颈时,重点要看 CPU 是否耗在脚本执行、数据库等待、进程调度还是 I/O 上,这样才能知道该先改代码、调参数,还是补缓存。

Ubuntu 上 PHP 性能瓶颈主要出在哪

PHP 日志报错怎么修复:从定位线索到复查验证

排查 PHP 日志报错,关键不是“看到错误就改”,而是先确认日志位置,再用文件名、行号和错误类型缩小范围。本文按实际处理顺序整理出一套简明流程,并补充常见报错的修复要点与复查习惯,适合在日常开发中快速套用。

PHP 日志报错怎么修复:从定位线索到复查验证

PHP-Casbin:把权限控制从硬编码判断改造成可维护的策略系统

PHP 项目里的权限控制,最怕的是把判断逻辑写死在业务代码里:角色一变、需求一加,权限代码就会在多个模块里反复修改。PHP-Casbin 的价值,在于把模型和策略拆开,用统一方式覆盖 RBAC、ACL、ABAC、多租户和 API 权限,让权限系统从“到处补判断”变成“集中配规则”。

PHP-Casbin:把权限控制从硬编码判断改造成可维护的策略系统

PHP-Casbin:现代化 PHP 应用的权限管理引擎

PHP-Casbin 是 Casbin 在 PHP 生态中的实现,核心价值不只是“能做权限判断”,而是把模型、策略和执行逻辑拆开,便于在复杂 Web 应用里持续演进。本文从 PERM 元模型、可选权限模型到多语言与框架集成,梳理它适合什么场景,以及为什么它在现代 PHP 项目里越来越常见。

PHP-Casbin:现代化 PHP 应用的权限管理引擎