Как правильно работать с большими массивами данных в PHP, чтобы не убить память и сервер. — 6 июля 2026 г. в 04:59:08.385
Как правильно работать с большими массивами данных в PHP, чтобы не убить память и сервер. Когда мы пишем скрипты, которые обрабатывают тысячи (или миллионы) строк — будь то импорт из CSV, выгрузка из БД или массовая обработка, — часто допускается ошибка: всё грузится в память сразу. В итоге сервер умирает от нехватки памяти, а скрипт - от таймаута. Что делать? 1. Частями, а не всё сразу Например, если вы работаете с PDO: $stmt = $pdo->query("SELECT * FROM big_table"); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { process($row); // Обрабатываем каждую строку на лету } Так данные не будут храниться в огромном массиве — обработка идёт построчно. 2. Используйте генераторы Генераторы (yield) позволяют работать с большими данными лениво: function getRows($pdo) { $stmt = $pdo->query("SELECT * FROM big_table"); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { yield $row; } } foreach (getRows($pdo) as $row) { process($row); } Память почти не растёт — магия генераторов. 3. Разбивайте на батчи Иногда эффективнее брать кусками: $limit = 1000; for ($offset = 0; ; $offset += $limit) { $rows = $pdo->query("SELECT * FROM big_table LIMIT $limit OFFSET $offset")->fetchAll(); if (!$rows) break; foreach ($rows as $row) { process($row); } } 4. Не забывайте про стриминг файлов Если это CSV или JSON — читайте построчно через fgets() или stream_get_line(), а не file_get_contents(). Такие подходы сильно упрощают жизнь и экономят ресурсы. А вы как работаете с большими данными? Используете генераторы или предпочитаете батчи? 👉 @php_lib

