You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP生成JSON文件下载后后缀为.json.html,如何保留.json后缀?

解决PHP生成JSON文件下载后缀变为.json.html的问题

这种情况我之前也碰到过,本质就是响应头的配置没让浏览器正确识别文件类型和文件名,才会自动给你加上.html后缀。你只需要在输出JSON内容之前,正确设置几个关键响应头就能搞定。

核心修复步骤

  • 确保在代码最开头(任何输出之前)设置响应头,避免已有输出导致头信息失效
  • 明确指定文件的MIME类型和下载时的目标文件名

完整示例代码

// 先清空缓冲区,防止之前的输出干扰响应头发送
ob_clean();
ob_start();

// 你的数据生成逻辑
$data = ['tickets' => []];
foreach($tickets as $ticket) {
    $data['tickets'][] = [
        'tickets_id' => $ticket->ticket_id,
        'name' => strtolower($ticket->name),
        'email' => strtolower($ticket->email)
        // 其他字段按需补充
    ];
}

// 转换为格式化的JSON字符串
$jsonContent = json_encode($data, JSON_PRETTY_PRINT);

// 设置关键响应头
header('Content-Type: application/json');
header('Content-Disposition: attachment; filename="tickets.json"');
header('Content-Length: ' . strlen($jsonContent));

// 输出内容并终止脚本
echo $jsonContent;
exit;

各配置说明

  • ob_clean() + ob_start():清空之前可能存在的输出(比如页面空格、HTML注释),确保响应头能正常发送
  • Content-Type: application/json:明确告诉浏览器这是JSON类型文件,不是HTML
  • Content-Disposition: attachment; filename="tickets.json":强制浏览器以附件形式下载,并指定文件名是tickets.json,这是解决后缀问题的核心
  • Content-Length:可选但推荐,让浏览器知晓文件大小,优化下载体验

如果还是出现问题,检查你的PHP文件是否在生成JSON前有其他输出(比如开头的空格、未闭合的HTML标签),这些都会导致响应头失效,浏览器就会默认用.html后缀处理文件。

内容的提问来源于stack exchange,提问作者Raphael Mercier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:10:48