我正在用PHP中的mySQL查询结果创建一个JSON字符串。但由于某种原因,当我将结果保存到文件进行健全性检查时,PHP“标题”函数不会附加任何内容。以下是代码:
header("Content-Type: application/json");
if(mysql_num_rows($result)){
$dataResults = '{"Data":[';
$first = true;
$row = mysql_fetch_assoc($result);
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
if($first) {
$first = false;
} else {
$dataResults = $dataResults . ',';
}
$dataResults = $dataResults . json_encode($row);
}
$dataResults = $dataResults . ']}';
} else {
$dataResults = '[]';
}
file_put_contents('/Applications/MAMP/htdocs/PHP/results.json', $dataResults);
输出看起来是o.k.,除了缺少“Content-Type:application / json”。我做错了什么?
答案 0 :(得分:3)
header
将HTTP标头附加到Web服务器的HTTP响应中。它不会产生任何输出或向任何文件写入任何内容。文件没有HTTP头,它们是HTTP协议的一部分,HTTP协议是用于在Web服务器和浏览器之间进行通信的语言。
答案 1 :(得分:1)
为什么header()
会向文件写入任何内容?
header()
使用mod_php
中的响应挂钩设置响应头信息,或者如果使用CGI则使用CGI等效设置。
文本文件不包含除编码之外的任何元信息(如果有)。
答案 2 :(得分:-3)
由于有几个人声明标题函数不会向文件写入任何内容,因此我会向您展示一些代码。
$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers");
$parnode = $dom->appendChild($node);
header("Content-type: text/xml");
//Iterate through the rows, adding XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
$node = $dom->createElement("marker");
$newnode = $parnode->appendChild($node);
$newnode->setAttribute("name", $row['bName']);
$newnode->setAttribute("address", $row['Street'].", ".$row['City']);
$newnode->setAttribute("lat", $row['lat']);
$newnode->setAttribute("lng", $row['lng']);
$newnode->setAttribute("distance", $row['distance']);
$newnode->setAttribute("Webpage", $row['Webpage']);
}
$dom->formatOutput = true;
$dom->save("/Applications/MAMP/htdocs/PHP/DOM.xml");
该代码的输出产生如下文件:
<?xml version="1.0"?>
<markers>
<marker name="Lake House Diagnostic Program " address="123 S. Lake St., Aurora" lat="41.757786" lng="-88.321419" distance="0.000166859373254629" Webpage="http://www.auntmarthas.org/"/>
</markers>
因此,当我创建XML输出时,您会看到它将生成标题。