Загрузка файлов на сервер через PHP на примерах

Загрузка файлов на сервер через PHP на примерах

Одна из востребованных задач в программировании — это загрузка файлов на сервер, в данном случае на PHP. Сейчас мы рассмотрим что такое загрузка файлов через php и как это работает на примерах кода. Обычно загрузка файла php осуществляется через html форму, о том как сделать форму в html мы уже рассказывали.

HTML форма для загрузки файла

Для начала конечно же нужно создать саму форму, которую будет видеть пользователь и через которую выберет нужный файл. Самое главное, в теге <form> не забыть указать важный атрибут enctype=&qout;multipart/form-data&qout; без которого загрузка файлов просто не будет работать.

<form action="upload.php" method="post" enctype="multipart/form-data">
  <label for="file">Выберите файл:</label>
  <input type="file" name="file" id="file">
  <input type="submit" value="Загрузить">
</form>

Не забывайте в форме, в атрибуте action указать сам скрипт который будет обрабатывать эту форму.

Обработка файла на сервере (upload.php)

Теперь напишем сам PHP скрипт который обработает и загрузит наш файл из формы на сервер.

<?php
if (isset($_FILES['file'])) {
    $uploadDir = 'uploads/'; // Папка для загрузки
    $uploadFile = $uploadDir . basename($_FILES['file']['name']);

    if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile)) {
        echo "Файл успешно загружен: " . htmlspecialchars($_FILES['file']['name']);
    } else {
        echo "Ошибка при загрузке файла.";
    }
}
?>

Проверка типа и размера файла

Для того чтоб обезопасить свой сервер от загрузки вредоносных файлов, нужно обязательно проверять тип файлов. Как и с любыми другими данными, нужно проводить подобную валидацию проверяя тип входящих данных. А также, проверим размер файла и не дадим загружать слишком большие файлы.

<?php
$allowedTypes = ['image/jpeg', 'image/png', 'application/pdf'];
$maxSize = 2 * 1024 * 1024; // 2 МБ

if ($_FILES['file']['size'] > $maxSize) {
    die("Файл слишком большой!");
}

if (!in_array($_FILES['file']['type'], $allowedTypes)) {
    die("Недопустимый тип файла!");
}
?>

В данном скрипте php мы допускаем тип загружаемых файлов таких как .jpeg, .png и .pdf. Все остальные файлы просто не пройдут проверку и будет выведено сообщение. Размер файла мы ограничили двумя мегабайтами.

Место сохранения файла

Обычно просто создается папка для хранения загружаемых файлов. Но, можно еще создать директорию в основной директории имя которой будет дата загрузки файла.

<?php
$uploadDir = '/uploads/' . date('Y-m-d') . '/';
if (!file_exists($uploadDir)) {
    mkdir($uploadDir, 0777, true);
}
?>

Мы создали директорию uploads и внутри нее по дате будут создаваться новые директории если их не существует, в которые уже будет происходить загрузка файла на php.

Получение информации о загруженном файле

Выведем на экран информацию о файле который загружаем, а именно: имя файла, размер файла, тип файла. Использовать эту информацию можно для хранения в базе данных, или же для записи в другой файл для хранения по типу логов. В одной из предыдущих статей мы уже рассказывали на счет php работа с файлами.

<?php
echo "<p>Имя файла: " . $_FILES['file']['name'] . "</p>";
echo "<p>Размер: " . round($_FILES['file']['size'] / 1024, 2) . " КБ</p>";
echo "<p>Тип: " . $_FILES['file']['type'] . "</p>";
?>

Важно помнить и применять это всегда на практике:

  • Никогда не сохраняйте все подряд файлы не проверяя их тип и не задавая только дозволенный тип.
  • Не позволяйте загружать исполняемые файлы, к которым обратившись напрямую можно инициировать их работу (.php, .exe, .py и т.д.).
  • При работе с входящими данные используйте htmlspecialchars().

Итоги загрузки файлов на сервер через PHP

Теперь вы знаете как на своем сайте реализовать загрузку файлов через PHP к вам на сервер. Вы можете ограничить тип загружаемых файлов и их размер, что очень важно. Вы можете получить информацию о загружаемом файле и вывести ее на экран. Вы можете создавать разные директории для более логичного упорядочивания и размещения нужных вам файлов.