Извините, если заголовок не объясняет многое. Позвольте мне попытаться объяснить дальше.
У меня есть код, который выглядит так:
<? //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: Если в массиве $ есть 20 000 единиц данных, тогда он составит в общей сложности 4 файла.
Вы не можете отправить более 1 файла в ответ на запрос HTTP.
То, что я хотел бы предложить, – это zip файл в одном файле и вернуть его.
См. Загрузка нескольких файлов в виде zip-файла с использованием php
Я использую AJAX и jQuery для этого, один из способов сделать это – подготовить все ваши файлы и поместить их в сеанс, где каждый файл имеет уникальный идентификатор. Возврат вызова ajax – это вызов JavaScript со списком идентификаторов.
JavaScript должен создать столько скрытых IFrame, и у вас есть идентификаторы, и в каждом из них вызовите PHP для загрузки частей. Здесь вы помещаете свои заголовки для загрузки. Как только вы закончите дамп байтов, вы удалите их из сеанса. Используя уникальный идентификатор и удаляйте их после загрузки, убедитесь, что никто не загружает дважды тот же файл.
Что приятно в ti, так это то, что если вы обновите страницу, так как IFrames были динамическими, они не пытаются загружать другое время. И если есть ошибка, пользователь не увидит их, поскольку они являются скрытыми IFrames.
Следовательно, если есть проблема с загрузкой, вместо отправки заголовка для загрузки вы можете отправить предупреждение JavaScript или вызвать top.FunctionName ('message'); для отправки какого-либо предупреждения пользователю.
В то же время я смог одновременно загрузить до 10 загрузок. Но пользователю будет предложено также 10 раз. Это то, что вам нужно рассмотреть, если вы не хотите их застегивать.
Надеюсь, поможет.
Нет, это невозможно, потому что протокол HTTP был разработан для отправки одного файла за один запрос .
Здесь вы загружаете несколько файлов … Трюки обрабатывают многие 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";