程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
PHP 相关技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
支付宝手机网站支付 alipay.trade.wap.pay 下单:product_code 写错不报错,pageExecute 的 GET 和 POST 别混
编程
支付宝手机网站支付 alipay.trade.wap.pay 下单:product_code 写错不报错,pageExecute 的 GET 和 POST 别混
2026-11-04 00:03:49
手机网站支付下单侧容易踩的四处:product_code 的 ALIPAY_WAP_PAY / QUICK_WAP_WAY 两代写法、pageExecute 返回自提交表单还是带 sign 的长链接、return_url 只做展示不能写订单状态、notify_url 必须公网可 POST,以及沙箱与生产参数成套切换和签名错误排查顺序。
支付宝手机网站支付
支付宝
手机网站支付
接口对接
PHP
签名验签
把 PHP 编译成原生二进制:TypePHP 的三条构建路径与它会卡住的语法
代码
把 PHP 编译成原生二进制:TypePHP 的三条构建路径与它会卡住的语法
2026-11-03 21:32:59
TypePHP 用 PHP 写了个自举的 AOT 编译器,把 PHP 源码降级成 C++17 再编译成原生二进制、PHP 扩展或共享库。本文给出依赖安装、tpc 用法、project.yml 关键字段、--nano 的能力裁剪,以及最关键的兼容性边界:全局作用域只能声明、必须 main()、变量变量不支持、Closure 不能重绑、生成器不是 Zend Generator、引用参数要 std::ref。附什么场景值得上、什么场景别硬套。
PHP
AOT
编译器
swoole
性能优化
opcache.jit=tracing 白掉 17% RPS:PHP tracing JIT 的 use-after-free 与 buffer_free 不回收
编程
opcache.jit=tracing 白掉 17% RPS:PHP tracing JIT 的 use-after-free 与 buffer_free 不回收
2026-11-03 21:31:41
把 PHP tracing JIT 打开当默认值,三天后又被退回关闭。原因有两层:热点落在 C 内建函数时 JIT 纯亏 17% RPS;多租户下 opcache_invalidate() 不回收 JIT buffer,buffer_free 永远不动。中间还踩到一个 php-src 的 use-after-free,修复随 8.4.26 / 8.5.11 发布。含 opcache_get_status 复现步骤与重开默认的三条前置条件。
PHP
OPcache
JIT
性能优化
use-after-free
PHP 8.6 的 Stream 错误 API:把 E_WARNING 换成可查询的 StreamError
编程
PHP 8.6 的 Stream 错误 API:把 E_WARNING 换成可查询的 StreamError
2026-11-03 21:04:11
PHP 8.6 新增 Stream 错误 API:StreamError / StreamException、StreamErrorStore / Mode / Code 枚举,加 stream_last_errors / stream_clear_errors,由 context 的 error_mode / error_store / error_handler 控制。讲清为什么默认 opt-in、错误存储按 stream 堆积怎么清、error_handler 里为什么不能再碰 stream。
PHP
错误处理
Stream
curl 报 65 CURLE_SEND_FAIL_REWIND:PHP 8.6 用 CURLOPT_SEEKFUNCTION 让流式请求体可回卷
编程
curl 报 65 CURLE_SEND_FAIL_REWIND:PHP 8.6 用 CURLOPT_SEEKFUNCTION 让流式请求体可回卷
2026-11-03 21:02:16
流式请求体遇到 307/308 重定向、401 多轮认证或连接重试时,curl 无法回卷直接报 65。PHP 8.6 加了 CURLOPT_SEEKFUNCTION,回调按 offset/origin 定位并返回 OK/FAIL/CANTSEEK。给出文件流与只进流(临时文件落地)两种写法,以及 size_delivered 区分截断。
PHP
curl
接口对接
PHP 8.6 里 trim() 开始吃掉 \f:默认字符集、array_filter 的 ValueError 与一批弃用
编程
PHP 8.6 里 trim() 开始吃掉 \f:默认字符集、array_filter 的 ValueError 与一批弃用
2026-11-03 21:02:16
PHP 8.6 三处不改签名却改结果的变动:trim/ltrim/rtrim/chop 默认字符集加入 form feed 0x0C,CSV 与 PDF 抓文本的字段字节会静默变化;array_filter 非法 $mode 从静默按 0 处理改成抛 ValueError;ArrayIterator 一批方法与 spl_object_hash 开始弃用。
PHP
版本升级
兼容性
Composer 2.11.0 升级笔记:内联仓库的 token 曾写进 composer.lock,source-fallback 被移除
编程
Composer 2.11.0 升级笔记:内联仓库的 token 曾写进 composer.lock,source-fallback 被移除
2026-11-02 21:09:47
Composer 2.11.0 以安全修复为主:内联仓库的 HTTP 头(API token)曾被写进 composer.lock,升级后要查历史并轮换;拒绝 eMudhra 中间证书签发的 TLS 链;新增 cooldown 配合 policy 防投毒;同时移除 2.10 的 source-fallback,dist 装不上不再回退源码。附检查命令。
Composer
PHP
依赖管理
供应链安全
OxPHP 0.14.0 升级:弃用变量被静默忽略,路由退回传统模式后任意 .php 都可执行
编程
OxPHP 0.14.0 升级:弃用变量被静默忽略,路由退回传统模式后任意 .php 都可执行
2026-11-02 20:01:33
OxPHP 0.14.0 把 INDEX_FILE、WORKER_FILE、PHP_DENY_DIRS 等变量直接停止读取且不告警:依赖它们的框架/工作进程部署会退回传统路由,文档根下任意 .php 都会被提供。同时修复了工作进程会话串号、putenv 令牌跨请求泄漏、慢速 HTTP/1.1 客户端把整个响应体留在内存等问题,附逐项迁移变量与升级检查清单。
PHP
OxPHP
Docker
升级
应用服务器
微信支付停发平台证书:自动下载证书的代码先挂,灰度期回调验签还会随机失败
代码
微信支付停发平台证书:自动下载证书的代码先挂,灰度期回调验签还会随机失败
2026-11-01 09:01:39
微信支付停发平台证书后,自动下载证书的服务会撞 RESOURCE_NOT_EXISTS / NOT_ENOUGH;灰度期回调按比例切公钥,用前缀二分验签会随机失败。文内给出证书 210/180/90 天生成规则、回调和应答两条进度条的比例算法,以及 openssl 手工验签命令。
支付接口
微信支付
PHP
PHP 8.6 的 quote_string():real_escape_string() 在 NO_BACKSLASH_ESCAPES 下失效的原因
编程
PHP 8.6 的 quote_string():real_escape_string() 在 NO_BACKSLASH_ESCAPES 下失效的原因
2026-10-31 21:04:32
real_escape_string() 只转义不加引号,一旦连接启用 NO_BACKSLASH_ESCAPES,反斜杠不再是转义符,拼接进引号里的值就能提前闭合。PHP 8.6 的 mysqli::quote_string() 把转义和加引号合并,并按连接 sql_mode 选风格。文中给出两种模式下的 SQL 对照、grep 排查命令、替换时的重复加引号与缓存陷阱,以及为什么预处理仍是首选。
PHP
MySQL
安全
SQL注入
版本升级
ASH
PHP 8.6 的 Uri 类型:把 parse_url 的推断换成枚举判断
编程
PHP 8.6 的 Uri 类型:把 parse_url 的推断换成枚举判断
2026-10-31 20:04:02
PHP 8.6 新增 Uri\Rfc3986 类型,用枚举判断「是不是绝对 URL」「host 是不是 IP」,替掉 parse_url 加 filter_var 的推断。注意 parse() 失败返回 null、空串与相对路径也能解析成功,以及 UriBuilder 对畸形路径直接抛 InvalidUriException;百分号编码按 Path/Query 区分上下文。
PHP
8.6
URL
处理
PHP 8.6 的 `?` 占位符:partial 应用写法、`(...)` 的元数差异与 array_map 编进 foreach
编程
PHP 8.6 的 `?` 占位符:partial 应用写法、`(...)` 的元数差异与 array_map 编进 foreach
2026-10-31 20:03:24
PHP 8.6 的部分函数应用用 `?` 占位符替代手写箭头函数,但 `f(?)` 与 `f(...)` 元数不同,嵌套 `trim(?)` 会直接 TypeError。文中给出两版代码对比、编译期错误、闭包缓存性能数字,以及 RC3 把 array_map 快速路径在 strict_types=1 下关闭的原因。
PHP
8.6
函数式编程
性能
PDO 持久连接的状态残留:跨请求的事务、游标与预处理语句怎么排查
代码
PDO 持久连接的状态残留:跨请求的事务、游标与预处理语句怎么排查
2026-10-30 21:09:35
持久连接省下握手开销,代价是事务、游标、预处理语句都跨过了请求边界:销毁一个持久实例会回滚另一个实例仍在用的事务,execute() 失败后旧结果仍可读。按状态残留位置逐项拆,并给出 inTransaction、closeCursor、rowCount 的排查顺序。
PHP
MySQL
PDO
数据库
php -S 长跑后的 fd 泄漏与 pcntl 丢信号:三个只在容器里出现的故障
编程
php -S 长跑后的 fd 泄漏与 pcntl 丢信号:三个只在容器里出现的故障
2026-10-30 21:05:34
三条只在长跑进程里暴露的故障:内建服务器每处理一个静态文件 HEAD 请求泄漏一个 fd、accept 前 RST 导致崩溃、部分写后错误页截断;pcntl_signal_dispatch 在异常挂起或处理器抛异常时丢弃排队信号;pcntl_fork 后 /proc/self 仍解析到父进程。附复现命令与容器内的坑。
PHP
CLI
pcntl
运维排查
PHP 8.5.12 的 OPcache/JIT 修复:那些不报错、只算错的地方
代码
PHP 8.5.12 的 OPcache/JIT 修复:那些不报错、只算错的地方
2026-10-30 21:05:19
PHP 8.5.12 的 opcache 段几乎全是正确性修复:三元里的 0.0 与 -0.0 被折叠成一个常量、tracing JIT 读 lazy proxy 的未定义属性槽、父类私有属性写进子类同名公有属性、逃逸分析不可靠导致错误 DCE。列出各条 bug 编号、可观察症状,以及用 opcache.jit 开关对拍的排查方法。
PHP
OPcache
JIT
性能与调试
PHP 8.5.11 安全修复:SAN 不匹配回退 CN、FPM IPv6 ACL 绕过与 HTTP wrapper 凭据泄露
资讯
PHP 8.5.11 安全修复:SAN 不匹配回退 CN、FPM IPv6 ACL 绕过与 HTTP wrapper 凭据泄露
2026-10-30 21:04:20
PHP 8.5.11 修了一批安全条目:OpenSSL 在 SAN 不匹配后回退比对 CN(CVE-2026-91769)、FPM 的 IPv6 白名单因前缀比较不完整可被绕过(CVE-2026-91768)、HTTP stream wrapper 跨源重定向泄露凭据(CVE-2026-91766)。逐项给出影响面、grep/openssl 自查命令,以及升级后行为变化。
PHP
安全公告
OpenSSL
FPM
Laravel 12 → 13 升级:几处不报错却会出事的改动
编程
Laravel 12 → 13 升级:几处不报错却会出事的改动
2026-10-29 21:03:38
Laravel 13 官方说破坏性变更很少,但 CSRF 中间件改名后测试里的 withoutMiddleware 会静默失效,cache 的 serializable_classes 默认 false 让存对象的缓存读不出,session serialization 改 json 会让所有在线会话失效。逐条给取舍和升级检查顺序。
PHP
Laravel
升级
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
静态分析
数组
类型系统
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
8
下一页
共 8 页
到第
页
确定