2013-05-06 154 views
2

对不起,如果标题不解释太多。让我试着进一步解释。制作多个文件强制下载

我的代码看起来像这样:

<? 
//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"; 
} 
?> 

随着$阵列作为数据的数组。

现在有时数据量可能超过5000个,所以如果数据超过5000个,为每5000个正在回显的数据创建另一个文件。 Ea:如果$数组中有20,000条数据,则它将总共创建4个文件。

+1

可能重复http://stackoverflow.com/questions/3663127/php-multiple-file-download) – loganfsmyth 2013-05-06 00:47:55

+1

zip文件...没有别的办法 – 2013-05-06 00:48:57

回答

1

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

+0

你建议我做什么呢?我不希望我的任何文件包含超过5000个 – user1687621 2013-05-06 00:48:42

4

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

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

ti的优点在于,如果刷新页面,由于IFrame是动态的,他们不会尝试下载其他时间。如果出现错误,用户将看不到它们,因为它们隐藏了IFrame。因此,如果下载有问题,而不是发送头文件下载,您可以发送JavaScript警报或调用top.FunctionName('message');向用户发送某种警报。

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

希望它有帮助。

+0

好的答案,惊讶于现代浏览器中没有关于此的安全/锁定 – 2017-05-02 15:02:19

1

在这里,你是如何下载多个文件... 这些技巧是在同一页面上呈现许多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"; 
[PHP多文件下载(的