我遇到了一个问题,JSON字符串输出到HTTP客户端被截断附近关闭标签。
一个例子,
一种。 希望看到 - ...... “LAST_UPDATE”: “2014年6月10日20时46分38秒”, “garden_id”: “1”}], “消息”:空}
湾 实际上它是 - ...... “LAST_UPDATE”: “2014年6月10日20点46分38秒”, “garden_id”: “1”}], “消息”:NUL
最后两个characaters被截断由于某种原因!
我试着在Chrome和卷曲邮差都在控制台上,所有相同的输出。 所以看起来不是一个浏览器的具体问题。 在我的应用程序的JSON字符串来自关联数组在PHP json_encode。 PHP代码是用在Apache上运行CodeIgniter的框架。 我试图JSON字符串写入HTTP输出前一个文件,文件内容是100%正确的。 因此,这不是一个PHP JSON编码问题。
PHP的是非常简单的。 我有以下构建从数据库查询阵列(即FinalData的$)
{
"success": true,
"data": [
{
"file_id": "1",
"title": "xxx",
"create_date": "2014-05-18 21:30:19",
"auditor": "1",
"status": "1",
"last_updater": null,
"last_update": "2014-06-10 20:43:14",
"garden_id": "1"
},
{
"file_id": "2",
"title": "yyy",
"create_date": "2014-05-18 21:30:19",
"auditor": "1",
"status": "1",
"last_updater": null,
"last_update": "2014-06-10 20:43:14",
"garden_id": "1"
}
],
"message": null
}
“数据”有一个子阵列,它可能是一个漫长阵列依赖于数据库记录。 然后变量$ FinalData的被传递给具有低于一般逻辑输出功能:
header('Content-Type: '.$this->_supported_formats[$this->response->format]);
$output = $this->format->factory($finaldata)->{'to_'.$this->response->format}();
header('Content-Length: ' . strlen($output));
输出功能可以通过一个RESTful库建https://github.com/philsturgeon/codeigniter-restserver 。 在这种情况下,它等于
header('Content-Type: Application/json');
$output = json_encode($finaldata);
但是,我发现了一个有趣的事情,如果字符串长度超过8K的问题只发生。 而当我附上一个随机字符串,如“ZZZ”,以HTTP应答前,JSON字符串,这个问题就消失了。 我不知道背后的原因。 这是不正确的黑客,因为我无法证明8K是一个真正的门槛虽然。
有没有人遇到过这样的问题? 任何建议或意见赞赏。