То, что вы выдаете заголовок Location:
, НЕ означает, что скрипт прекращает выполнение.Попробуйте разместить exit;
или die;
сразу после заголовка перенаправления.
Кроме того, вы, как правило, должны умереть с небольшим количеством контента, описывающего, куда обращаться к браузерам, которые не будут следовать за перенаправлениями, например
die(<<< ERRORTEXT
<!doctype html>
<html><head><title>Error: Foo</title></head><body>
<h1>We're sorry, your call could not be completed as dialed.</h1>
<p><a href="../sorry.html">Click here to continue to your final destination.</a></p>
</body></html>
ERRORTEXT
);
РЕДАКТИРОВАТЬ: Nitpicking
($_FILES['file']['size'][$key] < 20971520)
То, что мы имеем здесь, называется "магическим числом";конечно, теперь это очевидно, но для программирования или выполнения не потребуется гораздо больше времени, чтобы выполнить одно из следующих действий:
($_FILES['file']['size'][$key] < 20 * 1024 * 1024)
или
define('MAX_FILE_SIZE', 20 * 1024 * 1024); // 20 MB
($_FILES['file']['size'][$key] < MAX_FILE_SIZE)