Завантаження файлів методом POST

Ця можливість дозволяє завантажувати як текстові, так і бінарні файли. За допомогою PHP-функцій автентифікації та роботи з файлами ви маєте повний контроль над тим, кому дозволено завантажувати файли та що робити з файлом після завантаження.

PHP здатний отримувати завантажені файли будь-якого браузера, сумісного зі стандартом RFC-1867.

Зауваження Суміжні зауваження щодо конфігурації

Також ознайомтеся з описом директив file_uploads upload_max_filesize upload_tmp_dir post_max_size і max_input_timeконфигурационного файла php.ini

Також слід зауважити, що PHP підтримує завантаження файлів методом PUT, який використовується у клієнтах Netscape Composer та W3C Amaya. Для отримання більш детальної документації зверніться до розділу підтримка методу PUT

Приклад #1 Форма для завантаження файлів

Сторінка для завантаження файлів може бути реалізована за допомогою спеціальної форми, яка виглядає приблизно так:

Надіслати цей файл:

У наведеному вище прикладі __URL__ потрібно замінити посиланням на PHP-скрипт.

Приховане поле MAX_FILE_SIZE (значення необхідно вказувати в байтах) має передувати полю для вибору файлу, і його значення є максимально допустимим розміром файлу, що приймається в PHP. Рекомендується завжди використовувати цю змінну, оскільки вона запобігає тривожному очікуванню користувачів при передачі величезних файлів, тільки для того, щоб дізнатися, що файл занадто великий і передача фактично не відбулася. Майте на увазі, що обійти це обмеження на стороні браузера досить просто, тому ви не повинні покладатися на те, що всі файли більшого розміру будуть блоковані за допомогою цієї можливості. Це здебільшого зручна можливість для користувачів клієнтської частини вашої програми. Однак налаштування PHP (на сервері) щодо максимального розміру оминути неможливо.

Зауваження :

Также следует убедиться, что форма загрузки имеет атрибутenctype="multipart/form-data", інакше завантаження файлів на сервер не відбудеться.

Глобальний масив $_FILES містить всю інформацію про завантажені файли. Його вміст для нашого прикладу наведено нижче. Зверніть увагу, що тут передбачається використання імені userfile для поля вибору файлу, як і у наведеному вище прикладі. Насправді ім'я поля може бути будь-яким.

$_FILES['userfile']['name']

Оригінальна назва файлу на комп'ютері клієнта.

$_FILES['userfile']['type']

Mime-тип файлу, якщо браузер надав таку інформацію. Як приклад можна навести "image/gif". Цей mime-тип не перевіряється на стороні PHP, тому не покладайтеся на його значення без перевірки.

$_FILES['userfile']['size']

Розмір у байтах прийнятого файлу.

$_FILES['userfile']['tmp_name']

Тимчасове ім'я, з яким файл було збережено на сервері.

$_FILES['userfile']['error']

Код помилки, яка може виникнути під час завантаження файлу.

$_FILES['userfile']['full_path']

Повний шлях представлений браузером. Це значення не завжди містить реальну структуру каталогів, і йому не можна довіряти. Доступно з PHP 8.1.0.

За промовчанням прийняті файли зберігаються на сервері у стандартній тимчасовій папці доти, доки не буде задана інша директорія за допомогою директиви upload_tmp_dir конфігураційний файл php.ini. Директорію сервера за промовчанням можна змінити, встановивши змінну TMPDIR для оточення, в якому виконується PHP. Встановлення цієї змінної за допомогою функції putenv() всередині PHP-скрипту не працюватиме. Ця змінна оточення також може бути використана для того, щоб переконатися, що інші операції також працюють з прийнятими файлами.

Приклад #2 Перевірка файлів, що завантажуються на сервер

Для отримання більш детальної інформації ви можете ознайомитись з описом функцій is_uploaded_file() і move_uploaded_file(). Наступний приклад приймає та обробляє завантажений за допомогою форми файл.

Loading...

PHP-скрипт, який приймає завантажений файл, повинен реалізовувати логіку, необхідну визначення подальших дій над прийнятим файлом. Наприклад, ви можете перевірити змінну $_FILES['userfile']['size'], щоб відсікти занадто великі або занадто маленькі файли. Також ви можете використовувати змінну $_FILES['userfile']['type'] для виключення файлів, які не задовольняють критерію щодо типу файлу, проте, беріть до уваги, що це поле повністю контролюється клієнтом, використовуйте його лише як першу серію перевірок. Також ви можете використовувати $_FILES['userfile']['error'] і коди помилок під час реалізації вашої логіки. Незалежно від того, яку модель поведінки ви вибрали, потрібно видалити файл з тимчасової папки або перемістити його в іншу директорію.

У разі, якщо при відправленні форми файл обраний не був, PHP встановить змінну $_FILES['userfile']['size']значением 0, а переменную$_FILES['userfile']['tmp_name'] - none.

Після завершення роботи скрипта, якщо завантажений файл не був перейменований або переміщений, він буде автоматично видалено з тимчасової папки.

Приклад #3 Завантаження масиву файлів

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

Изображения:

Loading...

Смуга прогресу завантаження файлів може бути реалізована за допомогою "відстеження прогресу завантаження файлів за допомогою сесій".