NexxDigital - компьютеры и операционные системы

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

ISPmanager

Чтобы увидеть точный путь к папке с сайтом нужно слева вверху найти раздел "World Wide Web" -> "WWW домены". После того, как откроется список сайтов, в столбце "Директория" можно будет увидеть путь куда заливать файлы сайта (например ~/www/yoursite.com/). Но это будет относительный путь. А полный будет выглядеть так - /var/www/yourhostinglogin/data/, где yourhostinglogin - это логин от Вашего хостинг-аккаунта.

Также путь виден в "Менеджере файлов".

cPanel

Изначально данная ПУ хранит файлы сайта в папке ~/public_html/yoursite.com/ (полный путь - /var/www/yourhostinglogin/public_html/yoursite.com/). Но чтобы уточнить это переходим в раздел "Домены" -> "Дополнительные домены"

и напротив Вашего сайта будет столбец «Корневой каталог документов».

Parallels Plesk

Стандартный путь - /httpsdocs/yoursite.com/ (полный путь - /var/www/vhosts/yourhostinglogin.plsk.hostname/httpsdocs/yoursite.com/ где hostname - имя хостинга, которое предугадать невозможно, и нужно уточнять у хостинг-провайдера). Также нужно понимать, что для windows-хостинга этот путь будет другим и единого шаблона для него нет. Мы рекомендуем узнать путь в разделе "Сайты и домены" возле фразы "Папка сайта".

Для скачивания файлов с FTP-серверов, в принципе, достаточно браузера. При переходе по ссылке на FTP-сервер (или при указании адреса сервера в адресной строке браузера) на странице обозревателя появляется структура папок в виде ссылок. Чтобы зайти в папку, нужно щелкнуть по ссылке. При этом на странице появится содержимое этой папки, опять же в виде ссылок. Это могут быть ссылки на файлы или вложенные папки.

Если вход на FTP-сервер защищен паролем, то при переходе по FTP-ссылке в окне браузера появится диалоговое окно, в котором нужно ввести логин и пароль. Логин и пароль можно узнать у администратора сервера. Если это не представляется возможным, вы не сможете подключиться к этому серверу.

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

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

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

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

, $_GET [ "file" ] ) and file_exists ($_GET [ "file" ] ) ) { $content = file_get_contents ($_GET [ "file" ] ) ; header ("Content-Type: " . $ctype . "; charset=utf-8" ) ; header (. $_GET [ "file" ] ) ; ob_end_clean () ; ob_start () ; echo $content ; ob_end_flush () ; exit () ; } else { echo "Файл не найден." ; exit () ; }

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

Http://www.domen-saita.ru/files/download.php?file=test.xml или http://www.domen-saita.ru/files/download.php?file=test.txt

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

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

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

Http://www.domen-saita.ru/files/download.php?file=../configuration.php

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

preg_match ("/^Catalog{0,50}\.xml$/" , $_GET [ "file" ] )

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

Catalog.xml Catalog_krovati.xml Catalog_shkafy_i_tumby.xml

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

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

Http://www.domen-saita.ru/files/download.php?file=../drugaya-papka/test.xml

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

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

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

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

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

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

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

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

