Как избежать ошибок «нехватка памяти» при программном создании большого количества узлов в drupal? - PullRequest
2 голосов
/ 28 апреля 2010

Я создаю около 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 ]

2 голосов
/ 28 апреля 2010

Да, Batch API может решить эту проблему. Это разделит использование вашей памяти на отдельные HTTP-запросы, каждый из которых имеет доступ к вашему полному ограничению памяти.

0 голосов
/ 29 апреля 2010

Вы когда-нибудь пользовались Views Bulk Operations? (http://drupal.org/project/views_bulk_operations) это идет со связанным представлением, показанным в admin / content / node2 Вы можете отредактировать это, чтобы включить действие «Выполнить код PHP», а также включить Batch 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); }<br> }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...