Je me demande pourquoi ce n’est pas plus discuté ? C’est vraiment un gros problème.
J’ai écrit un script PHP qui utilise un fichier CSV généré à partir de la requête SQL suivante qui liste toutes les téléversements et leurs références :
(augmentez la limite si vous avez beaucoup de téléversements)
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
Maintenant, ce que fait le script, c’est qu’il filtre les téléversements qui restent uniquement comme brouillons (qui restent à tort dans la base de données comme je l’ai expliqué ici). Le script génère une chaîne séparée par des espaces avec tous les noms de fichiers. Vous pouvez également modifier le script pour générer le chemin complet (supprimez la fonction basename()).
Ensuite, connectez-vous à votre serveur SSH Discourse et exécutez la commande rm pour tous les fichiers.
- Un inconvénient est que toutes les images qui restent dans les brouillons actifs seront également supprimées (mais cela peut être limité en abaissant supprimer les brouillons plus anciens que n jours).
- Second inconvénient - les entrées incorrectes dans la base de données persistent toujours, pour cela je devrais demander aux développeurs une correction.
Si les entrées incorrectes sont supprimées, le problème devrait être correctement résolu.
<?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)." ";
}
?>
Le fichier test.csv contenant la requête doit être placé dans le même répertoire que le script.
Si vous avez des problèmes, demandez-moi !