程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
php 相关技术文章(第2页)
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
PHP 8.6 的 SplFileObject:next() 与 fgets() 不再共享缓存,按行读文件要改写法
编程
PHP 8.6 的 SplFileObject:next() 与 fgets() 不再共享缓存,按行读文件要改写法
2026-11-08 21:04:15
PHP 8.6 拆开了 SplFileObject 里 next()、current()、fgets() 共享的缓存:next() 无缓存时直接推进流,fgets() 不再把行留给 current()。混用两者按行读大文件会变成漏行或重复行,且不报错。还讲了 EOF 后 key() 的行为、DirectoryIterator 返回类型与 CSV 方法弃用。
PHP
文件读取
升级踩坑
PHP 8.6 把 array_intersect() 的字符串转换提前到扫描阶段
编程
PHP 8.6 把 array_intersect() 的字符串转换提前到扫描阶段
2026-11-08 21:04:15
PHP 8.6 把 array_intersect() 的值转字符串从排序比较阶段前移到扫描阶段。有状态 __toString() 的结果、抛出的异常来自哪个元素、Array to string conversion 告警的条数与顺序都会变;参数类型校验提前,空数组输入则完全不转换。文末给四条自查清单。
PHP
数组函数
升级踩坑
PHP 8.6:close 阶段失败时,fclose() 与 file_put_contents() 不再返回成功
编程
PHP 8.6:close 阶段失败时,fclose() 与 file_put_contents() 不再返回成功
2026-11-08 21:03:21
PHP 8.6 把 fclose()、file_put_contents()、copy() 在 flush/close 失败时改成返回 false。NFS 上的 EDQUOT/ENOSPC/EIO 常发生在 write() 成功之后,于是字节数对得上但文件是截断的。文中给出三类函数的判断写法、临时文件+rename 的顺序要求,以及 fsync 与 close 兜底的分工。
PHP
文件写入
升级踩坑
PHP 8.6 弃用 mb_ereg* 与 mb_split:Oniguruma 停更后怎么迁到 preg_*
编程
PHP 8.6 弃用 mb_ereg* 与 mb_split:Oniguruma 停更后怎么迁到 preg_*
2026-11-08 21:03:21
Oniguruma 于 2025 年 4 月停止维护,PHP 8.6 弃用整个 mbregex 层并在 9.0 移除。本文列出受影响的函数清单,讲清 mb_ereg 与 preg_*/u 在 \w 语义、无效 UTF-8 返回 false 上的差异,给出 rg 扫描与 CI 拦截方式,以及 mb_onig PECL 包的定位。
PHP
正则
升级踩坑
yansongda/pay 3.x 一个 SDK 接完微信支付宝:证书配置、callback 边界与金额单位
代码
yansongda/pay 3.x 一个 SDK 接完微信支付宝:证书配置、callback 边界与金额单位
2026-11-07 21:32:19
PHP 项目同时接微信和支付宝时,yansongda/pay 3.x 能省掉两套签名验签代码,但配置结构与回调边界容易误判:支付宝三张证书各管什么、微信平台公钥为什么建议落盘、callback() 只验签不校验金额、微信按分支付宝按元的单位差异,以及什么时候自己封装更划算。
PHP
支付
微信支付
支付宝
SDK
数组
PHP 8.6 把 php://filter 过滤器链限制到 16 个:未设上限会发弃用提示,显式设置后超限直接打开失败
编程
PHP 8.6 把 php://filter 过滤器链限制到 16 个:未设上限会发弃用提示,显式设置后超限直接打开失败
2026-11-07 21:05:38
PHP 8.6 给 php://filter 的过滤器链加了默认 16 个上限:未配置 filter.max_filter_count 时超限发弃用提示,显式设置后超限直接打开流失败。给出 stream_filter_append 与 context 选项两种替代写法、read/write 分别计数的注意点,以及把这条 deprecation 当攻击信号的用法。
PHP
安全
文件流
PHP 8.6:finally 里写 return 会丢掉异常,编译期就报弃用
编程
PHP 8.6:finally 里写 return 会丢掉异常,编译期就报弃用
2026-11-07 21:01:48
PHP 8.6 将在 finally 块里 return 标为弃用,且是编译期 deprecation:它会让 try 抛出的异常静默消失,调用方只拿到兜底值。给出错误写法、两种正确改法与 grep / php -l / PHPStan 的排查方式,PHP 9.0 将升级为错误。
PHP
异常处理
代码审查
real_escape_string 在双引号里并不安全:PHP 8.6 的 mysqli_quote_string 连引号一起处理
代码
real_escape_string 在双引号里并不安全:PHP 8.6 的 mysqli_quote_string 连引号一起处理
2026-11-06 21:03:56
PHP 8.6 新增 mysqli_quote_string,按连接 SQL 模式选引号样式并包起来。real_escape_string 的输出在双引号里配合 NO_BACKSLASH_ESCAPES 并不安全,本文给出可复现注入样例、quote_string 返回值已带引号别再套一层、标识符仍须白名单,以及 8.5 及以下的自写替代。
PHP
MySQL
SQL注入
安全
PHP 8.6 的 pack()/unpack() 能写端序了:s</>、l</>、q</> 与 f<、d> 的用法和 ValueError 边界
代码
PHP 8.6 的 pack()/unpack() 能写端序了:s</>、l</>、q</> 与 f<、d> 的用法和 ValueError 边界
2026-11-06 21:03:11
PHP 8.6 的 pack()/unpack() 支持在 s/S/l/L/q/Q 及 f/d 后写 < 与 > 指定端序,替代手写移位拼高低字。文中给支付与硬件协议头的打包解包写法、unpack 偏移与键名、有符号取舍、Java ByteBuffer 与 C struct 对齐对照,以及 v/n/V/N/g/G/e/E 上加修饰符抛 ValueError 的边界。
PHP
二进制协议
pack
接口对接
PHP 8.6 的 trim() 开始默认剥掉换页符 \f:签名串、CSV 和粘贴文本都会变
编程
PHP 8.6 的 trim() 开始默认剥掉换页符 \f:签名串、CSV 和粘贴文本都会变
2026-11-06 21:03:00
PHP 8.6 把换页符 \f(0x0C)加入 trim/ltrim/rtrim 的默认字符集。参与签名清洗的字段、CSV 行解析、粘贴留证文本都会因此悄悄变值;历史数据里带 \f 的那批会突然验签失败。含复现片段、grep/INSTR 存量排查与显式传字符集保证跨版本一致的写法。
PHP
字符串处理
签名
升级迁移
接口签名总对不上:%20 变 +、漏编码 !'()*、键序被 locale 改过
代码
接口签名总对不上:%20 变 +、漏编码 !'()*、键序被 locale 改过
2026-11-06 09:02:20
前端签名能过、后端复算不一致,问题多半在待签名串而不在算法。这篇按踩坑频率列出八处字节级差异:空格编成 %20 还是 +、encodeURIComponent 保留的 !'()*、quote 的 safe 默认值、排序受 locale 影响、空值与 undefined 的剔除规则、数组编码,以及 body 被重新序列化后验签必挂。附两端签名原文对比的四步排查法。
接口对接
签名
URL编码
PHP
Go
Laravel 13.40 长任务回调:队列阈值是毫秒,定时任务阈值是秒
编程
Laravel 13.40 长任务回调:队列阈值是毫秒,定时任务阈值是秒
2026-11-05 21:03:44
Laravel 13.40 加了慢任务回调,但 Queue 与 Schedule 两个方法对裸数字的单位不一致(毫秒 vs 秒),且被 --timeout 杀掉的 job 永远不会触发。本文还整理了读副本 commit ID 的驱动前提,以及 queue:work 日志里 DONE 变 RELEASED 的影响。
Laravel
PHP
队列
MySQL
PostgreSQL
Caddy 2.11.9:/wp-admin/ 404 的回归修了,FastCGI 的 env 也不再被请求头覆盖
综合
Caddy 2.11.9:/wp-admin/ 404 的回归修了,FastCGI 的 env 也不再被请求头覆盖
2026-11-05 21:03:06
Caddy 2.11.8 的目录索引回归让 /wp-admin/ 这类尾斜杠路径绕过 index.php 直接 404,2.11.9 修掉了它,同时把 FastCGI 的 env 优先级、脚本歧义 400、client_auth 冲突报错一起收紧了。本文按影响面列出需要改配置的点。
Caddy
FastCGI
PHP
运维
Web服务器
PIE 1.5 的无人值守安装不再自动选包:CI 里必须写 --select=ext=pkg
代码
PIE 1.5 的无人值守安装不再自动选包:CI 里必须写 --select=ext=pkg
2026-11-05 21:02:18
PIE 1.5 改了无人值守安装扩展的选包方式:旧参数 --allow-non-interactive-project-install 被弃用且忽略,缺包直接失败。本文给出 --select=扩展名=包名 的写法、--no-dev 只跳过 require-dev 检查的边界,以及 pie upgrade 如何遵守安装时的版本约束。
PHP
PIE
扩展
CI
Docker
PHP 8.5.12 启动期 delayed OOM:uri 模块 RINIT 失败让 worker 直接 exit(1)
编程
PHP 8.5.12 启动期 delayed OOM:uri 模块 RINIT 失败让 worker 直接 exit(1)
2026-11-05 20:02:43
PHP 8.5.12 起 memory_limit 越界改为延迟抛 OOM,请求启动期留出一段没有检查的窗口;落在窗口里的 multipart 上传会让 worker exit(1):FPM 变 502 不是 500,mod_php 杀掉 Apache 子进程,upload_tmp_dir 还留残留文件。附 N 扫描复现方法与 8.5.11 对照数据。
PHP
运维
内存
排错
RoadRunner v3:http.middleware 改成从左到右执行,Kafka 重试也不再回写原 topic
编程
RoadRunner v3:http.middleware 改成从左到右执行,Kafka 重试也不再回写原 topic
2026-11-04 21:06:53
RoadRunner v3 升级里几处不报错但改行为的地方:http.middleware 从左到右执行(v5 列表要反转)、Goridge v4 去掉 MessagePack、H2C 只认 prior knowledge、Kafka 重试进进程内队列重启会丢、max_workers 变成"基础池之上的增量"。
RoadRunner
PHP
Go
队列
FrankenPHP 1.13 改了 num_threads 的算法:配了 worker 的实例会多起线程,max_threads 不够直接起不来
编程
FrankenPHP 1.13 改了 num_threads 的算法:配了 worker 的实例会多起线程,max_threads 不够直接起不来
2026-11-04 21:02:30
FrankenPHP 1.13 把 num_threads 改成只算非 worker 请求的线程,worker 线程另算在 max_threads 里,配置没重算会启动失败。附 putenv 行为变更、reload 先校验再替换、hot_reload 下 opcache.revalidate_freq 默认值从 2 变 0,以及 PHP2Shell 对应的 PHP 版本要求。
FrankenPHP
PHP
Caddy
部署
支付宝手机网站支付 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
依赖管理
供应链安全
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
…
9
下一页
共 9 页
到第
页
确定