php教程技术文章
-
PHP backed enum 默认把 value 编码为 JSON 标量,纯 enum 不能直接编码;本文用示例说明如何用 JsonSerializable 固定 code、label 等接口结构,避免 case 重命名破坏兼容性。151 收藏 -
PHP 8.4 属性钩子适合集中处理单属性的清洗、类型边界和局部校验,但跨字段规则与数据库副作用不应塞进 get/set。本文用订单行示例拆分属性钩子、命名构造器和服务层的职责。233 收藏 -
PHP 多进程同时写同一文件时,用同一个独立锁文件配合 flock(LOCK_EX) 保护完整临界区;本文讲清 fopen 模式、ftruncate、LOCK_NB、读取共享锁和异常释放。474 收藏 -
PHP 文件上传时不要直接相信客户端 MIME 或文件扩展名,应读取服务器临时文件,用 finfo(FILEINFO_MIME_TYPE) 判断内容,再通过允许列表和安全命名完成保存。499 收藏 -
PHP 使用 ZipArchive 打包文件时,把 addFile 的第二个参数设为相对 entryname,就能去掉服务器目录前缀;本文进一步说明递归目录、路径分隔符、文件可读性和 close 失败的处理方式。168 收藏 -
PHP cURL 中,CURLOPT_CONNECTTIMEOUT 负责连接阶段,CURLOPT_TIMEOUT 负责整次请求;本文用秒级和毫秒级示例说明如何配置、诊断和选择预算。498 收藏 -
PHP 的 array_filter 会保留原数组键,被过滤的数字键形成空洞后,json_encode 会把这一层编码成 JSON 对象。本文用一个接口列表示例说明原因,并给出 array_values、嵌套数组和空结果的处理方式。132 收藏 -
PHP yield 通过暂停并恢复生成器,按需交出当前数据,避免在处理开始前构造完整数组。本文解释内存差异、逐条读取写法、资源清理和不能随机访问的边界。495 收藏 -
PHP 中需要保留原始时间对象时,应使用 DateTimeImmutable::setTimezone() 返回目标时区的新对象。本文用可复现代码说明显示时区、时间点、输入校验,以及它和可变 DateTime 的区别。184 收藏 -
PHP 登录时升级旧密码哈希,要先区分 password_hash 生成的哈希和历史自定义格式:前者验证成功后用 password_needs_rehash 判断,后者用原规则验证成功后立即改存 password_hash,并用旧值条件更新避免并发覆盖。125 收藏 -
PHP 同一用户的多个请求出现排队,常见原因是 session_start 持有会话锁。本文说明如何用 read_and_close 或 session_write_close 缩短锁范围,并处理关闭后的写入与并发覆盖。373 收藏 -
PHP 解析未加引号的 JSON 长整数时,可能因类型选择落入浮点数。本文用 JSON_BIGINT_AS_STRING 保留完整数字,并说明异常处理、数组返回和业务层字符串边界。220 收藏 -
PHP PDO 不能用一个占位符直接绑定 IN 条件中的数组。本文用位置参数和命名参数说明如何按数组长度生成占位符,并处理空数组、整数类型和动态字段边界。263 收藏 -
PHP 处理大 CSV 时用 fopen 和 fgetcsv 流式读取,按 [null] 识别空行,校验列数后逐条导入,避免一次性载入整文件。306 收藏 -
PHP GD 处理大图时,真正占内存的是解码后的像素面以及缩放时同时存在的源图、目标图。本文用像素预算、入口拦截、分阶段缩放和对象作用域,定位并降低缩略图处理的内存峰值。332 收藏