Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在symfony2中下载(流式传输)大型文件_Php_Json_Symfony_Streaming - Fatal编程技术网

Php 如何在symfony2中下载(流式传输)大型文件

Php 如何在symfony2中下载(流式传输)大型文件,php,json,symfony,streaming,Php,Json,Symfony,Streaming,我想做什么: 用户点击一个url(例如:BASE-url/download/json)。 代码从数据库中获取大量数据,并将其流式传输到JSON文件中,然后提示用户下载该文件 我的尝试: 创建了一个大的(700 MB)JSON文件。 尝试用代码打开它,但引发了错误 文件获取内容($file) 错误: 已耗尽XXX字节的允许内存大小(尝试分配YYY 字节) 我在Symfony2工作。数据大小可达700MB。无法增加分配的内存。 我怎样才能做到这一点?如果需要任何进一步的信息,请发表评论。在所有上述评

我想做什么:
用户点击一个url(例如:BASE-url/download/json)。
代码从数据库中获取大量数据,并将其流式传输到JSON文件中,然后提示用户下载该文件

我的尝试:
创建了一个大的(700 MB)JSON文件。 尝试用代码打开它,但引发了错误

文件获取内容($file)

错误:

已耗尽XXX字节的允许内存大小(尝试分配YYY 字节)

我在Symfony2工作。数据大小可达700MB。无法增加分配的内存。
我怎样才能做到这一点?如果需要任何进一步的信息,请发表评论。

在所有上述评论的帮助下,我能够实现我想要的。
下面是相同的代码

$response = new StreamedResponse();  
$i = -999999;  
$response->setCallback(function () {  
    while($i < 999999){  
        echo '{"G1ello":"hualala"}';  
        $i = $i + 1;  
    }  
});  
$filename = "Data.json";  
$contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $filename);
$response->headers->set('Content-Type', 'application/json');
$response->headers->set('Content-Disposition', $contentDisposition);
return $response;
$response=新的流响应();
$i=-999999;
$response->setCallback(函数(){
而($i<999999){
回声{“G1ello”:“hualala”};
$i=$i+1;
}  
});  
$filename=“Data.json”;
$contentDisposition=$response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION\u附件,$filename);
$response->headers->set('Content-Type','application/json');
$response->headers->set('Content-Disposition',$contentDisposition);
返回$response;

它创建了一个我可以下载的大文件。正是我想要的。发布解决方案,以便它可以帮助解决同一问题。

您是否尝试增加php内存限制
ini\u集(“内存限制”,“512M”)
?我没有将它用于大文件,所以YMMV,但Symfony有
streamdresponse
BinaryFileResponse
对象。我真的记不起我用了哪一个。。。不管怎样,看看吧。医生:@egig不能那样做。假设我没有访问权限/权限这样做。您的第一个问题不是流式传输文件,而是读取文件。这就是PHP窒息的地方;您应该逐行读取文件,并按照@Darragh的建议流式处理响应,以避免内存耗尽problems@tchap-明白了。我将从数据库中分块获取数据。但如何流式传输并提示用户将其作为连续文件下载。