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类型文件,不是HTMLContent-Disposition: attachment; filename="tickets.json":强制浏览器以附件形式下载,并指定文件名是tickets.json,这是解决后缀问题的核心Content-Length:可选但推荐,让浏览器知晓文件大小,优化下载体验
如果还是出现问题,检查你的PHP文件是否在生成JSON前有其他输出(比如开头的空格、未闭合的HTML标签),这些都会导致响应头失效,浏览器就会默认用.html后缀处理文件。
内容的提问来源于stack exchange,提问作者Raphael Mercier
相关产品推荐
相关产品推荐

