Четвер, 24 червня 2021

I IT

Біт - байт береже

Логіка завантаження файлів на сервер: PHP, JavaScript и AJAX

Веб-ресурс - це "точка" в інформаційному просторі всесвітньої мережі. Інформація, що відображається на ньому, зазвичай представлена статично, і відвідувач її переглядає. Можна вказати посилання на документ або інший ресурс і відвідувач завантажить собі файл з інформацією або перейде за посиланням.


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

Завантаження файла

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

У цьому прикладі (1) - два варіанти посилання (без застосування PHP) завантаження файлів з сервера, (2) - форма для передачі файлів на сервер. Тут застосування PHP є принциповим. Використовується більш прогресивна логіка завантаження, ніж зазвичай.


У загальному випадку достатньо написати в коді сторінки наведену форму і передбачити обробку масиву $ _ FILES.

Перевірка назви файла (функція scCheckFileName) не є обов 'язковою умовою, але для безпеки і надійності - це доцільно робити. Визначити правила для будь-якого завантажуваного файлу - запорука надійної роботи веб-ресурсу та шанобливого ставлення до нього з боку відвідувача.

Логіка завантаження на сервер

Хостинг хостингу ворожнеча, але використовувати російські літери і деякі символи в іменах файлів - загрожує небезпекою. Він може "записати" файл, але потім "не зможе" його прочитати або видалити. Щоб уникнути невизначеності, краще відразу перейменувати файл і зберегти під такою назвою, до якого адекватно поставиться будь-який хостинг.

У такому контексті звантаження файлів на сервер: PHP + MySQL. За допомогою мови виконується завантаження файла. За допомогою бази даних встановлюється асоціація між реальною назвою файлу і унікальною, яка формується автоматично. Найпростіше рішення, як отримати за реальною назвою файла його MD5 код - це унікальна послідовність з 32 байт. Завантажуючи файли на сервер, PHP "вмикається" на сервері через AJAX.

Тут функція scfCheckFile () кодує реальну назву файла, формує унікальний MD5 код і запускає механізм передачі даних через AJAX. У цей момент сервер не завантажує файл, а перевіряє лише його наявність за унікальним кодом. Якщо такого файлу не виявлено, формується нова назва файлу, а в рядок таблиці розміщується запис про початок завантаження.

Функція scfGetFile () підтверджує факт завантаження файла і забезпечує оновлення запису про нього.


В результаті: файл завантажено, запис у таблиці сформовано. Завантаження файлів на сервер PHP & AJAX за допомогою JavaScript - хороше і надійне рішення.

Механізм AJAX для завантаження файлів

Запуск передачі даних AJAX ініціюється функцією InitXML (). Завантажити файли на сервер PHP, JavaScript та AJAX - безпечно та надійно.

Отримання відповіді від сервера виконується функцією WaitReplySC (). Праворуч внизу наведено коди для двох ситуацій: перевірка наявності файла перед завантаженням і власне процедура завантаження.

Варіанти кодування можуть бути іншими, істотним є те, що кнопка завантаження файла не активна до того моменту, як він не буде обраний і перевірений сервером.

Код сервера PHP

Сервер повинен перевірити можливість завантаження файла. Перешкоди для завантаження визначаються вирішальним завданням, але завжди важливо не затерти інформацію, тобто передбачити та заблокувати завантаження файлів на сервер PHP повторно.

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


Це код перевірки наявності файла за його унікальним назвою. Функція об 'єкта бази даних $ oBase OneViuq () визначає унікальну назву для завантаженого елемента і ставить його у відповідність до реальної назви файла.

Якщо перевірка імені була вдалою, відвідувач натискає кнопку завантаження і механізм AJAX ініціює завантаження файлів на сервер. PHP код коригує запис у таблиці MySQL і виходить наступний результат:

У файловій системі з 'явився ще один елемент, а рядок таблиці цього файла отримав остаточний зміст. Поле статусу (f_status) містить символ "N", тобто дій над завантаженим файлом ще не було.

Логіка обміну даними

Повсюдне поширення файлів * docx, * .xlsx, * .pdf і архівів призвели до формування не зовсім коректної концепції: HTML & PHP завантаження файлів з сервера - це посилання на них. При цьому зовсім не обов 'язково, що відвідувач скачує елемент. Часто програміст просто відкриває файл у переглядачі для перегляду.

Багато завдань пов 'язані зі зміною інформації у таких файлах. Співробітник компанії, що адмініструє сайт, перевіряє комплект актуальних файлів, скачує їх, змінює і відправляє назад на сервер. Така логіка обумовлює істотний трафік, завантажує канали зв 'язку і робить трудомісткими як супровід веб-ресурсу, так і роботу з ним.

Зрозуміло, неможливо змінити сформовану систему інформаційних відносин у тій чи іншій компанії. Якщо пріоритет надано файловій організації, слід її оптимізувати. Якщо є можливість трансформувати файли в дані і працювати з ними безпосередньо, то ідеальним буде варіант: завантаження, перетворення їх на активну форму, яка допускає зміну контенту за його елементами. Коли необхідно завантажити файл з сервера, він перетворюється в поточному актуалізованому стані і направляється споживачеві.