使多个文件强制下载

时间:2013-05-06 00:42:41

标签: php arrays header

对不起,如果标题没有解释。让我试着进一步解释。

我的代码如下:

<?
//Grab the number in count.txt
$count = intval(file_get_contents('count.txt'));
//Move the number up one
file_put_contents('count.txt', ++$count);
$number = file_get_contents('count.txt');
//Force Download
header('Content-Disposition: attachment; filename=DataFiles'.$number.".csv");
header('Content-Type: application/octet-stream');

//The data

foreach($array as $info){
echo $info."\n";
}
?>

$ array是一个数组数组。

现在有时数据量可能超过5000,因此如果数据超过5000,则为每个回显的5000个数据创建另一个文件。 Ea:如果$ array中有20,000个数据,那么它将总共生成4个文件。

4 个答案:

答案 0 :(得分:11)

您无法发送超过1个文件以响应HTTP请求。

我建议将文件压缩到单个文件中并返回。

请参阅:Download multiple files as a zip-file using php

答案 1 :(得分:5)

在这里,您可以下载多个文件... 这些技巧在同一页面中渲染了许多iframe。 每个帧都有不同的源,强制下载不同的文件

<?php
for($i = 0; $i<5; $i++){
    echo '<iframe src="test_multiple_downfile.php?text='.$i.'">/iframe>';
}
?>

test_multiple_downfile.php内容是这样的:

$out = $_GET['text'];
header("Content-Type: plain/text");
header("Content-Disposition: Attachment; filename=testfile_".$out.".txt");
header("Pragma: no-cache");
echo "$out";

答案 2 :(得分:4)

我使用AJAX和jQuery来做到这一点, 一种方法是准备所有文件并将它们放入每个文件都有唯一ID的会话中。 返回ajax调用是调用带有ID列表的JavaScript。

JavaScript必须创建尽可能多的隐藏IFrame并且您有ID,并且在每个ID中都调用PHP来下载部件。这就是你下载标题的地方。完成字节转储后,将其从会话中删除。使用唯一ID并在下载后删除它们确保没有人下载两次相同的文件。

ti的好处在于,如果刷新页面,因为IFrame是动态的,他们不会尝试下载另一个时间。如果出现错误,用户将看不到它们,因为它们是隐藏的IFrame。

因此,如果下载有问题,您可以发送JavaScript警报或调用top.FunctionName('message');而不是发送下载标题。向用户发送某种警报。

我最多可以同时下载10次。但用户也会提示10次。如果你不想拉链,你必须考虑这一点。

希望它有所帮助。

答案 3 :(得分:1)

不,这是不可能的,因为 HTTP协议旨在为每个请求发送一个文件