PHP; Экспорт CSV в выходной буфер: загруженный файл пуст. Почему?

Файловый ресурс – fopen('php://output')

Список заголовков:

Content-Type: application/csv
Content-Disposition: attachment; filename="test.csv"
Cache-Control: max-age=0
Expires: 0
Cache-Control: must-revalidate
Pragma: public

Как скачивать:

ob_clean();
readfile("php://output");
exit;

ob_get_contents() перед чтением файла не пуст, и данные, которые я тоже записываю в файл.

Но загруженный файл пуст. Почему


person Nikita Karpenko    schedule 29.04.2020    source источник


Ответы (1)


https://www.php.net/manual/en/wrappers.php.php#wrappers.php.output

Говорит:

php://output — это поток только для записи, который позволяет вам записывать в механизм выходного буфера так же, как print и echo.

Вы пытаетесь читать из него, что явно невозможно сделать.

Мне непонятно, чего вы на самом деле пытаетесь достичь.

person KIKO Software    schedule 29.04.2020
comment
Спасибо. Это наводит меня на какую-то идею. Я просто заменил ob_clean на flush и все работает. Но я не могу абсолютно признать. Если флеш сбросит и буфер, даже в этом случае readfile работает хорошо. Я имею в виду, что если буфер удален, то, я думаю, php://output должен быть пустым, и readfile не будет работать. Но это не так и файл загружается корректно с некоторыми данными. - person Nikita Karpenko; 29.04.2020