заголовки для принудительной загрузки tar-архива

У меня есть архив tar на сервере, который должен быть загружен через php. Это код, который я использовал:

$content=file_get_contents($tar); header("Content-Type: application/force-download"); header("Content-Disposition: attachment; filename=$tar"); header("Content-Length: ".strlen($content)); unlink($name); die($content); 

Файл загружен, но он сломан, и он не может быть открыт. Я думаю, что что-то не так с заголовками, потому что файл на сервере может быть открыт без проблем. Вы знаете, как я могу решить эту проблему?

UPDATE Я попытался напечатать iframe следующим образом:

 <iframe src="<?php echo $tar?>"></iframe> 

И загрузка работает, поэтому я уверен, что в заголовках чего-то не хватает.

    Related of "заголовки для принудительной загрузки tar-архива"

    Я использовал этот код, когда мне приходилось это делать:

     function _Download($f_location, $f_name){ header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Length: ' . filesize($f_location)); header('Content-Disposition: attachment; filename=' . basename($f_name)); readfile($f_location); } _Download("../directory/to/tar/raj.tar", "raj.tar"); //or _Download("/var/www/vhost/domain.com/httpdocs/directory/to/tar/raj.tar", "raj.tar"); 

    Попробуй это.

    Не используйте file_get_contents() а затем echo или print для вывода файла. Это загружает полное содержимое файла в память. Большой файл может / будет превышать memory_limit вашего сценария и убить скрипт.

    Для того, чтобы сбрасывать содержимое файла клиенту, лучше всего использовать readfile() – он будет правильно разрывать фрагменты файлов и выплевывать их на клиенте, не превышая доступную память. Не забудьте выключить буферизацию вывода, прежде чем вы это сделаете, иначе вы просто просто делаете file_get_contents() снова

    Итак, вы закончите с этим:

     $tar = 'somefile.tar'; $tar_path = '/the/full/path/to/where/the/file/is' . $tar; $size = filesize($tar_path); header("Content-Type: application/x-tar"); header("Content-Disposition: attachment; filename='".$tar."'"); header("Content-Length: $size"); header("Content-Transfer-Encoding: binary"); readfile($tar_path); 

    Если ваш tar-файл фактически gzipped, используйте вместо него «application / x-gtar».

    Если файл по-прежнему выходит из строя после загрузки, выполните некоторую проверку на стороне клиента:

    1. Загружен ли файл 0 байтов, но процесс загрузки, по-видимому, занимает намного больше времени, чем потребовалось бы для передачи 0 байтов, то это то, что на стороне клиента предотвращает загрузку. Сканер вирусов? Trojan?
    2. Загружен ли файл частично, но меньше оригинала? Что-то убило передачу преждевременно. Брандмауэр Overeager? Менеджер загрузок плохой день? Буферизация вывода активна на сервере, а последний буферный блок не очищается правильно?
    3. Является ли загруженный файл тем же размером, что и оригинал? Выполняйте контрольную сумму md5 / sha1 / crc на обеих копиях. Если это то же самое, то что-то не так с приложением, открывающим файл, а не с самим файлом
    4. Загружен ли файл больше оригинала? Откройте файл в блокноте (или что-то лучше, например, блокнот ++, который не требует много лет, чтобы открыть большие файлы) и посмотреть, не появлялись ли какие-либо сообщения о предупреждениях PHP или некоторые невидимые пробелы, которые вы не видите в своем скрипте, вставили в загрузку в начале или конец файла.

    Попробуйте следующее:

     $s_filePath = 'somefile.ext'; header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'. s_filePath.'"'); header('Content-Transfer-Encoding: binary'); header('Accept-Ranges: bytes'); header('Cache-control: private'); header('Pragma: private'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header("Content-Length: ".filesize($s_filePath)); $r_fh = fopen($s_filePath,'r'); while(feof($r_fh) === false) { $s_part = fread($r_fh,10240); echo $s_part; } fclose($r_fh); exit(); 

    Используйте Content-Type: application / octet-stream или Content-Type: application / x-gtar