Перестань использовать временные файлы в PHP

Если мы хотим создать CSV-файл в PHP, то сделать это можно при помощи функции fputcsv(). При этом удобно сохранить результат в временный файл, чтобы позже с ним было проще работать. Например предоставить файл для скачивания или отправить его по E-Mail.

Данный временный файл сохраняется где-то на жестком диски и нам самим приходится позаботиться о том, чтобы он был удалён. Мы можем написать Cron, который будет время от времени удалять старые файлы, и избовлять нас от лишнего мусора, однако данный подход всё равно не идеален.

Злоумышленик может использовать DDOS-атаку: просто вызывая функцию, которая будет создавать файл и тем самым может довольно быстро забить весь жесткий диск на сервере. Если же веб-сервер и сервер с базой данных находится на одной и той же машине, то таким способом можно легко положить I/O шину.

Используй потоки (Streams) вместо временных файлов

По мимо file:// и http:// есть и другие протоколы, которые поддерживает PHP, весь список можно посмотреть здесь: https://secure.php.net/manual/ru/wrappers.php. Нам же интересен протокол "php://".

Пример:

$stream = fopen('php://memory', 'r+');
fputcsv($stream, ['php', 'land'], ';', '"');
rewind($stream);
$content = stream_get_contents($stream);
fclose($stream);

Поток памяти (Memory-Stream) доступен только через обработчик файлов (File-Handle), при этом повторный вызов fopen('php://memory') создаст новый поток. Как это работает? Открывается новый поток, в него сохраняются данные, с помощью rewind() перемещается указатель в начало, чтобы данные можно было легко прочитать.

Это позволяет навсегда забять про временные файлы в PHP.

Если мы будем использовать данный подход при работе с большими данными (Big Data), то у нас может быстро закончиться память. Для этого мы можем указать предел использования памяти.

$stream = fopen('php://temp/maxmemory:10485760');

Надеюсь дананя статья была вам интересна и вы как я больше не будете использовать временные файлы в PHP.


Оставьте комментарий!

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий:


Написать новый комментарий

Видео

Самые полезные видео на темы "веб-разработка", "Linux" и "IT". Смотри и обучайся!

Подробнее »

Сделки

Самые горячие и выгодные сделки, акции и скидки на видео-курсы, софт, услуги, книги и железо из всего рунета.

Подробнее »

Планета

Наша планета собирает интересные статьи из различных источников и объединяет их в одну ленту. Которую можно читать на нашем сайте.

Подробнее »