Médias : supprimer les médias dont le fichier physique n’existe plus

Juste un petit morceau de code utile pour nettoyer la base des médias, qui n’existent plus physiquement.

A adapter selon vos besoins !

$q = db_query('SELECT fid, uri FROM file_managed ORDER BY fid');
$medias = $q->fetchAllAssoc('fid');

$i = 0;
foreach ($medias as $fid => $media) {

  $url = file_create_url($uri);
  $exists = file_exists($media->uri);

  if (!$exists) {
    $i++;
    var_dump($media->uri, $exists);
    $file=file_load($fid);
    file_delete($file);

    if($i>0){
      return;
    }
  }
}

return;

A mon avis, ce genre de fonctionnalité devrait exister directement via le back-office du module Médias, ce serait top. Je n’ai pas eu le temps de vérifier si les futures versions aurait une fonctionnalité similaire…