PHP 格式化输出:用 `ddp()` 改善 `var_dump` / `print_r` 的浏览器可读性
PHP 自带的 `print_r` 和 `var_dump` 虽然好用,但直接输出到浏览器时可读性往往很差。本文基于一个改造过的 `ddp()` 函数,拆解它如何通过输出缓冲、换行清理和 HTML 转义,让调试信息更适合网页查看,也说明参数分别解决了什么问题。
PHP 自带的 `print_r` 和 `var_dump` 虽然好用,但直接输出到浏览器时可读性往往很差。本文基于一个改造过的 `ddp()` 函数,拆解它如何通过输出缓冲、换行清理和 HTML 转义,让调试信息更适合网页查看,也说明参数分别解决了什么问题。

PHP 项目里出现“headers already sent”时,问题常常不是 session 本身,而是文件开头混入了 UTF-8 BOM。本文结合一段可直接使用的递归脚本,说明 BOM 为什么会触发报错、脚本如何批量检查并清除 BOM,以及使用这类脚本时要注意的边界和风险。

PHP 7.1 之后,老牌的 mcrypt 已经进入废弃阶段,继续依赖 `mcrypt_module_open()` 会让升级和部署都变得更麻烦。本文结合 PHP 手册给出的迁移方向,整理出用 OpenSSL 实现 AES 加解密的替代写法,并说明这段代码适合什么场景、迁移时要注意哪些点。

这篇文章把零散的 PHP 学习资源重新整理成一份可直接上手的入门导航:先分清编辑器与 IDE 的使用场景,再看主流 MVC 框架的定位,最后补上常见视频学习平台,方便新手按工具、框架和课程三条线建立学习路径。

CentOS 上 PHP 日志暴涨,通常不是单一问题,而是“保留策略缺失”和“记录级别过细”叠加造成的。处理时可以从日志轮转、手动清理、调整 PHP 日志级别三条线入手:先止住空间占用,再把后续增长速度降下来。

ThinkPHP 5 做域名绑定后出现控制器 404,很多时候并不是路由规则写错,而是请求根本没有进入 `public/index.php`。这篇文章按“先确认入口、再查站点根目录、再看路由与 PATH_INFO”的顺序梳理排查思路,帮助你快速判断问题究竟在 Web 服务器、入口路径还是 TP5 自身配置。

PHP 日志配置不只是排障工具,也会直接影响磁盘占用和 PHP-FPM 响应时间。本文围绕 CentOS 常见运行环境,整理出日志级别、异步写入、轮转、存储方式以及 PHP-FPM 配置几个关键优化点,并给出可直接落地的配置示例。

ThinkPHP 5.0 控制器层的几类高危问题,本质都出在“路径可控、方法可改、参数缺少边界”三个入口。本文按漏洞成因拆开说明,并给出可直接落地的拦截、白名单校验和输入约束代码,便于在旧项目里快速补丁和排查。

ThinkPHP 做请求统计时,最常见的问题不是语法,而是并发下的幂等和计数准确性。本文围绕唯一键冲突、`ON DUPLICATE KEY UPDATE` 的正确写法,以及 Redis 预聚合是否值得引入,梳理一套更适合线上场景的处理思路。

ThinkPHP6 在执行 redirect() 后多语言失效,通常不是语言包没加载,而是 302 跳转触发了新请求,语言识别链路没有拿到 lang 标识。本文按根因、参数丢失、可行方案和配置陷阱四部分梳理,帮助你判断该用 Cookie 还是透传参数来稳住语言状态。

在 ThinkPHP 6 里,分页后搜索条件丢失,通常不是模板问题,而是分页器没有拿到完整查询参数。文章从控制器传参、模板渲染、0 值判断和前端分页组件配合四个常见坑入手,说明怎样稳定保留条件并实现页面回显。

在宝塔面板里给 ThinkPHP5 做二级域名绑定,真正决定是否生效的不是“把域名加进去”这一步,而是 TP5 的域名部署开关、`__domain__` 路由、DNS 解析、证书覆盖范围,以及 `/public` 运行目录与伪静态是否同时到位。本文按排查顺序梳理关键配置和常见误区。
