我从MySQL表中获取了这些数据,并将其存储在名为$ arr的变量中。 我把它json_encoded到$ json变量:
$arr = array();
while ($blah = mysqli_fetch_assoc(...)) {
$arr[key] = value;
}
$json = json_encode($arr);
我要做的是将$ json变量的内容下载到.json文件中,而不将其保存在服务器上。但是当我尝试使用
时 header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename='.$file.'');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
echo $json;
(其中$ file是下载文件的生成名称)我得到这样的内容:
<!DOCTYPE html>
<html>
<head>
....
</head>
<body>
<a ...>...</a>{"field":"value","field2":"ИзвеÑтиÑ","field3":"ÐОВ", ...} </body></html>
换句话说,或整个.php文件内容......正如你所看到的,编码都搞砸了。
您能否帮我确定问题,并可能就如何解决问题给我任何想法。
任何帮助都会非常感激:]
答案 0 :(得分:2)
这很可能是因为您在echo $json
行之前输出了HTML。
在header()函数之前,页面上不应该打印任何内容。我通常有一个单独的PHP文件(远离页面模板)来构建可下载的文件。
答案 1 :(得分:0)
以thePav的答案为基础。
你的标题声明之前你什么都没有,I.E。如果您尝试使用标题重定向页面('location:something.html');如果你在它之前回应了任何东西,它就无法工作。
我一般会设置一个“文件获取器”php文件,我可以传递ID哈希,然后在我的下载链接上链接该php文件。
例如:
<a href="filegrabber.php?id=123345">Click here to download</a>
另外,您可能想要阅读标题函数的文档,那里有很多有用的信息。