PHP 5.3 - как добавить содержимое в большой файл без загрузки в память

Я пытаюсь эффективно записать большой объем данных в файл (я относительно новичок в PHP) в устаревшей системе в файл, не убивая память. Он записывает только 50 клиентов за раз, но через некоторое время он значительно замедляется, поэтому я предполагаю, что он сохраняет весь файл в памяти. Есть идеи, как я могу просто добавить в файл и справиться с тем, что файл становится очень большим? Фрагмент кода ниже. Примечание: я застрял на PHP 5.3.

do{
     //Tell the collection which page to load.
     $collection->setCurPage($currentPage);
     $collection->load();
     $fp = fopen(Mage::getBaseDir('export') .'/customers.json', 'a');
     foreach ($collection as $customer){
        //write collection as json
        fwrite($fp, "," . json_encode($customer->getData()));
        $customerCount++;
     }
     fclose($fp);
     $currentPage++;
     //make the collection unload the data in memory so it will pick up the next page when load() is called.
     $collection->clear();
     echo memory_get_usage() . "\n";
     echo "Finished page $currentPage of $pages \n"; 
} while ($currentPage <= $pages);

$ fp был открыт в режиме добавления или? в этом вопросе много недостающего кода. добавление строк в цикле, как это, вероятно, не очень эффективно, но будет использовать меньше памяти, чем все сразу, так что это компромисс

user9487972 25.05.2018 00:27

проверьте с помощью is_writable () права пользователя файла

episch 25.05.2018 00:41

спасибо @episch я могу написать без проблем .. проблема в размере памяти.

Martin Thompson 25.05.2018 00:46

спасибо @smith Я расширил код. Память, используемая в цикле, очень мала, со временем она становится огромной, что говорит мне о том, что весь файл находится в памяти и расширяется.

Martin Thompson 25.05.2018 00:47

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

Dave S 25.05.2018 00:51

Спасибо @DaveS, это Magento, поэтому нам нужно загрузить коллекцию. Каждый раз это немного, и мы запускаем $ collection-> clear () дальше по коду. Я думаю, проблема в том, что когда я пишу в файл, он сохраняет весь файл в памяти.

Martin Thompson 25.05.2018 01:08

Он этого не делает. Проблема находится где-то в коде, будь то ваш или Magento, а не в обработке файлов PHP.

Sammitch 25.05.2018 01:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
57
0

Другие вопросы по теме