Скрипт скачивания различных документов с сервера

Скрипт скачивания различных документов с сервераНедавно, для одного интернет-магазина на базе joomla-virtuemart. сделал скрипт, позволяющий на основе информации о товарах в базе данных генерировать каталоги товаров в виде XML документа с соблюдением формата Yandex Market Language (YML-формат каталога). Скрипт генерирует такие каталоги и сохраняет в файловой системе сайта. Но, клиент очень скоро пожаловался, что неудобно скачивать каталоги с сайта. И правда, при прямом обращении к каталогу, он просто открывается в браузере и чтобы его скачать нужно дополнительно нажать правой кнопкой мыши и кликнуть «сохранить как…».

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

Принцип работы этого скрипта довольно прост. Допустим, скрипт записан в php файл с именем «download. php» и помещен в папку «files». Формируется ссылка на этот скрипт, в которой передается GET параметр file и в этом параметре передается имя требуемого текстового документа. Например, мы хотим скачать текстовый файл с именем test. xml или test. txt:

При этом, если файл найден в файловой системе, в браузере всплывает диалоговое окно сохранения документа на компьютер.

Безопасность

Однако, в такой организации скачивания документов с сервера таится одна серьезная опасность. Если я введу в адресной строке браузера такой запрос:

в таком случае начнется то, чего ни в коем случае допускать нельзя! Начнется скачивание файла конфигурации Вашего сайта (в данном случае имеется ввиду файл конфигурации joomla, однако это в равной степени касается всех CMS). А это автоматически означает полный крах, потому что в таком случае в руки пользователю попадает вся жизненно важная информация связанная с работоспособностью сайта. И вопрос взлома – это уже вопрос ближайшего времени. Поэтому, чтобы предотвратить такую возможность, мы должны позаботиться о безопасности. Именно для этого в первой строке скрипта полученный запрос проходит проверку регулярным выражением.

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

и тому подобное… То есть имя файла, в данном случае, должно начинаться с «Catalog» и заканчиваться на «.xml», с учетом регистра — любые другие вариации будут отклонены и на экран будет выведено сообщение «файл не найден». Хотя, физически он может находиться на сервере, но его скачивать не разрешено.

Причем, так же в этом регулярном выражении нет возможностьи пропустить символ «/» и «.» (кроме точки в окончании имени файла). Это предотвращает возможность в качестве имени файла указать путь до файла в другой папке, аналогично примеру с «configuration. php», или например:

То есть, данный скрипт позволит скачивать xml файлы только из той папки, в которой находится сам скрипт.

Однако, Вы можете изменить структуру регулярного выражения так, чтобы допустить скачивание любых «txt», «xml», «pdf», а так же любых графических файлов типа «png», «gif» и прочее… В общем, тут Вы можете полностью сами решать какие файлы можно скачивать с помощью этого скрипта. Главное ни в коем случае не допускайте через этот скрипт скачивание системных файлов вашего сайта, которые могут нести какие-то важные настройки, логины и пароли. Если с помощью этого скрипта захотите организовать скачивание из разных директорий файловой системы, то подумайте о том чтобы не было возможности скачивать из папки типа «administrator» или «admin», или из папок, которые содержат файлы расширений CMS, в том числе их файлы конфигурации.

На этом, собственно, вопрос безопасности завершается и дальше идет просто техническая работа по подготовке к скачиванию, если проверка пройдена успешно и файл с таким именем существует.

Во второй строке скрипта запрашивается содержимое целевого файла и помещается в переменную.

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

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

Алтернативный код

Здесь представлен код того же скрипта, но чтение и дальнейшее скачивание файла с сервера происходит через функцию readfile(), что согласно документации php точно не должно вызвать проблем с переполнением памяти. На всякий случай, перед вызовом этой функции происходит очищение буфера с помощью ob_clean().

Однако, я не хочу сказать что скрипт указанный в первой части статьи хуже, просто для него я не могу сказать как он поведет себя при скачивании файлов большого размера. В случае же второго варианта, со слов самих разработчиков php – таких проблем точно не возникнет.

Дополнительное улучшение

Если Вы надумаете использовать скрипт для скачивания файлов разных форматов, то будет полезно при каждом скачивании в заголовках правильно указывать тип передаваемых данных, т. н. MIME-типы (подробнее можно прочитать здесь ). Для этого нужно добавить анализ имени файла на предмет его расширения, тогда скрипт будет примерно таков:

Кроме того, при желании, можно скрипт доработать таким образом чтобы ограничить количество скачиваний конкретного файла для одного пользователя. При этом прямой доступ к файлам перекрыть настройками сервера (например, через. htaccess на apache).

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

как накрутить сообщения в вк 2018 скрипт

как установить клео скрипты

где находится скрипт

This entry was posted in Как скачать скрипт and tagged , , , . Bookmark the <a href="http://iprowebber.ru/skript-skachivaniya-razlichnyx-dokumentov-s-servera/" title="Permalink to Скрипт скачивания различных документов с сервера" rel="bookmark">permalink</a>.

Comments are closed.