Четверг, 16.05.2024, 12:47
DigitalBox
Приветствую Вас Гость | RSS
Главная Использование протокола FTP Регистрация Вход
Меню сайта

Использование протокола FTP



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

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

Протокол FTP не зависит от Web. Это значит, что передачу файла можно осуществить в сценарии, написанном на РНР для Web, или в любом другом сценарии. Протокол FTP позволяет получить содержимое каталога на удаленном компьютере и передать в том или ином направлении один или несколько файлов.

Протокол FTP основан на архитектуре клиент/сервер, т.е. для передачи файлов между вашим и удаленным компьютером необходимо сначала подключиться к серверу FTP, а потом передать запрос.

Язык РНР позволяет обмениваться файлами с помощью протокола FTP. В случае использования операционной системы Windows поддержка FTP включена по умолчанию. При установке РНР в операционных системах Unix/Linux/Mac следует воспользоваться параметром

--enable-ftp


Подключение к серверу FTP

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

$connect = ftp_connect("janet.valade.com") ;

В качестве аргумента этой функции можно также использовать -адрес сервера FTP.

$connect = ftp_connect("172.17.204.2");

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

Для регистрации на сервере FTP в языке РНР предусмотрена функция ftp_login(). При этом предполагается, что у пользователя имеются соответствующие идентификатор и пароль.

$login_result = ftp_login($connect, $userid, $passwd);

Если же соединение с сервером FTP не было установлено предварительно, будет выведено следующее предупреждающее сообщение:

Warning: ftp_login() expects parameter 1 to be resource, boolean given in d:\test1\test13.php on line 9

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

$connect = ftp_connect("janet.valade.com")
                   or die("He удалось подключиться к серверу");
$login_result = ftp_login($connect,$userid,$passwd)
                   or die("He удалось зарегистрироваться на сервере");

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


Получение содержимого каталога

При использовании протокола FTP одной из основных задач является получение содержимого каталога. Для этого в РНР предусмотрена функция ftp_nlist(), которая возвращает массив имен файлов. Ее синтаксис имеет такой вид:

$filesArr = ftp_nlist($connect, "data");

Второй параметр функции ftp_nlist() служит для указания имени каталога. Если же оно неизвестно, можно получить список файлов текущего каталога:

$directory_name = ftp_pwd($connect);
$filesArr = ftp_nlist($connect, $directory_name);

Для отображения всех файлов каталога можно воспользоваться следующим фрагментом кода:

foreach($filesArr as $value)
{
     echo $value\n;
}


Передача файлов с помощью протокола FTP

Для получения файла с удаленного компьютера с помощью протокола FTP в РНР предназначена функция ftp_get(). Ее синтаксис имеет следующий вид:

ftp_get($connect, "newfile.txt", "data.txt", FTP_ASCII);

Аргумент newfile.txt соответствует имени файла, которое он будет иметь после загрузки на пользовательский компьютер, a data.txt — имя существующего файла, находящегося на сервере FTP.

Четвертый параметр означает тип загружаемого файла: FTP_ASCII (файл в формате ASCII) или FTP_BINARY (двоичный файл). Чтобы определить тип файла, достаточно проанализировать его содержимое. Если он состоит из читаемых символов, то это файл в формате ASCII, в противном случае он является двоичным. Например, двоичными являются графические файлы.

Для загрузки файла с пользовательского компьютера на удаленный узел в языке РНР предназначена функция ftp_put(). Ее синтаксис имеет следующий вид:

ftp_put($connect, "newfile.txt", "data.txt", FTP_ASCII);

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

После завершения работы с соединением FTP его можно закрыть с помощью функции ftp_close():

ftp_close($connect);

В качестве примера рассмотрим приведенный в листинге А сценарий РНР, который позволяет получить из заданного каталога все файлы с расширением .txt. Передача файлов осуществляется с использованием протокола FTP.

Листинг А. Сценарий, позволяющий загружать файлы с использованием протокола FTP

‹?php
/* Имя сценария:  downloadFiles
  * Описание:           загружает все файлы каталога
  *                                с расширением .txt
  */
     $dir_name = "data/";
     $connect = ftp_connect("janet.valade.com")
                or die("He удалось подключиться к FTP-серверу");
     $login_result = ftp_login($connect, $userID, $passwd)
               or die("He удалось зарегистрироваться на FTP-сервере");
     $filesArr = ftp_nlist($connect,$dir_name);
     foreach($filesArr as $value)
     {
          if(ereg("\.txt$'\ $value))
          {
               if(!file_exists($value))
               {
                    ftp_get($connect, $value, $dir_name.$value, FTP_ASCII);
               }
               else
               {
                    echo "Файл $value уже существует!\n";
               }
          }
     }
     ftp_close($connect);
?›


В данном сценарии сначала происходит получение списка файлов из каталога на удаленном компьютере, который сохраняется в массиве $filesArr. Цикл foreach используется для прохода по всем элементам этого массива и проверки, имеет ли файл расширение .txt. Если это так, сценарий проверяет, существует ли файл с указанным именем. Если файл уже был загружен с сервера, выводится соответствующее сообщение, в противном случае файл передается на компьютер пользователя.


Другие функции для работы с протоколом FTP

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

 Функция Описание
ftp_connect("имя_сервера")Инициирует подключение к компьютеру. В качестве параметра шя_сервера можно использовать доменное имя или IP-адрес
ftp_delete($connect, "путь/имя_файла")Удаляет файл на удаленном компьютере
ftp_exec($connect, "команда")Выполняет системную команду на удаленном компьютере
ftp_fget($connect, $fh, "data.txt", FTP_ASCII)
Загружает содержимое файла, находящегося на удаленном компьютере, в открытый файл с дескриптором $fh
ftp_fput($connect, "new.txt", $fh, FTP_ASCII)
Загружает содержимое открытого на стороне пользователя файла с дескриптором $fh на сервер FTP
ftp_get($connect, "d.txt", "sr.txt", FTP_ASCII)Загружает файл, находящийся на удаленном компьютере, sr.txt — это имя файла, загружаемого с сервера; d.txt — имя результирующего файла на компьютере пользователя
ftp_login($connect, $userID, $password)
Обеспечивает регистрацию на сервере FP
ftp_mdtm($connect, "filename.txt")Возвращает время последнего изменения файла
ftp_mkdir($connect, "имя_каталога")
Создает новый каталог на удаленном компьютере
ftp_nlist($connect, "имя_каталога")
Возвращает массив, элементами которого являются имена файлов, находящихся в удаленном каталоге
ftp_put($connect, "d.txt", "sr.txt", FTP_ASCII)
Загружает файл на удаленный компьютер, sr.txt — имя загружаемого файла; d.txt — имя файла после загрузки на удаленный компьютер
ftp_pwd($connect)Возвращает имя текущего каталога на удаленном компьютере
ftp_rename($connect, "старое_имя", "новое_имя")
Переименовывает файл, находящийся на удаленном компьютере
ftp_rmdir($connect, "имя_каталога")Удаляет каталог, находящийся на удаленном компьютере
ftp_size($connect, "filename.txt")Определяет размер файла, находящегося на удаленном компьютере
ftp_systype($connect)Возвращает тип операционной системы, используемой файловым сервером, например Unix

Форма входа

Мини-чат

Календарь новостей
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Поиск

Друзья сайта
Скажи сайту спасибо
ЯндексЯндекс. ДеньгиХочу такую же кнопку



Получить WMR-бонус на свой кошелек!

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz