乐趣区

drupal8彻底删除附件与media文件

当 drupal 版本大于 8.4 可能会遇到这样的问题,删除带附件的 entity 和 media 时,附件文件永远也不会被系统删除,这个问题有官方解释:https://www.drupal.org/node/2… 大概意思是,某些文件可能会放到媒体库并被多处引用,如果删除了 media 就把文件彻底删除,其它引用该文件就会出现文件缺失的现象。为了解决这个问题,官方选择了默认情况下不删除附件的方式,这就是导致文件无法彻底删除的主要原因。
如果需要系统彻底删除文件,需要开启 make_unused_managed_files_temporary 参数,把以下代码加到 settings.php 中即可:
$config[‘file.settings’][‘make_unused_managed_files_temporary’] = true;
$config[‘system.file’][‘temporary_maximum_age’] = 1; // 1 秒后系统自动删除文件
由于删除文件的代码位于 file_cron(),所以无论时间设置得再短,也需要等到下次执行 cronjob 时才被真正删除。
以下说一说 file 的数据表结构。关于 file 记录,drupal 主要用到了两个数据表,file_managed 与 file_usage。file_managed 记录了文件的物理位置与状态,当状态为 0 是临时文件,临时文件会最终被系统删除,而状态为 1 则不会被系统删除。
file_usage 记录了文件被引用的次数,当开启了 make_unused_managed_files_temporary 后引用次数为 0 时,文件在 file_managed 里的状态会从 1 变为 0,系统就会定时清除这些文件。但这个引用次数并不准确,例如文件在内容正文中以链接方式被引用,系统将无法得知这个链接会何时被删,也就无法给引用计数加一。

退出移动版