PHP5.3-如何在不加载到内存的情况下将内容附加到大文件中

PHP5.3-如何在不加载到内存的情况下将内容附加到大文件中,php,php-5.3,Php,Php 5.3,我试图在不破坏内存的情况下,将遗留系统中的大量数据高效地写入文件(我对PHP比较陌生)。它一次只写50个客户,但过了一段时间,速度就慢了很多,所以我假设它将整个文件保存在内存中。你知道我怎样才能附加到一个文件中,并处理文件变得非常大的问题吗?下面是代码片段。注意:我坚持使用PHP5.3 do{ //Tell the collection which page to load. $collection->setCurPage($currentPage); $co

我试图在不破坏内存的情况下,将遗留系统中的大量数据高效地写入文件(我对PHP比较陌生)。它一次只写50个客户,但过了一段时间,速度就慢了很多,所以我假设它将整个文件保存在内存中。你知道我怎样才能附加到一个文件中,并处理文件变得非常大的问题吗?下面是代码片段。注意:我坚持使用PHP5.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);
do{
//告诉集合要加载的页面。
$collection->setCurPage($currentPage);
$collection->load();
$fp=fopen(Mage::getBaseDir('export')。/customers.json,'a');
foreach($customer作为$collection){
//将集合写入json
fwrite($fp,“,”.json_encode($customer->getData());
$customerCount++;
}
fclose($fp);
$currentPage++;
//使集合卸载内存中的数据,以便在调用load()时它将拾取下一页。
$collection->clear();
回显内存\u获取\u用法()。“\n”;
echo“已完成的页面$currentPage,共$pages\n”;

}虽然($currentPage是在追加模式下打开的$fp,还是?此问题中缺少很多代码。像这样在循环中添加行可能不是很有效,但一次使用的内存比所有行都少,因此这是一种与is_writable()的权衡文件用户RightsHanks@epich我可以写没有问题。问题是内存大小。谢谢@smith,我扩展了代码。循环中使用的内存非常小,随着时间的推移它会变得很大,这告诉我整个文件都在内存中并在扩展。试着注释一下文件代码,load()本身可能就是消耗内存的原因。