【问题标题】:Permanently delete unused / orphaned files in Drupal 8永久删除 Drupal 8 中未使用/孤立的文件
【发布时间】:2018-10-13 10:38:53
【问题描述】:

我们在上传到我们其中一个网站的 PDF 中出现了一些严重错误。 但是在从 Drupal 中“删除”它之后,它仍然可以通过直接链接访问。 Drupal 似乎不会自行删除它。

我仍然可以在表 file_managed 中找到它,但在 file_usage 中找不到。 手动删除数据库行和文件安全吗?

已经在这里检查了所有关于 SO 的旧问题,但没有一个有效。

谢谢!

【问题讨论】:

  • 您是否尝试过刷新缓存或运行 cron?我希望这会自动删除行,因为某些模块在运行 cron 或清除缓存后会删除其已删除的数据。
  • 是的,我也试过了,但看起来只有临时文件会被删除。表 'file_managed' 中状态为 1 的文件不会被删除,即使它们未被使用。但是,将状态设置为 0(临时)将使它们能够进行垃圾收集。不幸的是,这是非常不切实际的。

标签: drupal drupal-8


【解决方案1】:

我知道这是一个旧帖子,但我遇到了同样的问题,没有找到好的答案。

所以,经过一点尝试,我想出了这个:

<?php

// Some nice ideas from:
// https://stackoverflow.com/questions/52455491/how-to-set-file-usage-on-drupal-8

$file_storage = \Drupal::entityTypeManager()->getStorage('file');
$fids = Drupal::entityQuery('file')->condition('status', 1)->execute();
$file_usage = Drupal::service('file.usage');

foreach ($fids as $fid) {

  $file = Drupal\file\Entity\File::load($fid);
  $usage = $file_usage->listUsage($file);

  if(count($usage) == 0) {

    $file->delete();

  }
}

请小心,因为代码依赖于 Drupal 报告使用文件的正确节点数,但情况可能并非总是如此。

【讨论】:

    【解决方案2】:

    我们最近贡献了一个模块Unmanaged / Unused Files | Manage | Delete

    【讨论】:

      【解决方案3】:

      您可能想尝试Fancy File Delete,它具有以下选项以及其他功能

      从默认文件目录中删除不在文件管理表中的未使用文件。 AKA 删除所有非托管文件。

      从整个安装中删除不再附加到节点和文件使用表的未使用文件。 AKA 删除所有孤立文件。

      【讨论】:

        【解决方案4】:

        您可能想要创建一个模块来挂钩媒体删除并抑制相关文件

        use Drupal\Core\Entity\EntityInterface;
        use Drupal\file\Entity\File;
        
        function my_custom_module_entity_delete(EntityInterface $entity) {
          if ($entity->getEntityTypeId() === 'media') {
            $fid = $entity->getSource()->getSourceFieldValue($entity);
            $file = File::load($fid);        
            if ($file) {
              $file_usage = Drupal::service('file.usage');
              $usage = $file_usage->listUsage($file);
              if(count($usage) == 0) {
                $file->delete();
              }
            }
          }
         }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多