move_uploaded_file()
не предназначен для использования URL в качестве пункта назначения.По сути, вы пытаетесь взять загруженный файл и загрузить его еще раз.Вы хотите использовать локальный путь к файлу без URL-адреса.
Кроме того, вы используете для проверки предоставленные данные типа и размера из массива $ _FILES.Эти поля предоставляются пользователем и могут быть изменены.Ничто не говорит о том, что злоумышленник не может загрузить файл "hackme.exe" или "subvert_my_server.php" и пометить его как загружаемый файл типа image / jpeg, и ваш сценарий с радостью попытается сохранить его на сервере.
Дляправильная обработка, что-то вроде этого лучше:
if ($_FILES['thumbfile']['error'] === UPLOAD_ERR_OK) {
$info = getimagesize($_FILES['thumbfile']['tmp_name']);
if (($info[2] !== IMG_GIF) && ($info[2] !== IMG_JPEG)) { // whoops. had || initially.
die("not a gif/jpg");
}
if (filesize($_FILES['thumbfile']['tmp_name']) > 20000) {
die("larger than 20000");
}
move_uploaded_file($_FILES['thumbfile']['tmp_name'], '/some/directory/on/your/server/filename.jpg');
}