程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
软件定制开发/软件按需定制 技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
Go 的 x509 报错是 verify.go 里写死的分支:按文案反推证书校验根因
编程
Go 的 x509 报错是 verify.go 里写死的分支:按文案反推证书校验根因
2026-11-08 00:04:32
Go 的 crypto/x509 报错文案来自 verify.go 的固定分支:没有 IP SAN、CN 兜底、名字列表超 100 条、候选签发者被拒、信任库为空,各自对应不同根因。附源码对照、Go 1.15/1.17/1.18 版本边界与 openssl 排查命令。
x509
TLS
证书
Go
运维
排错
staticcheck 2026.2 的 SA9010:defer f() 丢掉了那个该在退出时跑的闭包
编程
staticcheck 2026.2 的 SA9010:defer f() 丢掉了那个该在退出时跑的闭包
2026-11-08 00:04:30
SA9010 是 staticcheck 2026.2 新增检查,只做一句类型判断:defer 的调用结果如果是函数值就报。本文给出最小复现、defer 两阶段求值差别、带参数返回函数的修复写法,以及旧版本 -checks=SA9010 静默不检查的原因。
SA9010
staticcheck
Go
lint
defer
Gmail 报 550-5.7.25 缺 PTR:docker-mailserver 出站发信的源 IP、反向解析与 EHLO 怎么对齐
编程
Gmail 报 550-5.7.25 缺 PTR:docker-mailserver 出站发信的源 IP、反向解析与 EHLO 怎么对齐
2026-11-08 00:04:14
出站邮件被 Gmail 以 550 5.7.25 拒绝时,先确认收件方看到的源 IP,再依次核对 PTR 与正向 A/AAAA、EHLO 的 FQDN、出站 25 端口是否被封。附 docker-mailserver 的 smtp_bind_address 绑定写法,以及它被 smtp-amavis 继承的坑和 postfix-master.cf 覆盖方案。
docker-mailserver
邮件服务器
Postfix
反向解析
PTR
运维
pg_advisory_unlock 返回 false:Go 连接池下 session 级咨询锁的失效路径
编程
pg_advisory_unlock 返回 false:Go 连接池下 session 级咨询锁的失效路径
2026-11-08 00:04:05
Go 服务里 pg_advisory_lock 拿锁正常、pg_advisory_unlock 却返回 false 并打 WARNING:根因是 database/sql 连接池不保证两条语句走同一条 backend。给出 db.Conn 独占连接、改事务级 pg_advisory_xact_lock 两种写法,附 pg_locks 键编码还原、等待行定位、lock_timeout 与锁表容量边界。
咨询锁
PostgreSQL
Go
连接池
锁排查
Dovecot 2.4 拒读 2.3 的 dovecot.conf:dovecot_config_version 必须第一行,mail_location 已拆成三项
编程
Dovecot 2.4 拒读 2.3 的 dovecot.conf:dovecot_config_version 必须第一行,mail_location 已拆成三项
2026-11-08 00:03:53
Dovecot CE 2.3 升级到 2.4 后旧配置直接不工作。整理必须改的几处:dovecot_config_version/dovecot_storage_version 前置、设置全部全局化与 $SET:/%{user | domain} 新变量、passdb/userdb 必须命名、mail_location 拆成 mail_driver + mail_path + mailbox_list_layout、SSL 去掉行首 <、.conf.ext 取消,附默认值变化表与被移除功能清单。
Dovecot
IMAP
邮件服务器
dovecot.conf
配置迁移
钉钉机器人 webhook 接入:加签在 URL query,Outgoing 在 HTTP header,310000 怎么查
编程
钉钉机器人 webhook 接入:加签在 URL query,Outgoing 在 HTTP header,310000 怎么查
2026-11-07 21:33:16
钉钉群机器人发告警时,主动发送的 timestamp/sign 拼在 URL query,Outgoing 接收消息的签名却在 HTTP header,写反了只会拿到 310000。这篇记录了加签三步(毫秒时间戳、HMAC key 是 secret、Base64 后必须 urlEncode)、20 条/分钟限流的合并做法、310000 四种 errmsg 的排查顺序,以及三种安全设置怎么选。
钉钉
webhook
接口对接
告警
Go
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
数组
Vue 3.6 Vapor 下 slots.default() 会真的渲染插槽:判空写法与兼容性边界
代码
Vue 3.6 Vapor 下 slots.default() 会真的渲染插槽:判空写法与兼容性边界
2026-11-07 21:06:24
Vue 3.6 Vapor 里 slots.default() 不是只读探测:调用会执行插槽渲染、创建 DOM 与响应式副作用,hydration 时还会认领 SSR 节点。给出官方反例、用 <slot>默认内容</slot> 的替代写法,以及 Vapor 下 getCurrentInstance、模板 ref、globalProperties 等边界清单。
Vue
组件
Vapor
数组
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
安全
文件流
Go 1.28 把 string(整数) 改成编译错误:string(65) 不再等于 "A"
编程
Go 1.28 把 string(整数) 改成编译错误:string(65) 不再等于 "A"
2026-11-07 21:03:52
Go 1.28 收紧 string(x) 规则(#3939):x 是整数时只有 byte / rune 类型或无类型 rune 常量才允许,string(uid)、string(resp.StatusCode) 这类写法直接编译不过。给出 strconv 替换、允许保留的写法,以及先用 go vet 的 stringintconv 批量定位的迁移顺序。
Go
编译
类型转换
编译错误
微信支付回调 event_type 从 32 扩到 128:你的 VARCHAR(32) 不会自己变长
代码
微信支付回调 event_type 从 32 扩到 128:你的 VARCHAR(32) 不会自己变长
2026-11-07 21:03:13
微信支付 2026-11 把三个回调通知的 event_type 长度从 32 扩到 128(商家转账、会员卡、商品券)。落库列宽、JSON maxLength、枚举白名单都不会自动跟着变:严格模式报 1406,非严格模式静默截断后幂等键会折叠事件。附表结构、分发代码与以通知 id 去重的做法。
微信支付
回调
接口对接
nginx 1.31.8:working_directory 的相对路径不再跟着启动目录走
编程
nginx 1.31.8:working_directory 的相对路径不再跟着启动目录走
2026-11-07 21:02:27
nginx 1.31.8 起 working_directory 的相对路径按 prefix 解析,不再跟着启动时的当前目录走;指向无效目录时 worker 会在启动或 reload 阶段退出。给出 prefix 确认、绝对路径改法、cwd 验证命令与 systemd 单元示例。
nginx
运维
systemd
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
异常处理
代码审查
MySQL 9.7.0 级联删除会触发子表触发器了,默认关,而且只按会话算
编程
MySQL 9.7.0 级联删除会触发子表触发器了,默认关,而且只按会话算
2026-11-07 21:01:19
MySQL 9.7.0 新增 enable_cascade_triggers,默认 OFF:外键 CASCADE / SET NULL 引发的子表变更默认不激活子表触发器。它是会话级变量,连接池里必须逐条连接开启;开启后触发器报错会连同级联变更一起回滚。附 row 与 statement 复制格式的差异和排查顺序。
MySQL
触发器
外键
Zabbix 8.0 升级踩点:Allow list 空着从「放行」变「全禁」,HTTP 模板默认校验 TLS
资讯
Zabbix 8.0 升级踩点:Allow list 空着从「放行」变「全禁」,HTTP 模板默认校验 TLS
2026-11-07 20:04:29
Zabbix 8.0.0 从 7.4.x 升级前必须核对的破坏性变更:ES 低于 8 直接起不来、MySQL 门槛抬到 8.4、roles 的空 Allow list 语义反转、HTTP 模板与 webhook 默认校验 TLS、一批宏被移除。
Zabbix
监控
运维
升级
OpenTelemetry
支付宝退款返回 10000 就标「已退款」:fund_change、退款查询与 out_request_no 的判定链
代码
支付宝退款返回 10000 就标「已退款」:fund_change、退款查询与 out_request_no 的判定链
2026-11-07 09:01:23
支付宝退款接口 code=10000 只代表请求受理。本文给出 code→fund_change→退款查询的判定链,说明部分退款漏传 out_request_no 会报 REFUND_AMT_NOT_EQUAL_TOTAL、重试同号返回 fund_change=N、退款查询传错请求号静默返回空明细,并附错误码分诊表、重试间隔与本地状态机建议。
支付宝
退款
支付接口
幂等
异步通知
同一个 DELETE,changes() 返回 1,total_changes 涨了 3
编程
同一个 DELETE,changes() 返回 1,total_changes 涨了 3
2026-11-07 00:05:59
RowsAffected 到底数了什么:SQLite 的 sqlite3_changes 只算语句直接改的行,total_changes 连触发器程序和外键级联一起算,却不含 REPLACE 消解。给出五个可复现探针,以及触发器内读 changes() 的保存/恢复陷阱、INSTEAD OF 视图恒为 0、expo-sqlite 与 bun 的真实踩坑,最后说明判「命中」与判「真变」为什么必须分开。
RowsAffected
SQLite
影响行数
触发器
外键级联
Go
数据库
mailq 里一堆 deferred 不是卡住:Postfix 的 300s/4000s 退避与 relayhost 单点吞吐
编程
mailq 里一堆 deferred 不是卡住:Postfix 的 300s/4000s 退避与 relayhost 单点吞吐
2026-11-07 00:04:42
mailq 里 deferred 邮件的重试时间戳总在往后跳,多半是 4xx 指数退避而不是队列卡住。整理 Postfix 2.4 起的默认值(queue_run_delay/minimal_backoff_time 各 300s、maximal_backoff_time 4000s、maximal_queue_lifetime 5d)、dead 目的地判定(failed_cohort_limit 默认 1、只算连接与握手失败)、relayhost 单点的吞吐算术,以及 transport 分 lane 的参数覆盖写法与排查命令。
Postfix
邮件队列
qmgr
relayhost
邮件服务器
退避
wget 遇 503 不进重试直接退出码 8:-t 20 只管网路中断,--retry-on-http-error 要自己开
编程
wget 遇 503 不进重试直接退出码 8:-t 20 只管网路中断,--retry-on-http-error 要自己开
2026-11-07 00:04:32
wget 默认 -t 20 只重试连接中断和读超时,HTTP 503/429 会直接以退出码 8 结束,日志里连 Retrying. 都没有。这篇按手册核对重试边界:--waitretry 线性退避默认 10 秒、read timeout 默认 900 秒、--retry-on-http-error 从 1.19.1 才有且官方不推荐,并给出退出码 0-8 的分支判断、-c 与 -O 共用会截断文件的原因,以及可直接抄的 flock + sha256sum 脚本。
wget
Shell
运维
下载工具
CodeQL 报 No code found during the build:exit 32 多半是构建缓存命中,编译器一次都没被调用
编程
CodeQL 报 No code found during the build:exit 32 多半是构建缓存命中,编译器一次都没被调用
2026-11-07 00:04:27
构建步骤成功、CodeQL analyze 却报 No source code was seen during the build / exit 32,根因常常是 Gradle、Bazel、dotnet 的构建缓存命中,编译器整场缺席,tracer 抽到 0 个文件。给出 debug-artifacts、build-tracer.log、src.zip 对比、本地建库四步排查,以及手动构建与 build-mode: none 两种修法的取舍。
代码扫描
SAST
CodeQL
静态分析
GitHub
Actions
CI
MySQL GET_LOCK 排查:metadata_locks 里 OWNER_THREAD_ID 不是连接 ID,重复取锁也不加行
编程
MySQL GET_LOCK 排查:metadata_locks 里 OWNER_THREAD_ID 不是连接 ID,重复取锁也不加行
2026-11-07 00:04:16
MySQL 5.7.5 起 GET_LOCK 由 MDL 实现,用户锁在 performance_schema.metadata_locks 里 OBJECT_TYPE='USER LEVEL LOCK'、LOCK_DURATION='EXPLICIT'。给出按名字查持有者与 PENDING 等待者的 SQL、OWNER_THREAD_ID 经 threads 换 PROCESSLIST_ID 才能 KILL 的原因、递归取锁只留一行的计数语义,以及超时返回 0 / 出错返回 NULL、3058 不回滚事务、@@lock_wait_timeout 无效的边界。
advisory-lock
MySQL
咨询锁
performance_schema
MDL
锁排查
Uncloud v0.22 部署笔记:没有控制面,用 WireGuard mesh 和 CRDT SQLite 管 Docker 集群
编程
Uncloud v0.22 部署笔记:没有控制面,用 WireGuard mesh 和 CRDT SQLite 管 Docker 集群
2026-11-06 21:32:10
Uncloud 用 WireGuard mesh 加 CRDT SQLite(corrosion)在多台 Docker 主机间同步集群状态,没有控制面和 quorum。笔记给出 uc machine init / uc run -p 域名:端口/https 的可复现步骤,讲清 gRPC over SSH、Caddy global 模式做 ingress、unregistry 直推镜像,并记录 v0.22.0 的原地改资源限制、uc image rm、m.internal DNS,以及 caddy deploy 会重签证书与机器名必须是 DNS label 两个升级坑。
docker
部署
运维
Go
NGINX upstream keepalive 实测:配了 keepalive 16,后端连接数仍是 15557 条
综合
NGINX upstream keepalive 实测:配了 keepalive 16,后端连接数仍是 15557 条
2026-11-06 21:31:05
NGINX 只写 keepalive 16 不会复用连接:给出 upstream keepalive + proxy_http_version 1.1 + 清空 Connection 头三段式配置,并用四组对照压测说明半配置为何会静默产生 8 千多次 prematurely closed、端口耗尽的 [crit] 报错为何被 grep 漏掉,以及如何用 ss 和 upstream_connect_time 验证复用真的生效。
nginx
运维
反向代理
502
别用 overrides 把 rolldown 1.3.0 塞进 Vite 8.3.6:它锁着版本,HMR 与构建会踩空
代码
别用 overrides 把 rolldown 1.3.0 塞进 Vite 8.3.6:它锁着版本,HMR 与构建会踩空
2026-11-06 21:07:17
Rolldown 1.3.0 官方提醒别用 overrides/resolutions 强塞进 Vite:Vite 8.3.6 及更早需要改动才能配合,版本是锁死的。本文说明锁版本背后的 lockstep 假设、overrides 如何污染 lockfile、先升 Vite 再升 rolldown 的顺序、三包管理器自检命令,以及实验性 import attributes 的隔离做法。
Vite
Rolldown
前端构建
依赖管理
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
…
348
下一页
共 348 页
到第
页
确定