Вы не смогли проверить, была ли загрузка завершена вообще:
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
move file ...
} else {
die("Upload failed with error code " . $_FILES['file']['error']);
}
Коды ошибок документированы здесь: http://www.php.net/manual/en/features.file-upload.errors.php
Кроме того, есть ли подкаталог «upload» в текущем рабочем каталоге вашего скрипта? Есть ли у процесса веб-сервера разрешения на запись в этот каталог?
И в качестве ОСНОВНОЙ дыры в безопасности, вслепую используя параметр ['name']
загрузки в качестве целевого имени файла, злоумышленник может писать на ЛЮБОМ файле на вашем сервере. Никогда не используйте это имя вслепую. Если имя загружаемого файла указано как (скажем) ../../../../../../etc/passwd
, теперь вы позволили кому-то заменить файл системного пароля.