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

Drupal 7 でファイルフィールドからファイルをアップロードした後にノードそのものを保存しなかった場合。

ファイルは確かに一度アップロードされるのですが、ファイル参照がないのでその後 Drupal からは取得できなくなります。 じゃあそのファイルは、どこに行くのか、なのですが・・・結論としては以下のようになります。

  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);

以上です。