2

プログラムで約150のノードを作成していて、すべてを1つのリクエストで実行すると、「メモリ不足」エラーが発生します。(ノードを生成し、それらに対して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について聞いたことがありますが、使用したことはありません。これを回避するための適切なツールですか?ドキュメントではタイムアウトについて説明していますが、メモリの問題については説明していません。私が見逃しているかもしれないもっと簡単なものはありますか?

4

2 に答える 2

2

はい、BatchAPIはこの問題を解決できます。これにより、メモリ使用量が個別のHTTPリクエストに分割され、それぞれがフルメモリ制限にアクセスできるようになります。

于 2010-04-28T01:25:59.983 に答える
0

ビューの一括操作を使用したことがありますか?(http://drupal.org/project/views_bulk_operations)admin / content / node2に表示されるバンドルされたビューが付属しており、これを編集して「PHPコードの実行」アクションを有効にしたり、バッチAPIをオンにしたりできます。これは、プログラムでノードを変更する最も簡単な方法です。

ただし、ノードを作成しているので、命令の最後で$ nodeの設定を解除するだけで、メモリ使用量を減らすことができます。試す:

  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);
  }
}

于 2010-04-28T22:30:02.990 に答える