2010-04-27 3 views
2

약 150 개의 노드를 프로그래밍 방식으로 만들고 하나의 요청으로 모두 수행 할 때 '메모리 부족'오류가 발생합니다. (필자는 노드를 생성하고 그들에() node_save를 호출하는 메뉴 콜백 있습니다.)프로그래밍 방식으로 drupal에서 많은 노드를 생성 할 때 '메모리 부족'오류를 방지하는 방법은 무엇입니까?

예 : 나는 BatchAPI 들어,하지만 그것을 사용한 적이

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

. 이 문제를 해결하는 데 적합한 도구입니까? 문서에서는 타임 아웃에 대해 이야기하지만 메모리 문제에 대해서는 언급하지 않습니다. 제가 누락되었을 수있는 간단한 것이 있습니까?

+0

다른 노드에 대한 정보를 얻으려면 node_load()를 사용하고 있습니까? – gapple

+0

아니요, 지금은 완전히 처음부터 만들어졌습니다. 위의 예제 코드를 약간 추가 할 것이다. – sprugman

+0

너무 많은 문제가 있어서는 안됩니다. 전자 컴퓨터 장치가 실행되는 RAM의 양은 얼마입니까? – Rimian

답변

2

예, 일괄 API로이 문제를 해결할 수 있습니다. 메모리 사용량을 별도의 HTTP 요청으로 분할하여 각각 전체 메모리 한도에 액세스 할 수 있습니다.

0

대량보기 작업을 사용한 적이 있습니까? (http://drupal.org/project/views_bulk_operations) admin/content/node2에 번들 된보기가 표시됩니다. "PHP 코드 실행"작업을 활성화하고 일괄 처리 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); 
    }
}

+0

음, 실제 코드는'for (1-150) {mymod_create_node(); }'그래서 메모리는 함수가 이론적으로 끝날 때마다 해제되어야한다. – sprugman