Удаление узла Drupal 7 не удаляет все связанные файлы

#drupal #drupal-7

#drupal #drupal-7

Вопрос:

Один файл загружается при создании узла с помощью стандартного Drupal.

Позже в узел добавляются 2 файла с помощью:

 file_save(std Class)
file_usage_add(std Class, 'module', 'node', $node_id)
  

В конце я получаю 3 записи в file_managed и file_usage.

Проблема: когда я удаляю узел с помощью стандартного Drupal, удаляется файл, который был добавлен во время первоначального создания узла, но не 2, которые были добавлены позже. Эти файлы остаются как в таблицах, так и физически на диске.

Есть ли какой-либо флаг, который устанавливается для сохранения файлов, даже если узел удален? Если да, то где находится этот флаг и как мне правильно его установить (для удаления вместе с узлом)?

Ответ №1:

Ответ находится в file_delete() функции, см. Этот комментарий:

// Если какой-либо модуль все еще имеет запись об использовании в таблице file_usage, файл
// не будет удален

Поскольку ваш модуль объявил о заинтересованности в файле, используя file_usage_add() его, он не будет удален, если ваш модуль явно не скажет, что это нормально.

Вы можете либо удалить вызов file_usage_add() , либо реализовать hook_file_delete() и использовать file_usage_delete() , чтобы гарантировать, что файл может быть удален:

 function mymodule_file_delete($file) {
  file_usage_delete($file, 'mymodule');
}
  

Ответ №2:

Вы можете принудительно удалить файл.

 file_delete($old_file, TRUE);
  

Но убедитесь, что этот файл не используется в других узлах с помощью:

 file_usage_list($file);
  

Комментарии:

1. содержит спам-ссылку

2. @RimuAtkinson, спасибо. Я удалил ссылку. Похоже, что связанный веб-сайт был взломан.