Я знаю, как сделать загрузку происходит, когда загрузка происходит, она добавляет html с веб-страницы, которая вызывает загрузку. Как отфильтровать HTML?форсирование файла скачать с php
ответ
Я понимаю, что вы пытаетесь вывести некоторый поток для загрузки с PHP-страницы?
Если да, то не выводите это содержимое со страницы, содержащей HTML, а перенаправляйте на отдельную страницу php, которая выводит только загружаемый поток, при необходимости с заголовками.
Это похоже на половину ответа. Это просто выше «Если вы хотите его загрузить, заставьте его скачать». – Jake
Если я правильно понимаю вас, это общая проблема. Я решил ее с помощью ob_start в начале моего index.php (старт/корень/файл запись) до любого вывода и встречается, загрузки я сделать следующее:
ob_end_clean();
header("Content-Type: application/octet-stream; ");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". filesize("thefileinquestion").";");
header("Content-disposition: attachment; filename=thefileinquestion");
$fp = fopen(thefileinquestion, "r");
while(!feof($fp)){
$buffer = fread($fp, 1024);
echo $buffer;
flush();
}
fclose($fp);
die();
Update
Команда ob_start
выполняет буферизацию любого выхода (например, через echo, printf) и предотвращает отправку пользователю пользователя до фактической загрузки. ob_end_clean
, чем останавливает это поведение, и позволяет снова производить прямой выход. НТН.
Вы можете заменить все с '$ fp = ...' на 'fclose()' с вызовом readfile(). –
Это выглядит очень аккуратной альтернативой моему раздутому коду. Будет использовать это в будущем! СПАСИБО! – merkuro
1) Отправьте фактический тип носителя, а не «application/octet-stream». 2) В HTTP-заголовке нет поля заголовка Content-Transfer-Encoding. В самом деле. –
Удостоверьтесь, что вы не выводите дополнительные данные после завершения потока файлов. Используйте вызов для выхода() для завершения выполнения страницы после завершения потока файлов. Любые символы после закрывающего тега??> (Например, новая строка) могут также вызвать проблемы с загрузкой.
Перемещение сценария загрузки в собственный файл должно облегчить поиск проблем, поскольку это делает только одно. Чтобы избежать вывода каких-либо окончательных новых строк, в этом случае вы также можете опустить тег закрытия??>, А также в конце вашего скрипта.
Можете ли вы уточнить, в идеале, с некоторым примером кода? Неясно, что вы подразумеваете под «вызывает загрузку» –