Как загрузить файл на сервер
Короткий ответ
Форме нужен атрибут enctype, а файл сохраняет move_uploaded_file():
<?php
// upload.php
$file = $_FILES['avatar'] ?? null;
if ($file && $file['error'] === UPLOAD_ERR_OK) {
$extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
$name = bin2hex(random_bytes(16)) . '.' . $extension;
move_uploaded_file($file['tmp_name'], __DIR__ . '/uploads/' . $name);
echo 'Saved as ' . $name;
}Форма
Без enctype="multipart/form-data" файл на сервер не попадёт: <form method="post" enctype="multipart/form-data"> и поле <input type="file" name="avatar">.
Проверки
Проверяйте размер и расширение по списку разрешённых:
<?php
// upload.php
$file = $_FILES['avatar'];
$extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
if ($file['size'] > 2 * 1024 * 1024) {
exit('The file is larger than 2 MB');
}
if (!in_array($extension, ['jpg', 'png', 'webp'], true)) {
exit('Only images are allowed');
}Функции из этого ответа
- move_uploaded_file — Переносит загруженный через форму файл в постоянное место.
- pathinfo — Разбирает путь на части: папку, имя и расширение.
- random_bytes — Возвращает случайные байты, пригодные для защиты.