2013-05-06 152 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多文件下載(的