Тема: Завантаження файлів (Робота з файлами).
Додавання до форми атрибута enctype="multipart/form-data" та завантаження файлу завдання на локальний диск сервера.
Мета: Навчитись обробляти файли, які надсилає користувач (зображення, документи), розуміти специфіку протоколу HTTP для бінарних даних та структуру масиву $_FILES.
Технологічний стек: HTML (type="file"), HTTP Headers (multipart/form-data), PHP ($_FILES, move_uploaded_file()).
POST-запиту для правильного приймання та аналізу бінарних даних (картинок)..jpg/.png та розміру в МБ).move_uploaded_file().У файлі форми create.php додайте нове поле: <input type="file" name="avatar" accept="image/png, image/jpeg">.
Абсолютно критично: змініть тег форми, додавши атрибут enctype="multipart/form-data". Без цього браузер проігнорує ваш файл і передасть лише його назву текстом у $_POST.
$_FILESПід час обробки натискання кнопки “Зберегти” додайте до вашого існуючого var_dump() новий рядок: var_dump($_FILES);.
Спробуйте завантажити картинку. Ви побачите, що $_FILES['avatar'] — це багатовимірний асоціативний масив, який містить інформацію про ім’я файлу (name), його тимчасовий шлях на сервері (tmp_name), розмір в байтах (size) та наявність помилок завантаження (error).
До блоку обробки $errors (з Лаб. 7) додайте валідацію картинки.
Перевірте:
if (isset($_FILES['avatar']) && $_FILES['avatar']['error'] === UPLOAD_ERR_OK)).$_FILES['avatar']['size']. Він вказується у байтах (наприклад, обмежте файл максимумом в 2 МБ: 2 * 1024 * 1024). Якщо більший — $errors[] = "Файл завеликий!".pathinfo($filename, PATHINFO_EXTENSION) для перевірки, що це дійсно ‘jpg’ або ‘png’.Створіть у корені проєкту (там, де файл index.php) нову папку uploads.
Щоб зберегти файл довгостроково, викличте PHP-функцію:
move_uploaded_file($_FILES['avatar']['tmp_name'], 'uploads/' . $_FILES['avatar']['name']);
Якщо форма пройшла всю валідацію успішно, функція має перемістити файл у вашу папку. Відкрийте VS Code та перевірте зліва в провіднику, що файл дійсно з’явився у папці uploads.
enctype="multipart/form-data" і чому його обов’язково треба використовувати в тегу form для файлів?$_FILES? Опишіть призначення ключа tmp_name.Submit, а містяться в тимчасових директоріях операційної системи (tmp_name)?move_uploaded_file()? Чому не можна просто скопіювати файл звичайною функцією copy() без перевірок безпеки?lab8.md надіслати код обробника файлових завантажень.uploads з бокової панелі VS Code з хоча б одним успішно завантаженим збереженим файлом із вашим аватаром/зображенням.var_dump($_FILES) демонструє масив із 5 ключами (наприклад, name, type, tmp_name, error, size) для вашого файлу.uploads/* в .gitignore, щоб не “смітити” в репозиторії бінарними файлами!).