我有这个数据,我从我的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文件内容,换句话说…正如你所看到的,编码是混乱的。
你能帮我找出问题,并可能给我一些解决问题的建议吗?
任何帮助都将是非常感激的:]
这很可能是因为您在echo $json
行之前输出HTML。在header()函数之前不应该打印任何内容到页面。我通常有一个单独的PHP文件(远离页面的模板)来构建可下载的文件。
以pav的答案为基础。
你不能在你的头声明之前有任何东西,例如,如果你试图使用header('location: something.html')重定向页面;如果你在它之前回显任何内容,它将不起作用。
我通常会设置一个"文件获取器"php文件,我可以传递一个ID哈希,然后链接到我的下载链接的php文件。
例如:<a href="filegrabber.php?id=123345">Click here to download</a>
另外,你可能想要通读文档头函数,那里有很多有用的信息。
http://www.php.net/manual/en/function.header.php