node_save - крошится при выполнении [Решен]

Главные вкладки

Аватар пользователя Dimedrius Dimedrius 7 октября 2012 в 20:50

Вопрос таков: как заставить корректно работать node_save? При запуске из самописного модуля, в логи апача вываливается "PHP Fatal error: Allowed memory size of 36700160 bytes exhausted (tried to allocate 322980 bytes) in /home/www/includes/database.mysql-common.inc on line 41" (каждый раз разная строка, причем!). Периодически по таймауту завершался. Сохранение же материалов проходит безо всяких проблем. Вызов функции происходит внутри hook_nodeapi.

Комментарии

Аватар пользователя Dimedrius Dimedrius 7 октября 2012 в 23:25
stdClass Object
(
    [nid] => 145
    [type] => video
    [language] => ru
    [uid] => 1
    [status] => 1
    [created] => 1345837041
    [changed] => 1349627634
    [comment] => 2
    [promote] => 1
    [moderate] => 0
    [sticky] => 0
    [tnid] => 0
    [translate] => 0
    [vid] => 145
    [revision_uid] => 1
    [title] => 123
    [teaser] => <div class="field field-type-filefield field-field-cover">
    <div class="field-items">
            <div class="field-item odd">
                    <img  class="imagefield imagefield-field_cover" width="550" height="281" alt="" src="http://site.ru/sites/files/video/cover/1649.jpg?1349616009" />        </div>
        </div>
</div>
<p></p>
    [log] =>
    [revision_timestamp] => 1349627634
    [format] => 0
    [name] => Dimedrius
    [picture] =>
    [data] => a:4:{s:14:"picture_delete";s:0:"";s:14:"picture_upload";s:0:"";s:3:"dst";s:13:"Europe/Moscow";s:13:"form_build_id";s:37:"form-6aa93bbdd3b9cd48749d80a0a263050e";}
    [field_cover] => Array
        (
            [0] => Array
                (
                    [fid] => 1649
                    [uid] => 1
                    [filename] => 1649.jpg
                    [filepath] => sites/files/video/cover/1649.jpg
                    [filemime] => image/jpeg
                    [filesize] => 81923
                    [status] => 1
                    [timestamp] => 1349616009
                    [origname] =>
                    [list] => 1
                    [data] => Array
                        (
                            [alt] =>
                            [title] =>
                        )

                    [nid] => 145
                    [view] => <img  class="imagefield imagefield-field_cover" width="550" height="281" alt="" src="http://site.ru/sites/files/video/cover/1649.jpg?1349616009" />
                )

        )

    [field_video] => Array
        (
            [0] => Array
                (
                    [fid] => 1629
                    [uid] => 1
                    [filename] => 1629.mp4
                    [filepath] => sites/files/video/originals/1629.mp4
                    [filemime] => video/mp4
                    [filesize] => 54646259
                    [status] => 1
                    [timestamp] => 1345837039
                    [origname] =>
                    [list] => 1
                    [data] =>
                    [nid] => 145
                )

        )

    [path] => video/145
    [last_comment_timestamp] => 1345837041
    [last_comment_name] =>
    [comment_count] => 0
    [taxonomy] => Array
        (
            [11] => stdClass Object
                (
                    [tid] => 11
                    [vid] => 9
                    [name] => Видео
                    [description] =>
                    [weight] => 0
                    [v_weight_unused] => 0
                )

        )

    [build_mode] => 0
    [readmore] =>
    [content] => Array
        (
            [field_cover] => Array
                (
                    [#type_name] => video
                    [#context] => teaser
                    [#field_name] => field_cover
                    [#post_render] => Array
                        (
                            [0] => content_field_wrapper_post_render
                        )

                    [#weight] => -4
                    [field] => Array
                        (
                            [#description] =>
                            [items] => Array
                                (
                                    [0] => Array
                                        (
                                            [#formatter] => image_plain
                                            [#node] => stdClass Object
 *RECURSION*
                                            [#type_name] => video
                                            [#field_name] => field_cover
                                            [#weight] => 0
                                            [#theme] => imagefield_formatter_image_plain
                                            [#item] => Array
                                                (
                                                    [fid] => 1649
                                                    [uid] => 1
                                                    [filename] => 1649.jpg
                                                    [filepath] => sites/files/video/cover/1649.jpg
                                                    [filemime] => image/jpeg
                                                    [filesize] => 81923
                                                    [status] => 1
                                                    [timestamp] => 1349616009
                                                    [origname] =>
                                                    [list] => 1
                                                    [data] => Array
                                                        (
                                                            [alt] =>
                                                            [title] =>
                                                        )

                                                    [nid] => 145
                                                    [#delta] => 0
                                                )

                                            [#title] =>
                                            [#description] =>
                                            [#theme_used] => 1
                                            [#printed] => 1
                                            [#type] =>
                                            [#value] =>
                                            [#prefix] =>
                                            [#suffix] =>
                                            [#children] => <img  class="imagefield imagefield-field_cover" width="550" height="281" alt="" src="http://site.ru/sites/files/video/cover/1649.jpg?1349616009" />
                                        )

                                    [#title] =>
                                    [#description] =>
                                    [#children] => <img  class="imagefield imagefield-field_cover" width="550" height="281" alt="" src="http://site.ru/sites/files/video/cover/1649.jpg?1349616009" />
                                    [#printed] => 1
                                )

                            [#single] => 1
                            [#attributes] => Array
                                (
                                )

                            [#required] =>
                            [#parents] => Array
                                (
                                )

                            [#tree] =>
                            [#context] => teaser
                            [#page] =>
                            [#field_name] => field_cover
                            [#title] => Обложка
                            [#access] => 1
                            [#label_display] => hidden
                            [#teaser] => 1
                            [#node] => stdClass Object
 *RECURSION*
                            [#type] => content_field
                            [#children] => <img  class="imagefield imagefield-field_cover" width="550" height="281" alt="" src="http://site.ru/sites/files/video/cover/1649.jpg?1349616009" />
                            [#printed] => 1
                        )

                    [#title] =>
                    [#description] =>
                    [#children] => <div class="field field-type-filefield field-field-cover">
    <div class="field-items">
            <div class="field-item odd">
                    <img  class="imagefield imagefield-field_cover" width="550" height="281" alt="" src="http://site.ru/sites/files/video/cover/1649.jpg?1349616009" />        </div>
        </div>
</div>

                    [#printed] => 1
                )

            [#content_extra_fields] => Array
                (
                    [title] => Array
                        (
                            [label] => Заголовок
                            [description] => Форма модуля материалов
                            [weight] => -5
                        )

                    [revision_information] => Array
                        (
                            [label] => Информация о редакции
                            [description] => Форма модуля материалов
                            [weight] => 0
                        )

                    [author] => Array
                        (
                            [label] => Информация об авторе
                            [description] => Форма модуля материалов
                            [weight] => 1
                        )

                    [options] => Array
                        (
                            [label] => Настройки публикации
                            [description] => Форма модуля материалов
                            [weight] => 2
                        )

                    [comment_settings] => Array
                        (
                            [label] => Установки комментариев
                            [description] => Форма комментария модуля.
                            [weight] => 3
                        )

                    [menu] => Array
                        (
                            [label] => Параметры меню
                            [description] => Форма модуля меню.
                            [weight] => -1
                        )

                    [taxonomy] => Array
                        (
                            [label] => Таксономия
                            [description] => Форма терминов таксономии
                            [weight] => -2
                        )

                    [path] => Array
                        (
                            [label] => Настройки пути
                            [description] => Форма настроек пути
                            [weight] => 4
                        )

                )

            [#pre_render] => Array
                (
                    [0] => content_alter_extra_weights
                )

            [body] => Array
                (
                    [#weight] => 0
                    [#value] => <p></p>
                    [#title] =>
                    [#description] =>
                    [#printed] => 1
                )

            [#title] =>
            [#description] =>
            [#children] => <div class="field field-type-filefield field-field-cover">
    <div class="field-items">
            <div class="field-item odd">
                    <img  class="imagefield imagefield-field_cover" width="550" height="281" alt="" src="http://site.ru/sites/files/video/cover/1649.jpg?1349616009" />        </div>
        </div>
</div>
<p></p>
            [#printed] => 1
        )

    [links] => Array
        (
            [comment_add] => Array
                (
                    [title] => Добавить комментарий
                    [href] => comment/reply/145
                    [attributes] => Array
                        (
                            [title] => Добавить на эту страницу комментарий.
                        )

                    [fragment] => comment-form
                )

        )

)

Аватар пользователя sas@drupal.org sas@drupal.org 11 октября 2012 в 9:09

А такой сохраняет ?

$node = (object) array(
                'uid' => $user->uid,
                'name' => (isset($user->name) ? $user->name : ''),
                'type' => 'page',
                'status' => 1,
        'promote' => 0,
        'sticky' => 0,
        'created' => time(),
        'revision' => 0,
        'comment' => 1,
            'path' => array(
            'alias' => 0,
            'pid' => 0,
            'source' => 0,
            'language' =>  LANGUAGE_NONE,
        ),
       );
Аватар пользователя Dimedrius Dimedrius 13 октября 2012 в 18:27

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:
А такой сохраняет ?

$node = (object) array(
                'uid' => $user->uid,
                'name' => (isset($user->name) ? $user->name : ''),
                'type' => 'page',
                'status' => 1,
        'promote' => 0,
        'sticky' => 0,
        'created' => time(),
        'revision' => 0,
        'comment' => 1,
            'path' => array(
            'alias' => 0,
            'pid' => 0,
            'source' => 0,
            'language' =>  LANGUAGE_NONE,
        ),
       );

Не сохраняет. У меня складывается впечатление, что node_save, запущенный из hook_nodeapi при $op == update, опять вызывает этот хук и приисходит зацикливание.

Аватар пользователя Orion76 Orion76 15 октября 2012 в 3:29

"Dimedrius" wrote:
опять вызывает этот хук и приисходит зацикливание.

так оно и есть..
Надо или другой хук использовать или при перед сохранением ноды добавлять флаг($node->my_updated=TRUE;)
И проверять его наличие при сохранении..