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

时间:2014-05-20 14:13:28

标签: php mysql json

我从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文件内容......正如你所看到的,编码都搞砸了。

您能否帮我确定问题,并可能就如何解决问题给我任何想法。

任何帮助都会非常感激:]

2 个答案:

答案 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>

另外,您可能想要阅读标题函数的文档,那里有很多有用的信息。

http://www.php.net/manual/en/function.header.php