Рекомендации по экспорту CSV в PHP: выходной буфер и временный файл

Рекомендации по экспорту CSV в PHP: выходной буфер и временный файл

сценарий

Я выполняю SELECT в базе данных, которая возвращает любое количество строк, может быть несколько или несколько (один миллион +), эти строки должны войти в CSV-файл с первым заголовком строки.

сомнение

Я знаю два способа экспорта CSV-файлов с PHP: использование выходного буфера php://output или создание временного файла, подача его пользователю, а не удаление.

Какой способ лучше, зная, что это небольшой файл или очень большой? Рассмотрим ограничение памяти PHP (в php.ini), время ожидания запроса и т. Д.

Это зависит от ситуации.

Используйте выходной буфер, когда вы знаете, что файл не смехотворно большой, и когда это загрузка, которая часто встречается.

Когда у вас есть что-то большое, которое будет загружено большое количество раз (одновременно), записать его в файл, возможно, лучше осветлить нагрузку на вашу базу данных и сайт.

Использование временного файла в случае, если у вас есть большой файл, является единственным хорошим вариантом.

  1. вы можете перенаправить второй запрос (если файл существует) непосредственно в ваш файл и позволить веб-серверу обслуживать его без выполнения php.
  2. если клиент отключился, загрузив файл через api, – в большинстве случаев он начнет загружаться снова;
  3. более того, вы получите журналы доступа на своем веб-сервере, чтобы проверить, кто и сколько раз обращается к этому файлу.

Я думаю, что ответ довольно очевиден: напишите непосредственно на php://output . Это то же самое, что и echo .. ; вывод будет отправлен клиенту более или менее напрямую. Он может или не может быть буферизирован бит, но если у вас нет явной буферизации вывода, или ваш веб-сервер имеет смехотворно большой буфер, он отправит его прямо. «Отправка файла» (предположительно через readfile ) передаст данные, хотя тот же выходной буфер, но будет намного сложнее и подвержен ошибкам.