程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
php 相关技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
PHP 8.6 的 Stream 错误 API:从猜 warning 文本到读 StreamErrorCode
代码
PHP 8.6 的 Stream 错误 API:从猜 warning 文本到读 StreamErrorCode
2026-11-15 21:05:15
PHP 8.6 给 Stream API 加了统一错误模型:StreamError/StreamException 类、StreamErrorCode 等枚举、stream_last_errors() 与 error_mode/error_store 上下文选项。本文说明排错时如何从解析 warning 文本改为按错误码分支,以及 php://filter 新增的 filter.max_filter_count 上限。
PHP
流处理
排错
PHP 8.6 给 curl 加了 CURLOPT_SEEKFUNCTION:流式请求体在重定向和认证重发时能回卷了
代码
PHP 8.6 给 curl 加了 CURLOPT_SEEKFUNCTION:流式请求体在重定向和认证重发时能回卷了
2026-11-15 21:04:27
用 CURLOPT_READFUNCTION 自己喂请求体的 PHP 代码,遇到 3xx 跟随、401/407 多轮认证、连接重试时会以 CURLE_SEND_FAIL_REWIND 失败,因为 body 无法回卷。PHP 8.6 新增 CURLOPT_SEEKFUNCTION,本文给可回卷的实现、origin 的处理与不可 seek 数据源的退路,另附 size_delivered 的口径。
PHP
curl
接口对接
PHP 8.6 把三个 session 默认值改严了:原生 session 老站的升级排查
编程
PHP 8.6 把三个 session 默认值改严了:原生 session 老站的升级排查
2026-11-15 21:01:54
PHP 8.6 把 session.use_strict_mode、session.cookie_httponly 默认改成 1,session.cookie_samesite 默认改成 Lax。三个值只影响新装环境的默认值,但原生 session 老站仍会在跨站 POST、iframe、外部预置 SID 上出问题。本文按症状给排查顺序和局部兼容写法。
PHP
会话
升级
PHP 8.6 的 Time\Duration:让「一段长度」和日历语义分开
编程
PHP 8.6 的 Time\Duration:让「一段长度」和日历语义分开
2026-11-15 21:01:18
PHP 8.6 新增 Time\Duration,表示纳秒精度的固定流逝时长,没有年月这类日历单位。本文讲清它和 DateInterval 的分工:重试退避、超时、TTL 用 Duration,涉及日历推算仍用 DateInterval;附工厂方法、运算能力、292 年上限与 Time\TimeException 的边界。
PHP
时间处理
版本特性
PHP 8.6 部分函数应用:? 补上的参数会变成必填,且参数在创建分部时就会求值
代码
PHP 8.6 部分函数应用:? 补上的参数会变成必填,且参数在创建分部时就会求值
2026-11-15 21:01:18
PHP 8.6 的部分函数应用有两个容易踩的语义点:`?` 占位符补上的参数在生成的闭包里一律变成必填,即使原参数可选;已提供的参数在创建分部时求值一次,不是调用时求值。另附 `...` 占位剩余参数,以及 array_map 回调被编译成 foreach 的性能说明。
PHP
闭包
版本特性
部分函数应用
platformkf 报 1600001「该工单已处理」:先查详情再动手,别拿 Operate 当探针
编程
platformkf 报 1600001「该工单已处理」:先查详情再动手,别拿 Operate 当探针
2026-11-15 00:04:05
微信小店客诉工单 OperateMchTicket 的两个错误码里,1600001 只对应一个状态事实:工单已进 ticket_state=2。文中给出去重判据——先 GetMchTicketDetail 看 merchant_operate_time、merchant_operate.urls、platform_review_result,再决定是否提交;并记下几处容易踩的细节:description 是带 <a href> 的 HTML 片段、字段表把 description/confer_time 标成必填但实际按 is_must_* 判断、getmchticketlist 用 start 偏移补漏单会错位、官方示例 URL 被拼了两遍。
platformkf
微信小店
客诉工单
接口对接
PHP
微信开放平台
Composer 2.9 默认安全阻断导致 CI 更新失败:定位与处置
编程
Composer 2.9 默认安全阻断导致 CI 更新失败:定位与处置
2026-11-14 21:05:40
Composer 2.9 起 audit.block-insecure 默认开启,CI 里 composer update 会因已知安全公告直接失败。本文说明哪些设置会拦、如何用 --no-security-blocking 只关阻断保留审计、audit.ignore 收窄到具体 CVE,以及 2.9.2 修的局部更新失败。
PHP
Composer
依赖管理
短信接口返回 OK 不等于送达:回执 DELIVRD 才算成功,72 小时没回执就是未知状态
编程
短信接口返回 OK 不等于送达:回执 DELIVRD 才算成功,72 小时没回执就是未知状态
2026-11-14 20:01:50
SendSms 返回 Code=OK 只是平台受理,送达要看运营商回执。梳理 SmsReport 报文与字段、必须返回 {"code":0} 否则重推三次、GET 连通性校验要 700ms 内应答、DELIVRD/UNDELIV/REJECTD/EXPIRED 等状态码含义、发送成功但用户被终端拦截的情形、超过 72 小时显示未知状态,以及批量全失败时先查签名实名报备而非终端。
短信
接口对接
运维
PHP
快递100 订阅推送接入:salt 传空串也要验签,回调不返回 200 就重试三次后丢弃
编程
快递100 订阅推送接入:salt 传空串也要验签,回调不返回 200 就重试三次后丢弃
2026-11-14 20:00:59
对接快递100 订阅推送时最常踩的几处:订阅 param 的必填与可选字段、200/501/701 等返回码怎么读、推送 sign 是 md5(param+salt) 转 32 位大写且 salt 空串也会带签名、回调必须回 {"result":true,"returnCode":"200"}、失败 30 分钟后重试三次即丢弃、3 天无记录与 60 天无变化的 abort 分支怎么处理。附 PHP/Go 验签示例。
快递100
物流
接口对接
PHP
Go
PHP 8.6 弃用了一批名字:let、namespace、in/out,以及 finally 里的 return
编程
PHP 8.6 弃用了一批名字:let、namespace、in/out,以及 finally 里的 return
2026-11-14 00:04:38
PHP 8.6(2026-11-19 发布)在语言层弃用了一批标识符命名:let、is、in/out/inout 不能再当类名函数名,namespace 不能作类常量名,readonly 不能当函数名,finally 里 return 也提示弃用。附 RFC 扫描数据、精确报错文案、list() 提案 23:23 未通过的判断,以及 grep/ast-grep 检测命令。
语法特性
PHP
8.6
弃用
关键字保留
版本升级
PHP 8.6 RC3:fiber 里的警告全部静默,这个回归修掉了
编程
PHP 8.6 RC3:fiber 里的警告全部静默,这个回归修掉了
2026-11-13 21:03:59
PHP 8.6 beta 与 RC2 有个隐蔽回归:没有 php.ini 时新 Fiber 以 error_reporting=0 启动,fiber 内所有 warning 静默,Revolt/AMPHP 上的异步代码看不到任何报错。RC3 修掉了它,并顺带回滚 hrtime 走快 4%、array_map 快速路径、OPcache -0.0 折叠与内置服务器 HEAD 泄漏 fd。
PHP
异步
升级
调试
@dataProvider 在 PHPUnit 12 静默失效:测试照跑,报的是 0 passed
编程
@dataProvider 在 PHPUnit 12 静默失效:测试照跑,报的是 0 passed
2026-11-13 00:03:56
升级 PHPUnit 12 后 @dataProvider 注释被静默忽略,测试照跑却报 ArgumentCountError: 0 passed。按 provider 必须 public static、数据集个数与签名对齐、discovery 阶段不能碰 DB/网络三条规则逐条给报错原文与修法,附 autoload-dev 坑、迁移顺序和 12.x 后续硬弃用清单。
PHPUnit
PHP
单元测试
测试
数据提供者
PHP 8.5.12 升级笔记:两个未授权 RCE 的缓解配置,以及几条会反噬的“土办法”
编程
PHP 8.5.12 升级笔记:两个未授权 RCE 的缓解配置,以及几条会反噬的“土办法”
2026-11-12 20:01:24
PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 修复两个 CVSS 9.2 的未授权 RCE(CVE-2026-109618 OOM 半初始化、CVE-2026-109619 残留全局状态)。给出 FPM pool php_admin_value 下发 memory_limit=-1、post_max_size 组合、session.upload_progress.enabled=0、fatal_error_backtraces=0 的可复制写法,说明为什么 RLIMIT_AS/RLIMIT_DATA 是反坑、ini_set() 与 .user.ini 无效,并附同批 8.5.11 的 FPM IPv6 ACL 绕过与 OpenSSL 回退 CN 等修复清单和升级后验证步骤。
PHP
安全
运维
PHP-FPM
CVE
验签总差在 `%21` 和 `!` 之间:空格、`~`、`!` 在三套 URL 编码规则里的分歧
编程
验签总差在 `%21` 和 `!` 之间:空格、`~`、`!` 在三套 URL 编码规则里的分歧
2026-11-12 00:04:04
同一串参数值在 PHP urlencode、rawurlencode、Go QueryEscape、PathEscape、JS encodeURIComponent 下输出不同:空格是 + 还是 %20、~ 是 %7E 还是原样、! 编不编码。附五函数输出对照、Go 源码里的 encodePathSegment 分支,以及签名验签不一致时的逐层排查顺序。
URL编码
PHP
Go
JavaScript
签名
接口对接
同一用户并发请求排队、CPU 却不高:PHP 会话锁的持有边界与后端默认值
编程
同一用户并发请求排队、CPU 却不高:PHP 会话锁的持有边界与后端默认值
2026-11-12 00:03:49
PHP 默认 files 会话在 session_start() 时对会话文件取 flock 排他锁,同一 session 的并发请求被串行化:FPM worker 打满但 CPU 不高、慢日志时间花在 session_start()。给出现象判据、strace/lsof 证据链、session_write_close 与 read_and_close 的持锁边界,以及 memcached 默认加锁、phpredis 默认不加锁的差异和 Redis 会话的三个配置约束。
会话状态
PHP
Session
并发
Redis
Web
PHP 8.6 的 Time\Duration:把超时和退避延迟换成带纳秒精度的值类型
代码
PHP 8.6 的 Time\Duration:把超时和退避延迟换成带纳秒精度的值类型
2026-11-11 21:07:09
PHP 8.6 新增 Time\Duration:final readonly、纳秒精度的固定时长值类型,没有天/月这类日历单位所以长度无歧义。文章讲清工厂方法、四则运算、比较与排序回调、约 292 年上限,以及何时该用它替换 int 毫秒、何时该继续用 DateInterval 或落成数值。
PHP
8.6
时间处理
类型设计
PHP 8.6 的 Stream 错误模型:用 `error_mode` 把 warning 变成 `StreamException`
编程
PHP 8.6 的 Stream 错误模型:用 `error_mode` 把 warning 变成 `StreamException`
2026-11-11 21:01:58
PHP 8.6 给流操作加了统一的错误 API:`error_mode` 可选保持 warning、抛 `StreamException` 或静默,`error_store` + `stream_last_errors()` 提供结构化错误和 50 多个语义错误码。文章讲清必须显式挂在 context 上、为什么不允许全局生效,以及哪些代码值得改造、哪些别碰。
PHP
8.6
异常处理
I
O
PHP 8.6 部分函数应用:`add(1, ?)` 拿到的是一个闭包
代码
PHP 8.6 部分函数应用:`add(1, ?)` 拿到的是一个闭包
2026-11-11 21:01:21
PHP 8.6 的部分函数应用用 `?` 和 `...` 两个占位符把参数空出来,返回一个接收缺少参数的闭包。这篇讲清预填参数在创建时求值、闭包保留原签名、每个 `?` 在闭包上变必填这三条语义,以及它相对 arrow fn 什么时候更清晰、什么时候更难看懂。
PHP
8.6
闭包
函数式
PHP 8.6 的 Io\Poll:用 epoll/kqueue 做事件循环,和 stream_select 的差别与三个坑
编程
PHP 8.6 的 Io\Poll:用 epoll/kqueue 做事件循环,和 stream_select 的差别与三个坑
2026-11-10 21:02:48
PHP 8.6 通过 Polling API RFC 引入 Io\Poll,把注册与等待拆开,后端按平台走 epoll、kqueue 或 poll。本文给出可直接跑的 TCP 示例,说明与 stream_select 的真实差别,以及边缘触发要读到空、流必须非阻塞、watcher 注销要自理这三个坑。
PHP
事件循环
Socket
epoll
PECL 2027 年转只读、2029 年关站:Dockerfile 里的 pecl install 和 mbstring 得改了
编程
PECL 2027 年转只读、2029 年关站:Dockerfile 里的 pecl install 和 mbstring 得改了
2026-11-10 21:01:44
PECL 的退出时间表已经摆上桌面:2027-06-30 只读、2029-12-31 关站,中间还有四轮 brownout。本文整理 RFC 的日期节点、官方 PHP 8.6 镜像不再带 PECL 且不再预编译 mbstring 的具体变化,以及怎么在 Dockerfile 和 CI 里定位 pecl install、迁到 PIE。
PHP
PECL
PIE
Docker
Argon2id 的 m 写在 hash 串里:一次 verify 可能吃掉 1 GiB,Go 和 PHP 都不拦
编程
Argon2id 的 m 写在 hash 串里:一次 verify 可能吃掉 1 GiB,Go 和 PHP 都不拦
2026-11-10 00:04:33
PHC 串自带 m/t/p,verify 只能按串内参数重算,于是「一次验证分配多少内存」由数据决定,不由你的配置决定。Go x/crypto/argon2 只拦 time/threads 过小、对 memory 无上界,libargon2 的结构校验上界约 0xFFFFFFFF 个 block;外部导入或被人写过的 hash 行就可能让一次校验吃掉 1 GiB。文内给可运行的 Go PHC 解析 + 策略钳制 + constant-time 比较代码,以及下界(弱 hash 植入)与存储、并发侧的落地检查。
Argon2id
密码哈希
PHC
Go
PHP
安全
PHP 8.6 的 pack()/unpack() 端序修饰符:用 l>、l< 直接指定大小端
编程
PHP 8.6 的 pack()/unpack() 端序修饰符:用 l>、l< 直接指定大小端
2026-11-09 21:06:15
PHP 8.6 给 pack()/unpack() 增加 < 与 > 端序修饰符,可接在 s/S/l/L/q/Q 与 f/d 后面,直接指定小端或大端,不再依赖机器字节序,也不用 strrev 拼 64 位整数和浮点。文中给新旧写法对照与协议头解析示例。
PHP
二进制
网络协议
版本升级
PHP 8.6 的 trim() 默认多剥一个 \f:定宽文本和分页流会静默错位
代码
PHP 8.6 的 trim() 默认多剥一个 \f:定宽文本和分页流会静默错位
2026-11-09 21:04:53
PHP 8.6 起 trim/ltrim/rtrim/chop 的默认字符集多了换页符 \f,不报错不警告,只是返回的字符串短一个字节。定宽解析、打印分页流、按字符数 substr 的代码会静默错位。文中给复现代码与显式传 charlist 的改法。
PHP
字符串处理
版本升级
踩坑
PHP 8.6 收紧了三个 session INI 默认值:代码没动,登录流程先坏了
代码
PHP 8.6 收紧了三个 session INI 默认值:代码没动,登录流程先坏了
2026-11-09 21:03:41
PHP 8.6 把 session.use_strict_mode 改成 1、cookie_httponly 改成 1、cookie_samesite 改成 Lax。自建 SSO 沿用 session id、前端读 document.cookie、跨站 POST 回调这三类会同时出问题。文中给三步排查命令与写死三项配置的迁移做法。
PHP
Session
安全默认值
版本升级
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
…
9
下一页
共 9 页
到第
页
确定