зачем нужен readfile после флеша

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

В моем решении я создаю CSV (тест, тест, тест, тест, тест).

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

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

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

flush();
readfile($nom);

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


person Fortune    schedule 28.11.2013    source источник
comment
flush() не имеет ничего общего с отправкой содержимого файла, он просто сбрасывает все, что вы уже повторили.   -  person Barmar    schedule 28.11.2013
comment
В этом случае flush() также отправляет указанные вами заголовки.   -  person Bailey Parker    schedule 28.11.2013


Ответы (1)


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

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

person dognose    schedule 28.11.2013