php教程技术文章
-
PHP 8.4 的属性钩子让属性可以只有 get 逻辑,但反射遍历时不能再把所有属性都当作有存储空间。本文用 ReflectionProperty::isVirtual 区分虚拟属性、带存储的 hooked 属性和普通属性,并给出兼容旧版本的检测边界。438 收藏 -
PHP DatePeriod 默认排除结束日期。本文区分 PHP 8.2 起的 INCLUDE_END_DATE、结束日期不对齐时的手动补齐,以及旧版本兼容和重复日期检查。434 收藏 -
用 PHP Fiber 把一个长任务拆成可暂停的执行段,演示 Fiber::start、Fiber::suspend、Fiber::resume 与 Fiber::getReturn 的调用关系、返回值边界和异常处理。433 收藏 -
从 PHP-FPM 进程池耗尽的真实信号出发,解释 pm.max_children、慢日志和入口限流如何配合,给出可灰度、可回滚的排查与改造步骤。430 收藏 -
批量导入并不总是适合一条失败就回滚全部数据。本文用 PHP PDO 和 MySQL 演示 SAVEPOINT 的局部回滚写法,说明保存点命名、异常处理、释放保存点与最终提交的边界。430 收藏 -
PHP 用 fputcsv 导出 CSV 时,Excel 出现乱码、列错位或引号异常,通常不是数据本身坏了,而是分隔符、转义字符和 UTF-8 BOM 没有与打开方式对齐。本文用可复现代码拆开这些边界,并给出导出后的验收办法。428 收藏 -
PHP 的 [] 和 list() 解构能让数组取值更短,但缺失键会得到 null 并触发告警,数字索引与关联键也不能混用理解。本文用订单输入示例拆开映射、默认值、校验和 foreach 的边界。427 收藏 -
用 PHP stream_context_create 为 HTTP 请求设置超时、重定向上限和失败响应读取规则,再通过响应头与状态码完成可复现验收。427 收藏 -
PHP 的 stream_get_contents 会从当前资源指针继续读取;第一次读到 EOF 后,第二次自然得到空字符串。本文用 PHP 内存流说明指针位置、offset 参数、rewind 与 feof 的关系,并给出可复查的读取写法。424 收藏 -
讲清 PHP SplFileObject 读取文件时末尾换行、空行与 EOF 占位的区别,并给出跳过或保留空行的标志组合与判断方法。418 收藏 -
用 PHP 和 PDO 设计一个可恢复的大文件上传流程,讲清分片命名、哈希校验、临时文件隔离、合并与失败清理的边界。415 收藏 -
PHP 报 Allowed memory size exhausted 时,先区分单次峰值、批量数据过大和长期增长,再用 memory_get_usage、memory_get_peak_usage 与分段日志定位,最后验证回收和配置边界。413 收藏 -
PHP CLI 程序处理管道或重定向输入时,逐行读取适合大多数文本任务,但 EOF 判断、空行和大文件内存边界很容易写错。本文从 fgets(STDIN) 入手,整理逐行、整流和可控批量读取的选择,并给出可验证的退出条件。411 收藏 -
DOMDocument 解析不可信 XML 时,默认不要打开实体替换和外部 DTD 加载;用 LIBXML_NONET 限制网络访问,并按 PHP/libxml 能力补充 LIBXML_NO_XXE。本文给出安全的最小配置、遗留 DTD 场景的隔离方式和升级检查清单。409 收藏 -
PHP CLI 长任务不应靠强制终止收尾。本文用 pcntl_signal 接住 SIGTERM,在批处理检查点记录停止请求,区分当前批次完成与进程退出,并给出可回滚、可验证的部署处理方式。408 收藏