自动清除来自已删除旧帖子的上传内容

为什么这个没有被广泛讨论?这是一个真正的大问题。

我写了一个 PHP 脚本,它使用从以下 SQL 查询生成的 CSV 文件,该文件列出了所有上传及其引用:
(如果您有很多上传,请增加限制)

SELECT 
    uploads.original_filename,
    ROUND(uploads.filesize / 1000000.0, 2) AS size_in_mb,
    uploads.extension,
    uploads.created_at,
    uploads.url,
    upload_references.upload_id,
    upload_references.target_id,
    upload_references.target_type,
    upload_references.created_at,
    upload_references.updated_at
FROM upload_references
JOIN uploads ON uploads.id = upload_references.upload_id
ORDER BY upload_references.target_type
LIMIT 90000

现在脚本的作用是过滤掉仅作为草稿的上传(正如我在此解释的那样,它们错误地保留在数据库中)。脚本输出一个以空格分隔的字符串,包含所有文件名。您也可以修改脚本以输出完整路径(删除函数 basename())。

然后登录到您的 discourse SSH 服务器并为所有文件执行 rm 命令。

  • 其中一个缺点是,所有保留在活动草稿中的图像也将被删除(但这可以通过降低删除 n 天前的草稿来限制)。
  • 第二个缺点是 - 不正确的数据库条目仍然存在,为此我应该向开发人员寻求修复。

如果删除了不正确的条目,问题应该会得到妥善解决。

<?php 
if (($open = fopen("test.csv", "r")) !== false) {
    while (($data = fgetcsv($open, 100000, ",")) !== false) {
        $array[] = $data;
    }
    fclose($open);
}
$final = array();
$i=0;
foreach ($array as $item){
    if($item[7]=="Draft"){
            foreach ($array as $item_inside){
            if(($item_inside[4]==$item[4]) && ($item_inside[7]!="Draft")) $i++; //taisa i++, kad nav tikai drafts
            }
        if($i==0)array_push($final, $item[4]); //bija tikai drafti, var likt masiivaa
        $i=0;
    }
}
$final_unique= array_unique($final);
//print_r($final_unique);

foreach($final_unique as $single){
    echo basename($single)." ";
    }
?>

包含查询的 test.csv 文件应放置在脚本的同一目录中。
如果您有任何问题,请问我!

3 个赞