php

Як завантажити файли на сервер за допомогою PHP

Last updated: 21.02.2026
Views: 94

Завантаження файлів на веб-сайт є звичайним завданням. Розглянемо можливість завантаження файлів на сервер PHP за допомогою методу POST. Для цього знадобиться форма з типом поля “file” і атрибут enctype зі значенням multipart/form-data. Ми не будемо використовувати AJAX у цьому прикладі, а виконаємо звичайне надсилання HTML форми.

HTML

<form method="POST" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="2097152" />
    <input type="file" name="uploaded_file">
    <input type="submit" name="submit" value="send">
</form>

Поле з name=”MAX_FILE_SIZE” має бути розташоване над input type=”file”, значення встановлюється в байтах. Поле необов’язкове, і перевірка все ще має бути на сервері. Після надсилання дані завантаженого файлу потрапляють у масив $_FILES

PHP

if (isset($_FILES["uploaded_file"])) { // field´s name type="file"
    $maxsize = 1024 * 1024* 2; // limited the allowed file size to 2 MB
    $errors = [];
    // valid file extensions
    $acceptable = [
        'application/pdf',
        'image/jpeg',
        'image/jpg',
        'image/gif',
        'image/png'
    ];
 
    if (is_uploaded_file($_FILES['uploaded_file']['tmp_name'])) {
        if (($_FILES['uploaded_file']['size'] >= $maxsize) || ($_FILES["uploaded_file"]["size"] == 0)) {
            $errors[] = 'File too large. File must be less than 2 megabytes.';
        }
        if (!in_array($_FILES['uploaded_file']['type'], $acceptable) && (!empty($_FILES["uploaded_file"]["type"]))){
            $errors[] = 'Invalid file type. Only PDF, JPG, GIF and PNG types are accepted.';
        }
        if (!count($errors)) {
            $uploaddir = __DIR__ . '/upload/'; // upload folder
            $uploadfile = $uploaddir . $_FILES['uploaded_file']['name'];
            move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $uploadfile);
        } else {
            foreach($errors as $error) {
                echo $error . '<br />';
            }
        }
    }
}

Ви можете завантажити кілька файлів одночасно. PHP підтримує можливість передачі масиву HTML, включаючи файли.

HTML

<form method="POST" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="2097152" />
    <input type="file" name="pictures[]">
    <input type="file" name="pictures[]">
    <input type="file" name="pictures[]">
    <input type="submit" name="submit" value="send">
</form>

PHP

if (isset($_FILES["pictures"])) { // field´s name type="file"
   $maxsize = 1024 * 1024* 2; // limited the allowed file size to 2 MB
   $errors = [];
   // valid file extensions
   $acceptable = [
       'application/pdf',
       'image/jpeg',
       'image/jpg',
       'image/gif',
       'image/png'
   ];
 
   foreach ($_FILES["pictures"]["error"] as $key => $error) {
        if ($error == UPLOAD_ERR_OK) {
             if (is_uploaded_file($_FILES['pictures']['tmp_name'][$key])) {
               if (($_FILES['pictures']['size'][$key] >= $maxsize) || ($_FILES["pictures"]["size"][$key] == 0)) {
                   $errors[] = 'File too large. File must be less than 2 megabytes.';
               }
               if (!in_array($_FILES['pictures']['type'][$key], $acceptable) && (!empty($_FILES["pictures"]["type"][$key]))){
                   $errors[] = 'Invalid file type. Only PDF, JPG, GIF and PNG types are accepted.';
               }
               if (!count($errors)) {
                   $uploaddir = __DIR__ . '/upload/'; // upload folder
                   $uploadfile = $uploaddir . $_FILES['pictures']['name'][$key];
                   move_uploaded_file($_FILES['pictures']['tmp_name'][$key], $uploadfile);
               } else {
                   foreach($errors as $error) {
                       echo $error . '<br />';
                   }
               }
            }
        }
    }
}
author
Автор: Ігор Рибалко
Працюю фронтенд розробником з 2014 року. Основний стек технологій - Vue.js і WordPress

Схожі записи:

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *