通过PHP CLI将大型CSV导入到外部导入器会导致内存限制问题

通过PHP CLI将大型CSV导入到外部导入器会导致内存限制问题,php,performance,csv,import,command-line-interface,Php,Performance,Csv,Import,Command Line Interface,将包含400.000行的大型CSV文件导入数据库时遇到问题。这些最终的导入是由一个外来的导入脚本完成的,它在一个黑匣子中发挥了一些魔力,我无法影响它。这个脚本导致了内存限制问题,但正如我所说的,我必须使用它。我现在的问题是运行整个导入。我尝试了以下几点: loop with while over original csv read 1000 rows from csv create a new file with these rows give this new csv to doImport(

将包含400.000行的大型CSV文件导入数据库时遇到问题。这些最终的导入是由一个外来的导入脚本完成的,它在一个黑匣子中发挥了一些魔力,我无法影响它。这个脚本导致了内存限制问题,但正如我所说的,我必须使用它。我现在的问题是运行整个导入。我尝试了以下几点:

loop with while over original csv
read 1000 rows from csv
create a new file with these rows
give this new csv to doImport() function of the importer
但是外来脚本仍然会导致
内存限制问题。这是一些伪代码

$csvLib = new foo();
$foreignImporter = new bar();

while ($thausendRows) {

    $tmpFile = $csvClass->writeCSV($thausendRows);
    $foreignImporter->doImport($tmpFile);

}
在极度绝望的情况下,我还试图将循环中的csvLib和foreignImporter实例化为null,并在循环结束后将其取消设置,但这并没有改变任何事情


有没有办法将doImport分成小块运行,这样它就不会中断?我在本地机器上把内存限制提高到2G,它得到了第一个10万行importet。但这根本不是选择

好的,我找到了解决问题的方法。内存泄漏的外部部分被外包到自己的脚本中。我的脚本部分读取CSV。现在我在行上循环,每1000行写一个tmp CSV,并用这个tmpCSV在自己的脚本中调用外部部分。而不是$foreignImporter->doImport($tmpFile);我执行passthrough('script.php')。就这些。简单…如果你知道:)

缓冲它并将其分块导入你说的“缓冲它”是什么意思。我已经把它分成1000行了?请告诉我你知道缓冲区是什么。我不是以英语为母语的人,所以我可能理解错了。当你说“缓冲区”时,我想到的是ob_xy函数,但我不知道它们能帮我解决问题吗?在我看来,外来输入程序没有正确释放内存