我正在以编程方式创建大约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,但从未使用过它。这是解决这个问题的正确工具吗?文档讨论超时,但不是内存问题。是否有更简单的东西可能会丢失?
答案 0 :(得分:2)
是的,Batch API可以解决这个问题。它会将您的内存使用量分解为单独的HTTP请求,每个请求都可以访问您的全部内存限制。
答案 1 :(得分:0)
但是,由于您正在创建节点,因此您应该在指令末尾取消设置$节点,并且应该降低内存使用量。尝试:
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);
}
}