如何在drupal中以编程方式生成大量节点时如何避免“内存不足”错误?

时间:2010-04-27 21:56:11

标签: drupal drupal-nodes

我正在以编程方式创建大约150个节点,并在单个请求中执行所有操作时遇到“内存不足”错误。 (我有一个菜单回调,它生成节点并在它们上调用node_save()。)

示例:

for($i=0; $i<150; $i++) {
    $node = new stdClass(); 
    $node->title="Foo $i";
    $node->field_myfield[0]['value'] = "Bar $i";
    ...
    node_save($node);
}

我听说过BatchAPI,但从未使用过它。这是解决这个问题的正确工具吗?文档讨论超时,但不是内存问题。是否有更简单的东西可能会丢失?

2 个答案:

答案 0 :(得分:2)

是的,Batch API可以解决这个问题。它会将您的内存使用量分解为单独的HTTP请求,每个请求都可以访问您的全部内存限制。

答案 1 :(得分:0)

你曾经使用过Views Bulk Operations吗? (http://drupal.org/project/views_bulk_operations) 它带有在admin / content / node2上显示的捆绑视图 您可以编辑它以启用“运行PHP代码”操作,以及启用Batch API。 这是编程修改节点的最简单方法。

但是,由于您正在创建节点,因此您应该在指令末尾取消设置$节点,并且应该降低内存使用量。尝试:

  for($i=0; $i 150; $i++) {
    $node = new stdClass(); 
    $node->title="Foo $i";
    $node->field_myfield[0]['value'] = "Bar $i";
    ...
    node_save($node);
    unset($node);
  }
}