我正在开发一个基于 Symfony 2 的项目,需要使用 cron 任务定期从 .csv 文档中导入 150 万个产品。
导入当前如下所示:
...
Propel::disableInstancePooling();
$fp = fopen($file, 'r');
while ( !feof($fp) ) {
$line = fgets($fp, 2048);
$data = str_getcsv($line, "\t");
$product = new Product();
$product->setId($data[0]);
$product->setTitle($data[1]);
...
$product->save();
}
...
然而,大约 5 分钟后,Apache 达到其 512MB 内存分配并抛出以下错误:
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 78 bytes) in /var/www/vhosts/myapp.local/app/cache/dev/classes.php on line 9451
我已经禁用了 Propel 的实例池(这在过去在其他框架中的 Propel 驱动的导入中一直有效)并且问题仍然存在,所以我想知道 Symfony 2 是否正在执行任何类型的缓存(基于抛出的错误)。
有没有人有任何在 Symfony 2 中执行大型导入的经验,可以为我指明正确的方向?