【发布时间】:2015-12-26 16:25:53
【问题描述】:
我想做什么:
用户点击了一个网址(例如:BASE-URL/download/json)。
代码从数据库中获取大量数据并将其流式传输到 JSON 文件中,并提示用户下载该文件。
我尝试了什么:
创建了一个大型 (700 MB) JSON 文件。
尝试用代码打开它,但抛出了错误。
file_get_contents($file)
错误:
已用完 XXX 字节的允许内存大小(尝试分配 YYY 字节)
我在 Symfony2 中工作。数据最大可达 700MB。无法增加分配的内存。 我怎样才能做到这一点?如果需要任何进一步的信息,请发表评论。
【问题讨论】:
-
你尝试增加 php 内存限制
ini_set('memory_limit', '512M')?? -
我没有将它用于大文件,所以 YMMV,但 Symfony 有
StreamedResponse和BinaryFileResponse对象。实际上不记得我用的是哪一个......无论如何看看。文档:symfony.com/doc/current/components/http_foundation/… -
@egig 不能那样做。假设我没有这样做的访问权限/权限。
-
您的第一个问题不是流式传输文件,而是读取文件。这就是 PHP 窒息的地方;您应该逐行读取文件并按照@Darragh 的建议流式传输响应,以避免内存耗尽问题
-
@tchap - 明白了。我将分块从数据库中获取数据。但是如何流式传输并提示用户将其作为连续文件下载。
标签: php json symfony streaming