15-03-2019 20:00

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

Веб-ресурс - это «точка» в информационном пространстве всемирной сети. Информация, отображаемая на нем, обычно представлена статически, и посетитель ее просматривает. Можно указать ссылку на документ или иной ресурс и посетитель загрузит себе файл с информацией или перейдет по ссылке.

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

Загрузка файла

Как включить режим планшета в Windows 10 и настроить?Вам будет интересно:Как включить режим планшета в Windows 10 и настроить?

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

Простые инструменты загрузки

В данном примере (1) - два варианта ссылки (без применения PHP) загрузки файлов с сервера, (2) - форма для передачи файлов на сервер. Здесь применение PHP принципиально. Используется более прогрессивная логика загрузки, чем обычно.

В общем случае достаточно написать в коде страницы приведенную форму и предусмотреть обработку массива $_FILES.

Сохранение загруженного файла

Проверка имени файла (функция scCheckFileName) не является обязательным условием, но для безопасности и надежности - это целесообразно делать. Определить правила для любого загружаемого файла - залог надежной работы веб-ресурса и уважительного отношения к нему со стороны посетителя.

Логика загрузки на сервер

Хостинг хостингу рознь, но использовать русские буквы и некоторые символы в именах файлов - чревато опасностью. Он может «записать» файл, но затем «не сможет» его прочитать или удалить. Чтобы избежать неопределенностей, лучше сразу файл переименовать и сохранить под таким именем, к которому адекватно отнесется любой хостинг.

В таком контексте загрузка файлов на сервер: PHP + MySQL. При помощи языка выполняется загрузка файла. Посредством базы данных устанавливается ассоциация между реальным именем файла и уникальным, которое формируется автоматически. Самое простое решение, как получить по реальному имени файла его MD5 код - это уникальная последовательность из 32 байт. Выполняя загрузку файлов на сервер, PHP «включается» на сервере через AJAX.

Запуск PHP через AJAX

Здесь функция scfCheckFile() кодирует реальное имя файла, формирует по нему уникальный MD5 код и запускает механизм передачи данных через AJAX. В этот момент сервер не делает загрузку файла, а проверяет только его наличие по уникальному коду. Если такого файла не обнаружено, формируется новое имя файла, а в строку таблицы помещается запись о начале загрузки.

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

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

Механизм AJAX для загрузки файлов

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

Запуск AJAX

Получение ответа от сервера исполняется функцией WaitReplySC(). Справа внизу приведены коды для двух ситуаций: проверка наличия файла перед загрузкой и собственно процедура загрузки.

Ответ AJAX серверу

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

Логика процесса загрузки

Серверный код на PHP

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

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

Серверный код проверки имени файла

Это код проверки наличия файла по его уникальному имени. Функция объекта базы данных $oBase NewViuq() определяет уникальное имя для загружаемого элемента и ставит его в соответствие реальному имени файла.

Серверный код загрузки файла

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

Результат загрузки файла

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

Логика обмена данными

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

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

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



Источник