Проблема с принудительной загрузкой файлов с помощью PHP - PullRequest
0 голосов
/ 13 июня 2011

У меня проблема с принудительной загрузкой файла браузером.Я нашел такое решение моей проблемы:

header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=$name_of_file");
header("Pragma: no-cache");
header("Expires: 0");
readfile($name_of_file);
exit;

Но после этого у меня есть файл на экране.Даже это дает тот же результат:

header('content-type: text/xml');
header('Content-Disposition: attachment;filename="$filename"');
echo "TEST";
exit;

Где может быть проблема?

Ответы [ 3 ]

2 голосов
/ 13 июня 2011

К сожалению, вложение для Content-Disposition поле не поддерживается так хорошо.Вот почему значение поля заголовка Content-Type является более важным :

Если заголовок [Content-Disposition] используется в ответе с приложением/ octet-stream content-type, подразумеваемое предложение заключается в том, что пользовательский агент не должен отображать ответ, а непосредственно вводит диалоговое окно "сохранить ответ как ...".

Хотя неизвестный тип контента, такой как application / force-download должен интерпретироваться как application / octet-stream :

Ожидается, что многие другие подтипы «приложения» будут определены в будущем.Реализации MIME должны как минимум обрабатывать любые нераспознанные подтипы как эквивалентные «application / octet-stream».

Но вы должны лучше проиграть и использовать application / octet-stream явно.

1 голос
/ 13 июня 2011
<?php
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($name_of_file));
header("Content-disposition: attachment; filename=" . $name_of_file);
readfile($name_of_file);
die();

1) Вы должны убедиться, что файл существует и доступен для чтения

2) Возможно, стоит добавить ob_end_clean(); перед отправкой заголовков (если вы уже что-то отправили)

РЕДАКТИРОВАТЬ: Удалено бесполезно ; в соответствии с комментариями от porneL, thnx

0 голосов
/ 13 июня 2011

Просто используйте:

header('Content-Disposition: attachment');

и объедините его с mod_rewrite или другим, чтобы ввести правильное имя файла в URL .

.вы не используете mod_rewrite, это тоже работает;

http://example.com/download_script.php/nice_filename.xml

Это вызывает download_script.php для вызова.Браузеры «увидят» nice_filename.xml в качестве имени файла, и вам не понадобится очень грязный и ненадежный атрибут filename=….

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...