форсировать загрузку файлов с помощью php - PullRequest
0 голосов
/ 16 июня 2009

Я знаю, как сделать загрузку, когда загрузка происходит, он добавляет HTML с веб-страницы, которая вызывает загрузку. Как отфильтровать HTML?

Ответы [ 3 ]

4 голосов
/ 16 июня 2009

Если я вас правильно понимаю, это обычная проблема. Я решил это, используя ob_start в начале моего index.php (start / root / entry file) до ЛЮБОГО вывода, и для загрузки я делаю следующее:

  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();

Обновление

Команда ob_start буферизует любой вывод (например, через echo, printf) и предотвращает отправку чего-либо пользователю ПЕРЕД фактической загрузкой. ob_end_clean чем останавливает это поведение и снова разрешает прямой вывод. НТН.

1 голос
/ 16 июня 2009

Убедитесь, что вы не выводите дополнительные данные после завершения потока файлов. Используйте вызов метода exit (), чтобы завершить выполнение страницы после завершения потока файлов. Любые символы после закрывающего тега '?>' (Например, перевод строки) также могут вызвать проблемы с загрузкой.

Перемещение скрипта загрузки в собственный файл должно облегчить поиск любых проблем, потому что он делает только одно. Чтобы не выводить какие-либо заключительные символы новой строки, вы можете опустить закрывающий тег «?>» И в этом случае в конце вашего скрипта.

1 голос
/ 16 июня 2009

Я так понимаю, вы пытаетесь вывести какой-нибудь поток для загрузки со страницы PHP?

Если это так, то не выводите этот контент со страницы, содержащей HTML, а перенаправьте на отдельную страницу php, которая выводит только поток загрузки, с заголовками, если необходимо.

...