php教程技术文章
-
PHP Fiber 只负责暂停和恢复调用栈,不会把 file_get_contents 等阻塞 I/O 自动变成异步。本文从 suspend、resume、throw 的契约出发,说明如何让事件循环在流可读时恢复 Fiber、在超时或错误时抛出异常,并划清单线程协作式切换与真正并行的边界。176 收藏 -
DateTimeImmutable 的 setTimezone() 不会改原对象,而是返回保留同一时间点的新对象。接住返回值,再按目标时区格式化,才能让订单、报表的业务日期稳定可控。175 收藏 -
PHP readonly 锁住的是属性重新绑定,不会自动冻结对象内部状态。本文用最小示例拆开重新赋值、内部修改、克隆和版本差异,帮助你为只读对象选择正确的封装边界。175 收藏 -
文章 · php教程 | 3星期前 | 工程实践 · php教程 · php redis Symfony Cache 缓存标签 TagAwareCacheInterface invalidateTags
Symfony Cache 的标签失效适合处理一个业务对象对应多个缓存键的场景。本文从直接删除、标签失效与 TTL 的边界出发,说明怎样设计标签、配置 TagAwareCacheInterface,并把失效动作放到稳定的写路径中。175 收藏 -
用 Throwable::getPrevious() 逐层整理 PHP 异常链,示范包装异常、结构化日志和敏感信息脱敏的实用写法。175 收藏 -
PHP curl_multi 适合把多个 HTTP 请求放进同一批次,但并发数、超时、句柄回收和失败重试必须一起设计。本文用一个可控批处理示例讲清请求收敛和验收边界。174 收藏 -
PHP 8.4 的 array_find 会按顺序返回第一个满足回调条件的数组值。本文说明值与键的回调参数、null 歧义、array_find_key 的配合方式,以及旧版本兼容写法。174 收藏 -
从一个可回滚的 PHP-FPM pool 小配置出发,说明 pm 模式、进程上限、慢日志与请求超时如何配合,避免只调大 pm.max_children。174 收藏 -
讲清 PHP PDO 处理可变长度 IN 查询时的占位符生成、数组绑定、空数组策略和参数边界。174 收藏 -
从 pm.max_children、static/dynamic/ondemand、状态页、慢日志和 pm.max_requests 五个角度,说明 PHP-FPM worker 并发的容量边界与小步调参方法。172 收藏 -
Composer 插件会在 Composer 运行时改变安装、下载或命令行为。本文比较 allow-plugins 的精确白名单、组织通配符、全部允许和全部禁止策略,给出适合项目、CI 与生产环境的配置边界。170 收藏 -
PHP 8.2 起可以用 #[SensitiveParameter] 标记密码、令牌等参数,让它们在异常堆栈中以 SensitiveParameterValue 代替原值。本文按现象、证据和边界说明怎样排查配置是否生效。170 收藏 -
PHP 使用 ZipArchive 打包文件时,把 addFile 的第二个参数设为相对 entryname,就能去掉服务器目录前缀;本文进一步说明递归目录、路径分隔符、文件可读性和 close 失败的处理方式。168 收藏 -
PHP 文件上传不能只看文件名后缀,应在保存前同时检查上传错误码、服务端文件大小、扩展名白名单和 Fileinfo 检测出的 MIME,并使用随机文件名与 move_uploaded_file 落盘。本文给出完整处理器、表单接入和验收清单。167 收藏 -
PHP Fiber::throw() 的关键不是从外部直接改写协程代码,而是在 Fiber 已挂起时,把 Throwable 重新交给当前 Fiber::suspend() 调用点。本文用一个可取消的协程调度场景说明挂起门槛、异常捕获、FiberError 和终止状态之间的关系。166 收藏