if (isset ($_GET [ "file" ] ) and preg_match ("/^Catalog{0,50}\.xml$/" , $_GET [ "file" ] ) and file_exists ($_GET [ "file" ] ) ) { header ("Content-Type: " . $ctype . "; charset=utf-8" ) ; header ("Content-Disposition: attachment; filename="

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

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

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

if (isset ($_GET [ "file" ] ) and preg_match ("/^{0,50}\.(xml|txt|pdf|png|gif|jpg|jpeg|exe|doc|xls|ppt|zip|)$/" , $_GET [ "file" ] ) and file_exists ($_GET [ "file" ] ) ) { $extension = strtolower (substr (strrchr ($_GET [ "file" ] , "." ) , 1 ) ) ; switch ($extension ) { case "txt" : $ctype = "text/plain" ; break ; case "pdf" : $ctype = "application/pdf" ; break ; case "exe" : $ctype = "application/octet-stream" ; break ; case "zip" : $ctype = "application/zip" ; break ; case "doc" : $ctype = "application/msword" ; break ; case "xls" : $ctype = "application/vnd.ms-excel" ; break ; case "ppt" : $ctype = "application/vnd.ms-powerpoint" ; break ; case "gif" : $ctype = "image/gif" ; break ; case "png" : $ctype = "image/png" ; break ; case "jpeg" : $ctype = "image/jpg" ; break ; case "jpg" : $ctype = "image/jpg" ; break ; default : $ctype = "application/force-download" ; } header ("Content-Type: " . $ctype . "; charset=utf-8" ) ; header ("Content-Disposition: attachment; filename=" . $_GET [ "file" ] ) ; ob_clean () ; readfile ($_GET [ "file" ] ) ; exit () ; } else { echo "Файл не найден." ; exit () ; }

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

FTP (File Transfer Protocol) - сетевой протокол, предназначен для передачи файлов в компьютерных сетях. Протокол FTP позволяет подключаться к серверам FTP, просматривать содержимое каталогов и загружать файлы с сервера или на сервер.

Информация для подключения

Управление FTP-аккаунтами производится в разделе FTP и SSH . Для перехода к настройкам FTP-пользователя необходимо нажать на его название.

На странице Свойства указаны основные параметры для подключения к серверу по FTP.

  • Адрес сервера (хост): ftp.login.nichost.ru, где login - уникальное имя услуги хостинга (указано в верхней правой части панели управления).
  • Имя FTP-пользователя (логин): login_ftp .
  • Для смены пароля FTP-пользователя нажмите кнопку Сбросить пароль . Новый пароль будет отображен в всплывающем окне. Для отправки пароля на ваш контактный адрес электронной почты, установите галочку Выслать пароль на почту .

Загрузка файлов на сервер

После создания сайта в разделе Сайты панели управления на хостинге появится каталог с его именем. Загружать файлы необходимо в корневой каталог сайта ваш_домен/docs . Сделать это можно при помощи одной из указанных ниже программ или панели управления хостингом.

Настройка программ

Информация о настройке популярных FTP-клиентов (FileZilla, FAR, Total Commander, iWeb и др.) размещена в статье .

Структура каталогов хостинга

При подключении к хостингу по FTP вы попадаете в домашний каталог. Он содержит следующие файлы и каталоги:

  • каталоги с именами сайтов (на примере login.nichost.ru ) - появляются при создании сайта в панели управления,
  • etc - содержит конфигурационные файлы хостинга,
  • tmp - для временных файлов, в него загружаются резервные копии,

Каталог сайта, который появляется при его создании в панели управления, имеет следующую структуру:

  • ваш_домен/docs - корневой каталог сайта. В него следует загружать файлы сайта (html-документы, php-скрипты, картинки). Полный путь к корневому каталогу сайта на сервере: /home/идентификатор/ваш_домен/docs;
  • ваш_домен/cgi - для cgi-скриптов, его содержимое доступно по адресу http://ваш_домен /cgi-bin/;
  • ваш_домен/php - для подключаемых php-модулей, путь к нему задан параметром include_path ;
  • ваш_домен/errordocs - содержит стандартные страницы ошибок;

Будьте внимательны при работе с файлами. Не удаляйте служебные файлы и каталоги - это может нарушить работу хостинга.

FTP-пользователю можно предоставить доступ только к определенному каталогу хостинга, например, к файлам одного сайта. Для этого:

  • авторизуйтесь в панели управления хостингом, используя номер вашего договора и пароль;
  • перейдите в раздел FTP и SSH , где вы увидите имена пользователей FTP;
  • выберите необходимого пользователя, отредактируйте поле Доступ , нажмите ссылку Изменить и сохраните изменения.

Например, чтобы FTP-пользователь имел доступ к файлам сайта example.com, в поле Доступ введите /home/login /example.com/docs , где login - идентификатор услуги хостинга, docs - корневой каталог сайта.

Узнать полный путь для каталога вы можете с помощью раздела Файловый менеджер панели управления хостингом. Путь отображается в верхней части страницы.

Ограничения при работе по FTP

  • Не более 10 одновременных соединений с одного IP-адреса и не более 5 одновременных подключений от одного FTP-пользователя.
  • Подключение возможно только с использованием FTP-пользователей, созданных в панели управления. Анонимный доступ не предоставляется.

Об использовании SFTP

SFTP (SSH File Transfer Protocol) - протокол, позволяющий передавать файлы с использованием шифрования. Соединение по SFTP является более безопасным и обладает дополнительной функциональностью (работа с символическими ссылками).

Диагностики неполадок и устранение ошибок при работе с FTP

При возникновении ошибок подключения по FTP рекомендуем выполнить следующие действия.

1. Получите актуальные параметры подключения к хостингу

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

2. Проверьте настройки FTP-клиента и операционной системы

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

3. Проверьте сетевое соединение

При возникновении технических неполадок на канале связи от вашего интернет-провайдера до сервера хостинга могут возникать ошибки подключения или наблюдаться низкая скорость передачи данных. Необходимо выполнить диагностику с .

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



Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ:
NexxDigital - компьютеры и операционные системы