Просто используйте тип managed_file
, он сделает это за вас:
$form['my_file_field'] = array(
'#type' => 'managed_file',
'#title' => 'File',
'#upload_location' => 'public://my-folder/'
);
А затем в вашем обработчике отправки:
// Load the file via file.fid.
$file = file_load($form_state['values']['my_file_field']);
// Change status to permanent.
$file->status = FILE_STATUS_PERMANENT;
// Save.
file_save($file);
Если проверка не пройдена и пользователь покидает форму, файл будет автоматически удален через несколько часов (как и все файлы в таблице file_managed
без FILE_STATUS_PERMANENT
). Если проверка не завершится неудачно, будет запущен обработчик отправки, и файл будет помечен как постоянный в системе.