12

タイトルがあまり説明されていない場合は申し訳ありません。さらに説明してみましょう。

次のようなコードがあります。

<?
//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

4 に答える 4

16

HTTP 要求に応答して複数のファイルを送信することはできません。

私が提案するのは、ファイルを単一のファイルに圧縮して返すことです。

参照: PHP を使用して複数のファイルを zip ファイルとしてダウンロードする

于 2013-05-06T00:51:43.713 に答える
16

複数のファイルをダウンロードする方法は次のとおりです...トリックは、同じページに多くの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";
于 2017-08-29T11:26:11.823 に答える
4

私は AJAX と jQuery を使用してそれを行います。その 1 つの方法は、すべてのファイルを準備し、各ファイルが一意の ID を持つセッションに配置することです。ajax 呼び出しの戻り値は、ID のリストを含む JavaScript への呼び出しです。

JavaScript は非表示の IFrame をできるだけ多く作成する必要があり、ID があり、それぞれに PHP を呼び出してパーツをダウンロードします。そこにダウンロード ヘッダーを配置します。バイトのダンプが終了したら、それらをセッションから削除します。一意の ID を使用し、ダウンロード後にそれらを削除することで、誰も同じファイルを 2 回ダウンロードしないようにします。

ti の優れている点は、ページを更新しても、IFrame が動的であるため、別の時間にダウンロードしようとしないことです。エラーが発生した場合、それらは非表示の IFrame であるため、ユーザーには表示されません。

したがって、ダウンロードに問題がある場合は、ダウンロード用のヘッダーを送信する代わりに、JavaScript アラートを送信するか、top.FunctionName('message'); を呼び出すことができます。ユーザーに何らかのアラートを送信します。

同時に最大 10 個のダウンロードを行うことができました。ただし、ユーザーは 10 回もプロンプトを表示されます。これは、圧縮したくない場合に考慮しなければならないことです。

于 2015-06-05T15:12:47.917 に答える