php教程技术文章
-
用 PHP 的 Throwable、getPrevious() 和统一异常边界,把底层 PDO 错误留在服务端日志,同时向客户端返回安全、稳定的错误响应。203 收藏 -
关闭 OPcache.validate_timestamps 能减少文件时间戳检查,但发布时必须主动处理缓存。本文用版本目录、文件级失效、FPM 重载和健康检查,整理一套可回滚的 PHP 发布顺序。201 收藏 -
文章 · php教程 | 3天前 | 网络编程 · 故障排查 · php教程 · 流处理 · eof PHP stream_set_timeout stream_get_meta_data timed_out
PHP stream_set_timeout 不会直接抛出超时异常,读取后应紧接着用 stream_get_meta_data 检查 timed_out,再结合 feof 和读取返回值区分超时、EOF 与读取错误。199 收藏 -
文章 · php教程 | 5天前 | 反射 · attribute · php教程 · 配置校验 · php8 · php Attributes TypeError Attribute ReflectionAttribute newInstance
PHP Attribute 参数传错时,应把类型写进属性构造函数,并在配置加载阶段调用 ReflectionAttribute::newInstance(),让 TypeError 或业务校验异常在服务启动前暴露。本文给出属性定义、反射过滤、异常上下文和常见边界的完整写法。194 收藏 -
PHP 反射读取 readonly 属性并不等于可以随意处理属性:isReadOnly() 只看声明,isInitialized() 才能判断当前对象是否已有值。本文整理 PHP 8.1 之后的读取边界和迁移写法。194 收藏 -
PHP Fiber 挂起后,调用方可以用 Fiber::throw() 把异常注入当前 Fiber::suspend();本文用代码说明 Fiber 内部捕获、调用方兜底、状态判断和 getReturn() 的边界,并对比 Generator 的调用栈差异。193 收藏 -
PHP PDO 一个占位符不能直接展开数组。本文解释 IN 查询绑定失败的原因,给出动态生成占位符、处理空数组、复查参数数量与异常模式的安全写法。186 收藏 -
登录成功后应轮换 PHP 会话 ID 来防止会话固定,但不宜用 session_regenerate_id(true) 立即删除旧数据。本文用保留窗口、旧 ID 标记和严格模式解释怎样避免移动网络或并发请求导致刚登录就掉线。186 收藏 -
文章 · php教程 | 3天前 | 字符串 · 字符编码 · php教程 · mbstring · php encoding UTF-8 mb_substr mb_internal_encoding
PHP 中统一处理中文字符串时,mb_internal_encoding 负责提供 mbstring 默认编码,mb_substr 的 encoding 参数只覆盖当前截取调用。本文用 UTF-8、混合输入和 PHP 8 异常边界说明两者怎么选择。177 收藏 -
DateTimeImmutable 的 setTimezone() 不会改原对象,而是返回保留同一时间点的新对象。接住返回值,再按目标时区格式化,才能让订单、报表的业务日期稳定可控。175 收藏 -
PHP Generator 的 yield 用于逐条输出数据,return 用于返回最终汇总;本文说明如何在迭代结束后通过 getReturn() 安全取值,并解释提前读取、空返回和 yield from 的边界。157 收藏 -
PHP 的 array_is_list() 不支持通过配置放宽条件;它只认从 0 开始且按顺序无缺口的整数键。本文用键检查定位 unset 和 array_filter 造成的断档,并说明何时用 array_values() 修复列表形状。157 收藏 -
PHP backed enum 默认把 value 编码为 JSON 标量,纯 enum 不能直接编码;本文用示例说明如何用 JsonSerializable 固定 code、label 等接口结构,避免 case 重命名破坏兼容性。151 收藏 -
DateTimeImmutable 用 modify('+1 month') 修改月底日期时不会自动截断到目标月末,而是按相对日期规则继续归一化。本文解释月份溢出的原因,并给出月底对齐、显式日号校正和回归测试写法。147 收藏 -
文章 · php教程 | 16小时前 | PHP · curl · HTTP客户端 · 连接复用 · 安全边界 · php Curl curl_share_init_persistent CURL_LOCK_DATA_DNS CURL_LOCK_DATA_CONNECT
PHP 8.5 的 curl_share_init_persistent 可以跨请求复用 DNS、连接和 TLS session,但不能共享 Cookie。把网络缓存与用户身份分开,才能降低连接复用带来的跨请求状态泄漏风险。132 收藏