将PHP变量的内容下载到文件中


Download the Contents of a PHP Variable to a File

我有这个数据,我从我的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