Drupal 7 でファイルアップロード後にノードを保存しなかった場合のファイルのゆくえ

Drupal 7

Drupal 7 でノードのファイルフィールドからファイルをアップロードした後ノードを保存せず破棄した場合にアップロードしたファイルがその後どうなるかについてです。

結論は、一定時間経過すると cron で自動的に削除されます。

流れ:

  1. アップロードされたとき、ファイルは一時ディレクトリ以下に保存される
  2. ノードが保存されなかった場合、ファイルは一時ディレクトリに放置されたまま
  3. 6 時間以上経過した後の cron が走ると、一時ディレクトリの未保存ファイルが削除される

当該処理を担うコアの file_save_upload() 関数の doc コメントでは次のように説明されています。

/*
 * The file will be added to the {file_managed} table as a temporary file.
 * Temporary files are periodically cleaned. To make the file a permanent file,
 * assign the status and use file_save() to save the changes.
 */

意訳:

  • ファイルは一時ファイルとして file_managed テーブルに追加されます。
  • 一時ファイルは定期的に掃除されます。
  • ファイルを残しておきたい場合はステータスを割り当てて file_save() で保存しましょう。

ちなみに、 6 時間という時間間隔は次のようにハードコーディングされているので原則変更できません:

/**
 * Maximum age of temporary files in seconds.
 */
define('DRUPAL_MAXIMUM_TEMP_FILE_AGE', 21600);

アバター
後藤隼人 ( ごとうはやと )

Python や PHP を使ってソフトウェア開発やウェブ制作をしています。詳しくはこちら