程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
PHP 相关技术文章(第2页)
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
PHP 8.6 批量弃用:31 项通过、4 项被否,先 grep 那几个保留标识符
编程
PHP 8.6 批量弃用:31 项通过、4 项被否,先 grep 那几个保留标识符
2026-10-29 21:02:35
PHP 8.6 的 35 张弃用选票投完:31 项通过、4 项被否。is/let/readonly/namespace 成为新保留标识符(Hamcrest 的 is() 也在其中),finally 里 return、SplFileObject CSV 方法、mysqli_get_charset 等在列;文末给出按类别拆开的 grep 排查命令。
PHP
升级
兼容性
PHP 8.6 改了 session 三个默认值:跨站 POST 的登录和支付回跳会先挂
编程
PHP 8.6 改了 session 三个默认值:跨站 POST 的登录和支付回跳会先挂
2026-10-29 20:01:15
PHP 8.6 把 session.use_strict_mode、cookie_httponly、cookie_samesite 三个默认值一次全改,调用点没有任何提示:自定义 save handler 丢 id、前端 JS 读不到 session cookie、跨站 POST(支付回跳、OAuth 回调)收不到 cookie。附 8.5/8.6 ini 对照、显式写回 SameSite=None + cookie_secure 的迁移写法,以及 DOM 属性反射、array_intersect 转换顺序、SplFileObject CSV escape 三处静默变化。实测基线 8.6.0RC3,GA 计划 2026-11-19。
PHP
session
安全默认值
升级迁移
支付接口
加密字段要支持子串搜索:trigram 盲索引能救 LIKE,但两个汉字搜不到
编程
加密字段要支持子串搜索:trigram 盲索引能救 LIKE,但两个汉字搜不到
2026-10-29 00:04:28
加密字段上 LIKE '%kw%' 查不了,整值 HMAC 盲索引只解决等值。这篇把子串检索这一层拆开:trigram 写窗口 + HMAC-SHA256 截断 128 位存 token 表、域分离前缀、Exact/Prefix(n)/Ngram(n) 三种形态的取舍、"'abcd' 与 'cdef' 共享 'bcd'" 这类假阳性为什么在密文侧消不掉、短于 3 字符直接跳过索引、异步重建带来的几分钟滞后、多 key 轮换时的双算,以及中文场景 n=3 失效要换 bigram 的代价。
盲索引
加密字段
可搜索加密
HMAC
trigram
MySQL
PHP
Go
PDO 连 MySQL 默认是模拟预处理:prepare 不报 1146,LIMIT '10' 却报 1064
编程
PDO 连 MySQL 默认是模拟预处理:prepare 不报 1146,LIMIT '10' 却报 1064
2026-10-29 00:03:49
PDO_MYSQL 默认用模拟预处理:prepare() 不与服务器通信,所以表不存在要到 execute 才报 1146;execute([10]) 拼成 LIMIT '10' 直接 1064。整理四个可复现差异(校验时点、LIMIT 绑定、同名命名参数 HY093、N 前缀失效)、用 Com_stmt_* 计数器确认是否真的走了原生预处理,以及 PHP 8.4 占位符解析器与 8.5 常量迁移。
PHP
PDO
MySQL
prepared-statement
预处理语句
PHP 8.6 ext/uri 新增两个 Builder:先建后校验,不必再先有合法 URI
编程
PHP 8.6 ext/uri 新增两个 Builder:先建后校验,不必再先有合法 URI
2026-10-28 21:06:19
PHP 8.6 的 ext/uri 补上了 UriBuilder 与 UrlBuilder,把「每改一个组件就新建对象」和「必须先有合法 URI」两个问题一起解掉,校验分单组件与整体两层。同时新增 UriType 与 HostType 枚举,WHATWG 侧还能识别 127.1、0x7f.0x0.0x0.0x1 这类 IPv4 写法。
PHP
URI
RFC3986
WHATWG
Argon2id 参数别照抄默认值:64 MiB 乘 40 个 worker 就 OOMKill,PHP 与 Go 的实现差异
编程
Argon2id 参数别照抄默认值:64 MiB 乘 40 个 worker 就 OOMKill,PHP 与 Go 的实现差异
2026-10-28 00:04:46
Argon2id 的 m/t/p 不是填个 19 MiB 就完事:m 是 KiB 且按 worker 数相乘、p 不乘内存,PHP 8.x 默认 64 MiB/t=4 乘上 pm.max_children 就能把容器 OOMKill。含内存预算公式、PHP 与 Go x/crypto/argon2 的实现差异(取整、panic、threads 在 libsodium 下失效、needs_rehash 要传 options)、可跑的 benchmark 脚本与 bcrypt 迁移路径。
密码哈希
Argon2id
PHP
Go
安全
PHPStan 2.2:array{a:int} 开始真的密封,array<string,X> 的键会被收窄成 int|string
编程
PHPStan 2.2:array{a:int} 开始真的密封,array<string,X> 的键会被收窄成 int|string
2026-10-28 00:04:44
PHPStan 2.2(2026-05-28)给数组形状加了未封闭语法 ...,并新增 non-decimal-int-string 类型与 reportUnsafeArrayStringKeyCasting 三档配置,解决「array<string,X> 运行时冒出 int 键」的长期误判。文中给出复现代码、报错原文、交叉运算结果表、bleeding edge 下密封形状的三种拒绝提示与 composer 升级顺序。
PHPStan
PHP
静态分析
数组
类型系统
PHP 8.6 部分函数应用:用 ? 和 ... 预填参数,以及何时该用箭头函数
编程
PHP 8.6 部分函数应用:用 ? 和 ... 预填参数,以及何时该用箭头函数
2026-10-27 21:32:01
PHP 8.6 的部分函数应用(PFA)用 ? 和 ... 占位符把部分参数先填好,返回一个签名完整的闭包。本文按占位符语义、命名参数重排、可变参数、提前求值、不支持 new、与管道操作符的编译期优化逐条说明,并给出何时该写 PFA、何时仍应写箭头函数的取舍。
PHP
8.6
部分函数应用
闭包
管道操作符
RFC
PHP 8.6 给 stream 加上 TLS 会话复用与 0-RTT:高频调用第三方 HTTPS 时能省掉一次完整握手
编程
PHP 8.6 给 stream 加上 TLS 会话复用与 0-RTT:高频调用第三方 HTTPS 时能省掉一次完整握手
2026-10-27 21:06:47
PHP 8.6 给 stream 补上 TLS 会话复用、外部 PSK 与 TLS 1.3 早数据。按客户端会话缓存、服务端会话存储、0-RTT 三组讲清上下文选项与 0-RTT 结果的读取方式,并说明 0-RTT 可被重放、只能放幂等请求。
PHP
TLS
接口对接
PHP 8.6 的 Stream 错误 API:stream 层的 warning 终于能直接拿到了
编程
PHP 8.6 的 Stream 错误 API:stream 层的 warning 终于能直接拿到了
2026-10-27 21:05:59
PHP 8.6 把 stream 层错误变成结构化状态:StreamError/StreamException、stream_last_errors()、error_mode/error_store/error_handler 三个上下文选项,另有 filter.max_filter_count 与 socket 的 keepalive、linger、缓冲区选项。
PHP
语言特性
流与网络
常量里的对象能直接改属性了:PHP 8.6 两处写入规则改动与它们的误用风险
编程
常量里的对象能直接改属性了:PHP 8.6 两处写入规则改动与它们的误用风险
2026-10-27 21:03:27
PHP 8.6 允许改写常量里那个对象的属性,也让 readonly 属性可以带默认值。两个改动都只是松了写入语法,没松语义:常量依旧不能重新绑定,readonly 依旧只初始化一次。文中给出边界、示例代码,以及全局可变状态和测试污染这两个实际问题。
PHP
语言特性
代码质量
finally 里 return、is_long、spl_object_hash:PHP 8.6 弃用清单里最该先清理的几类调用
编程
finally 里 return、is_long、spl_object_hash:PHP 8.6 弃用清单里最该先清理的几类调用
2026-10-27 21:02:28
PHP 8.6 只报 deprecated、9.0 才移除,但这类改动会在升级时一次全撞上。挑了 finally 里 return、is_long/is_double 别名、spl_object_hash、SORT_LOCALE_STRING、SplFileObject 的 CSV 方法等几条,给替代写法和 grep 排查命令。
PHP
版本升级
代码迁移
bcrypt 的 72 字节是截断点:Go 报错、PHP 静默截断、WordPress 先 HMAC 再哈希
编程
bcrypt 的 72 字节是截断点:Go 报错、PHP 静默截断、WordPress 先 HMAC 再哈希
2026-10-27 00:04:17
bcrypt 只把前 72 字节送进 Blowfish 密钥调度,第 73 字节起不参与运算。三套实现态度不同:Go 的 GenerateFromPassword 返回 ErrPasswordTooLong,但 CompareHashAndPassword 不检查长度;PHP 只拦 NUL 字节,超长交给 crypt() 截断;WordPress 6.8 先用 HMAC-SHA384 + base64 压到 64 字符再哈希,输出带 $wp 前缀。给出可复现代码、cost 与 rehash 升级做法,以及 OWASP 当前参数值。
bcrypt
密码哈希
Go
PHP
安全
Composer 2.11 加了个 cooldown:新版本先别急着装,dist 也不再回退到 source
编程
Composer 2.11 加了个 cooldown:新版本先别急着装,dist 也不再回退到 source
2026-10-26 21:05:48
Composer 2.11.0-RC1 加了 cooldown 策略,把刚发布的新版本挡在配置窗口外,降低被投毒 release 打中的概率;同时移除 2.10 的 source-fallback,dist 安装不再回退 source。另有 TLS 拒绝被入侵的 eMudhra 中间证书、bin proxy 转义、429 重试与 HTTP/3 关闭,文末给升级与回滚步骤。
PHP
Composer
依赖管理
安全
PIE 1.5:一次装多个 PHP 扩展,--select 取代自动推断,upgrade 不跨大版本
编程
PIE 1.5:一次装多个 PHP 扩展,--select 取代自动推断,upgrade 不跨大版本
2026-10-26 20:03:41
PIE 1.5 的实用变化:一条命令装多个扩展、用 --select=扩展=包名 取代不保证解析结果的 --allow-non-interactive-project-install、pie upgrade 只在原版本约束内升级(^1.1 会升到 1.2.0 但不会到 2.0.0),以及 Sigstore 验证实现与 attestation 库的解耦。
PHP
扩展
工具链
Composer
mod_php 默认配置就能未授权 RCE:PHP 8.5.12 / 8.4.27 修的两个洞
资讯
mod_php 默认配置就能未授权 RCE:PHP 8.5.12 / 8.4.27 修的两个洞
2026-10-26 20:02:35
PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 修掉两个可未认证利用的 RCE:CVE-2026-109618 是 memory_limit 触顶时留下的半初始化数据被当成有效数据,mod_php 默认配置下可复现;CVE-2026-109619 是致命错误把内部指针指向上一请求的内存,同 worker 后续请求踩到 UAF。附升级顺序、CVE/GHSA 编号,以及披露被 Chainguard 提前六小时打破的经过。
PHP
安全
漏洞
运维
mod_php
PHP 8.6 的部分函数应用:`?` 与 `...` 占位符、变长规则与管道下的零开销
编程
PHP 8.6 的部分函数应用:`?` 与 `...` 占位符、变长规则与管道下的零开销
2026-10-25 21:03:15
PHP 8.6 引入部分函数应用(PFA):用 ? 和 ... 占位符从任意可调用生成闭包。本文给出占位符语义、变长参数三条附加规则、命名实参重排、四类典型报错原文,以及管道运算符右侧能优化成直接调用、闭包根本不创建的条件。
PHP
闭包
RFC
语法特性
php://filter 默认只让串 16 层过滤器:升级前先数一遍链长
编程
php://filter 默认只让串 16 层过滤器:升级前先数一遍链长
2026-10-24 21:09:04
PHP 8.6 给 php://filter 加了默认 16 层的链长上限,超过就直接打不开流并告警;这不是性能项,防的是 convert.iconv/base64/dechunk 长链把文件读取拼成可执行内容。同一版本还把 stream 失败改成结构化错误 API。本文给出升级前要数的链长、要搜的代码位置,以及错误存储的开启方式。
PHP
安全
stream
CURLE_SEND_FAIL_REWIND 不是网络问题:PHP 8.6 加了 CURLOPT_SEEKFUNCTION 才补上
编程
CURLE_SEND_FAIL_REWIND 不是网络问题:PHP 8.6 加了 CURLOPT_SEEKFUNCTION 才补上
2026-10-24 21:08:19
用 READFUNCTION 流式提交请求体,碰到 307/308 重定向或连接复用后的重试会直接报 CURLE_SEND_FAIL_REWIND,业务参数看起来却完全正常。PHP 8.6 新增 CURLOPT_SEEKFUNCTION,让 libcurl 能把流倒回指定 offset 重发。本文给出回调写法、三种返回值语义、以及返回 OK 却定位错误时的静默坑。
PHP
cURL
接口对接
PHP 以 40:0 停止背书 PEAR:go-pear.phar 还在你的构建里跑吗
编程
PHP 以 40:0 停止背书 PEAR:go-pear.phar 还在你的构建里跑吗
2026-10-23 21:07:52
RFC 40:0 通过后 PHP 不再背书 PEAR,静态归档保留到 2027 年底,期间 php.net 仍分发可执行的 go-pear.phar。本文给出自查构建脚本、pear/pecl 依赖、CI 缓存与镜像残留的清单,以及迁移与哈希固定做法。
PHP
供应链
运维
构建
PHP 长驻 worker 的 OOM 排障:8.6 换掉 longjmp,多了 memory_hard_limit_percent
编程
PHP 长驻 worker 的 OOM 排障:8.6 换掉 longjmp,多了 memory_hard_limit_percent
2026-10-23 21:05:40
PHP 8.6 起 OOM 不再用 longjmp 中途跳出,改为置标记跑到安全点报错,并新增 memory_hard_limit_percent 硬上限直接退出进程。本文解释改动对 FPM 与 FrankenPHP 长驻 worker 的影响、两道内存线怎么配、以及如何验证。
PHP
内存管理
排障
安全
FrankenPHP 上生产:worker 模式、嵌入二进制,以及它省掉的那几层
资讯
FrankenPHP 上生产:worker 模式、嵌入二进制,以及它省掉的那几层
2026-10-23 20:01:38
FrankenPHP 把 PHP 嵌进 Caddy 进程,省掉 Nginx + PHP-FPM 的 FastCGI 与双生命周期。讲清 worker 模式怎么配、吞吐提升与全局状态残留的代价、embed 静态二进制的密钥风险、HTTP/3 与 Mercure,以及上线前必须设的 max_requests 与 opcache 参数。
FrankenPHP
PHP
Caddy
Laravel
部署
PHP 8.6 的 Io\Poll:900 连接下吞吐 3.88 倍,不用再手搓三个引用数组
编程
PHP 8.6 的 Io\Poll:900 连接下吞吐 3.88 倍,不用再手搓三个引用数组
2026-10-22 21:03:21
PHP 8.6 新增 Io\Poll:用 Context/Event/StreamPollHandle 加 watcher 元数据取代三个引用数组。整理 stream_select 的状态与 1024 fd 上限问题、第三方基准(900 连接 3.88 倍吞吐)、注册 Write 的真实语义、TLS 流 unread_bytes 的修复,以及 8.6 还缺定时器与信号。
PHP
并发
IO多路复用
性能
PHP 8.6 流错误处理:错误变成值对象,但 `@` 仍然删不掉
编程
PHP 8.6 流错误处理:错误变成值对象,但 `@` 仍然删不掉
2026-10-22 21:03:21
PHP 8.6 把流错误变成按 context 配置的值对象:error_mode/error_store/stream_last_errors,code 是枚举。给出与 error_get_last 的前后对比、选项必须写在 stream wrapper 下的报错,以及关键坑——Silent 不替代 @,域名解析失败仍从网络层先出 warning。
PHP
错误处理
流
升级兼容
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
8
下一页
共 8 页
到第
页
确定