在我的主要php文件中,我拿一个数组并将其传递给客户端,我正在使用角度。这就是我的回应...
header('Content-Type: application/json');
echo json_encode($response); //array passed to client
现在在我的角度控制器中,我通过GET请求获取此数据...
$http.get("../server.php").success(function(data) {
$scope.names = data;
});
我的index.php
中有一个下载按钮,点击后,控制器会获取此数据并向我的submit.php
文件发出POST请求,将数组发送到此文件...
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
//array converted to a string called $template
$contentFile = fopen("file.txt", "w");
fwrite($contentFile, $template);
fclose($contentFile);
将数组转换为字符串,然后写入文件。到此为止,一切正常。但最后一块代码从未被调用过......
header('Pragma: anytextexeptno-cache', true);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename=\"file.txt\"");
我正在尝试强制下载,但会忽略标头功能。我认为这是由于上面第一段代码中的初始echo
语句。
我该如何解决这个问题?如何防止echo语句取消标头功能?我是否需要重定向页面或其他内容?
答案 0 :(得分:1)
请记住,在任何实际输出之前必须调用header() 通过普通HTML标记,文件中的空行或PHP发送。
来自PHP doc
脚本不能为header()
的调用成功生成任何输出,并且该标题行实际上会发送给客户端代理。
你不能“阻止回声消除标题”。标题必须位于响应主体之前,而回声是主体的一部分。在您的情况下,{<1}}(以及任何其他输出)应在最后一个echo json_encode($response);
语句后生成。