Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как загрузить файл на сервер

Короткий ответ

Форме нужен атрибут 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 — Возвращает случайные байты, пригодные для защиты.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.