我必须执行一个可以生成响应非常大的字符串的查询(最多1Gb),这基本上是一个大的,大的JSON数组。是的,分页是有序的,但我强调这个概念,以便让你了解。 Symfony只是使用学说来得到答案:
$stmt = $this->getEntityManager()->getConnection()->prepare(self::Q_GET_NUM_TIMEBOX);
$stmt->bindValue('t_end', $tEnd);
$stmt->bindValue('t_granularity', $tGranularity);
$stmt->bindValue('t_span', $varSelection->getStart());
$stmt->execute();
$resData = $stmt->fetchColumn(0);
然后我通过设置从执行返回的内容来创建Response
。
$res = new Response();
$res->setStatusCode(200);
$res->headers->set('Content-Type', 'application/json');
$res->setContent($resData);
请注意,为了清楚起见,我过度简化了代码:我实际上有controller
,handler
服务执行请求,Repository
返回查询响应。
直接回答问题:这意味着PHP必须在内存中保存大量数据,我想知道是否有更轻松的方法来返回响应,以便减少带有大量数据的PHP引擎。< / p>
答案 0 :(得分:4)
这意味着PHP必须拥有大量数据
PHP不需要在内存中保留整个响应主体。通过output buffers和Symfony response streaming,您可以逐行获取结果集并按块发送数据。不幸的是,我不知道PHP中JSON流编码的良好尝试解决方案,但您可以手动实现它(1,2)。
更新(2017-02-27):
Streaming JSON Encoder是一个PHP库,它提供了一组类来帮助以流方式编码JSON,即允许您逐位编码JSON文档,而不是一次编码整个文档。