it-swarm.com.de

Wie werden die Dateidaten in der Datenbanktabelle file_usage erstellt und verwaltet?

Ich lösche verwaiste Bilddateien in Drupal 7, aber ich muss sie zuerst auf andere Tabellen verweisen, in denen die Bilder möglicherweise verwendet werden. Da ich keine Bilder über den IMCE-Editor hochlade Schnittstelle und hauptsächlich Uploads über das Bildmodul, wäre es sicher zu sagen, dass ich die Tabellen file_managed und image_dimensions auf file_usage verweisen und löschen kann, was nicht da ist?

Im Moment frage ich mich nur, wie file_usage gefüllt ist. Wird es jedes Mal ausgefüllt, wenn ich einen Dateityp hochlade?

5

Der von Drupal zum Löschen temporärer Dateien verwendete Code) ist der folgende. (Er wird während Cron-Tasks ausgeführt.)

  // Remove temporary files that are older than DRUPAL_MAXIMUM_TEMP_FILE_AGE.
  // Use separate placeholders for the status to avoid a bug in some versions
  // of PHP. See http://drupal.org/node/352956.
  $result = db_query('SELECT fid FROM {file_managed} WHERE status <> :permanent AND timestamp < :timestamp', array(
    ':permanent' => FILE_STATUS_PERMANENT,
    ':timestamp' => REQUEST_TIME - DRUPAL_MAXIMUM_TEMP_FILE_AGE,
  ));
  foreach ($result as $row) {
    if ($file = file_load($row->fid)) {
      $references = file_usage_list($file);
      if (empty($references)) {
        if (!file_delete($file)) {
          watchdog('file system', 'Could not delete temporary file "%path" during garbage collection', array('%path' => $file->uri), WATCHDOG_ERROR);
        }
      }
      else {
        watchdog('file system', 'Did not delete temporary file "%path" during garbage collection, because it is in use by the following modules: %modules.', array('%path' => $file->uri, '%modules' => implode(', ', array_keys($references))), WATCHDOG_INFO);
      }
    }
  }

file_usage_list () ist die Funktion, die die Tabelle "file_usage" abfragt.
Die Funktion, die eine Zeile in diese Tabelle einfügt, ist file_usage_add () ; Wenn ich mir die Funktionen/Hooks ansehe, die es aufrufen, komme ich zu dem Schluss, dass die Tabelle "file_usage" für verwaltete Dateien verwendet wird. Da Sie die Dateien nicht mit einer Zeile in der Tabelle "file_managed" löschen, können Sie die Tabelle "file_usage" nicht überprüfen.

7
kiamlaluno

Die kanonische Methode besteht darin, eine Verwendungsmarke hinzuzufügen, wenn Sie ein Bild verwenden, und es zu entfernen, wenn Sie es nicht mehr tun. Dies bedeutet, dass ein Bild mit 3 Referenzen und einem Original-Upload 4 Verwendungszeichen aufweist. Wenn etwas erneut darauf verweist, wird es auf 5 erhöht. Wenn etwas nicht referenziert wird, verschwindet eine Verwendungsmarke. Und wenn Sie nur eine Datei mit etwas wie # manage_file hochgeladen haben, wird die Datei NICHT als verwendet markiert, bis das Formular gespeichert wird, und selbst dann nur, wenn die Funktionsbehandlung von submit entscheidet, dass dies der Fall sein sollte.

Beim Aufrufen von file_delete () wird nur bei Verwendung der Anzahl 0, Drupal eine Datei gelöscht - sowohl die Datei selbst von der Festplatte als auch alle ihre Metadaten aus Tabellen. Keine Tests für Ihre Seite benötigt werden, können Sie es einfach über alle gewünschten Dateien schleifen oder es nach jedem Löschen der Verwendung aufrufen (das ist übliche Praxis).

Die Idee ist - Sie sollten niemals direkt mit dieser Tabelle interagieren, sondern nur über file_usage_add () , file_usage_delete () und file_usage_list () . Und Sie sollten niemals die eigentliche Datei oder den Datenbankeintrag löschen. Nun, es sei denn, es wird sofort aufgrund von Problemen mit der Inhaltssicherheit oder ähnlichem benötigt. Ansonsten kümmert sich Drupal] darum.

4
Mołot