2013-11-28 4 views
0

Так что я использую решение, которое я нашел в Интернете, чтобы отправить файл, и он действительно работает! Но я не понимаю, почему :(Почему readfile необходимо после флеша

В моем решении я генерирующего CSV (тест; тест; тест; тест, тест).

Так я говорю своим заголовок это CSV-файл и что оно должно быть вложение, а также:

<?php 
$nom = time().'.csv'; 
header('Content-type: text/csv'); 
header('Content-disposition: attachment;filename='.$nom); 
?> 

Я понимаю, что это просто, но когда дело доходит до:

flush(); 
readfile($nom); 

я понимаю, что на одном уровне(); это devlivering буфер право клиента? Но почему readfile(); необходимо ? Я имею в виду, если контент отправлен, зачем мне читать файл снова?

+1

'flush()' не имеет никакого отношения к отправке содержимого файла, он просто сбрасывает все, что вы уже отозвали. – Barmar

+0

В этом случае 'flush()' отправляет указанные вами заголовки. –

ответ

1

readfile($nom); действительно читает ваш файл и повторяет его, поэтому клиент МОЖЕТ получить данные. Без этого выход csv будет пустым.

flush() просто гарантирует освобождение выходного буфера перед началом записи. Я думаю, его даже не требуется в этот момент. Он просто уверен, что выходной буфер, который вы пишете с readfile, пуст при этом.

Смежные вопросы