File is saved to /tmp directory, despite setting it permanent
Just use a managed file element, it's much easier:

$form['fid'] = array(
  "#title" =&gt; "Document file",
  '#type' =&gt; 'managed_file',
  '#size' =&gt; 22,
  '#upload_location' =&gt; 'public://',
  '#upload_validators' =&gt; array(
    'file_validate_extensions' =&gt; array('pdf doc docx'),
  ),
);


Then remove the validation handler and change you submit handler to:

$file = file_load($form_state['values']['fid']);
$file-&gt;status = FILE_STATUS_PERMANENT;
file_save($file);


And you're done; Drupal handles moving the temp file into the right place for you, as well as adding relevant records to the file_managed/file_usage tables.