导出的 Excel 里 23 个附件链接,同事在自己电脑上点开全是 404,只有服务器本机能打开。乍看像缓存或者权限的锅,追下去往往不是。
$url = home_url('/download?id=' . $id);
$sign = hash_hmac('sha256', $id . $expires, $secret);
$row['file'] = $url . '&expires=' . $expires . '&sign=' . $sign;
追下去是这么回事:链接用了相对路径或内网地址,文件离开站点环境就失效。附件还存在权限校验,直接拼 URL 拿不到文件。
「导出附件链接」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
具体做法是,导出时拼绝对地址 域名从 home_url 取;需要鉴权的附件改成带时效签名的下载链接;换一台机器打开导出文件 逐个点开抽查。
验收就看一点,在另一台电脑打开导出文件,附件链接都能下载到对应文件。
