Drupal 7 でファイルアップロード後にノードを保存しなかった場合のファイルのゆくえ
Drupal 7 でノードのファイルフィールドからファイルをアップロードした後ノードを保存せず破棄した場合にアップロードしたファイルがその後どうなるかについてです。
結論は、一定時間経過すると cron で自動的に削除されます。
流れ:
- アップロードされたとき、ファイルは一時ディレクトリ以下に保存される
- ノードが保存されなかった場合、ファイルは一時ディレクトリに放置されたまま
- 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);