﻿
<h1 class=p1>Другие возможности при работе с FTP</h1>
<table border="0" cellspacing="10">
    <tr valign="top">
        <td>
            <a class=bluelink href="#1" title="Переход в родительский каталог">ftp_cdup()</a>&nbsp;<br>
            <a class=bluelink href="#4" title="Создание каталога">ftp_mkdir()</a>&nbsp;<br>
            <a class=bluelink href="#7" title="Удаление каталогов">ftp_rmdir()</a>&nbsp;<br>
            <a class=bluelink href="#0" title="Работа через брандмауэр">ftp_pasv()</a>&nbsp;<br>
        </td>
        <td>
            <a class=bluelink href="#2" title="Изменение текущего рабочего каталога">ftp_chdir()</a>&nbsp;<br>
            <a class=bluelink href="#5" title="Перечисление файлов в каталоге">ftp_nlist()</a>&nbsp;<br>
            <a class=bluelink href="#8" title="Определение размера файлов">ftp_size()</a>&nbsp;<br>
        </td>
        <td>        
            <a class=bluelink href="#3" title="Удаление файлов">ftp_delete()</a>&nbsp;<br>
            <a class=bluelink href="#6" title="Переименование файлов">ftp_rename()</a>&nbsp;<br>
            <a class=bluelink href="#9" title="Посылка команды на сервер">ftp_site()</a>&nbsp;<br>
        </td>
    </tr>
</table>
<br>
<br>

<a name=1></a>
<h2 class=p1>Переход в родительский каталог</h2>
<p class=text>Изменение текущего рабочего каталога на родительский производится с помощью функции <b>ftp_cdup</b>:</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
  <em class=gr>bool</em><b> ftp_cdup</b><em class=gr>(int</em> <b>ftp_connect</b><em class=gr>);</em>
</pre></blockquote>
<p class=prim><b><i>Пример:</i></b></p>
<blockquote><pre>
<em class=red>&lt;?</em>
  <b>$host</b><em class=gr> = </em>"ftp.server.ru"<em class=gr>;</em>
  <b>$port</b><em class=gr> = </em>21<em class=gr>;</em>
  <b>$user</b><em class=gr> = </em>"anonymous"<em class=gr>;</em>
  <b>$passwrod</b><em class=gr> = </em>"password"<em class=gr>;</em>
  <b>$connect</b><em class=gr> = </em><b>ftp_connect</b><em class=gr>(</em><b>$host</b>, <b>$port</b>, 150<em class=gr>);
  if(</em><b>!$connect</b><em class=gr>)
  {
    exit();  
  }</em>
  <b>$result</b><em class=gr> = </em><b>ftp_login</b><em class=gr>(</em><b>$connect</b>, <b>$user</b>, <b>$password</b><em class=gr>);
  if(</em><b>$result</b><em class=gr>)
  {</em><em class=comnt>
    // сохраняем имя текущего рабочего каталога</em>
    <b>$current_dir</b><em class=gr> = </em><b>ftp_pwd</b><em class=gr>(</em><b>$connect</b><em class=gr>);</em>
    <em class=comnt>// переходим в родительский каталог </em>
    <b>ftp_cdup</b><em class=gr>(</em><b>$connect</b><em class=gr>);</em>
    <em class=comnt>// сохраняем имя нового каталога</em>
    <b>$new_dir</b><em class=gr> = </em><b>ftp_pwd</b><em class=gr>(</em></b>$connect</b><em class=gr>);
  }
  else
  {</em>
    <b>ftp_quit</b><em class=gr>(</em><b>$connect</b><em class=gr>);
    exit();
  }</em><em class=comnt>
  // Закрываем соединение</em>
  <b>ftp_quit</b><em class=gr>(</em><b>$connect</b><em class=gr>);</em>
<em class=red>?&gt;</em>
</pre></blockquote>
<a name=2></a>
<h2 class=p1>Изменение текущего рабочего каталога</h2>
<p class=text>Изменение текущего рабочего каталога на указанный осуществляется при помощи функции <b>ftp_chdir</b>:</p>
<blockquote><pre>
<em class=red>&lt;?</em>
  <b>$new_dir</b><em class=gr> = </em>"web"<em class=gr>;</em>
  <b>ftp_chdir</b><em class=gr>(</em><b>$connect</b>, <b>$new_dir</b><em class=gr>);</em>
<em class=red>?&gt;</em>
</pre></blockquote>
<p class=text>Как видно из этого листинга, функция <b>ftp_chdir</b> имеет два параметра: дескриптор соединения <b>$connect</b> и имя нового каталога <b>$new_dir</b>.</p>
<a name=3></a>
<h2 class=p1>Удаление файлов</h2>
<p class=text>Удалить файл с FTP-сервера можно с помощью функции <b>ftp_delete</b>:</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
  <em class=gr>bool</em> <b>ftp_delete</b><em class=gr>(int</em> <b>ftp_connect</b>, <em class=gr>string</em> <b>remote_file</b><em class=gr>);</em>
</pre></blockquote>
<p class=text>Здесь <b>ftp_connect</b> - дескриптор соединения, а <b>remote_file</b> - имя удаляемого файла.</p>
<a name=4></a>
<h2 class=p1>Создание каталога</h2>
<p class=text>Новый каталог можно создать, используя функцию <b>ftp_mkdir</b>:</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
  <em class=gr>string</em> <b>ftp_mkdir</b><em class=gr>(int</em> <b>ftp_connect</b>, <em class=gr>string</em><b> directory</b><em class=gr>);</em>
</pre></blockquote>
<p class=text>Эта функция возвращает имя созданного каталога или false в случае неудачи:</p>
<blockquote><pre>
<em class=red>&lt;?</em>
  <b>$dir</b><em class=gr> = </em>"web"<em class=gr>;</em>
  <b>$created_dir</b><em class=gr> = </em><b>ftp_mkdir</b><em class=gr>(</em><b>$connect</b>, <b>$dir</b><em class=gr>);</em>
<em class=red>?&gt;</em>
</pre></blockquote>
<a name=5></a>
<h2 class=p1>Перечисление файлов в каталоге</h2>
<p class=text>Узнать, какие файлы находятся в текущем каталоге, можно применив функцию <b>ftp_nlist</b>:</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
  <em class=gr>array</em> <b>ftp_nlist</b><em class=gr>(int</em><b> ftp_connect</b>, <em class=gr>string</em><b> directory</b><em class=gr>);</em>
</pre></blockquote>
<p class=prim><b><i>Пример:</i></b></p>
<p class=prim><b><i></i></b></p>
<blockquote><pre>
<em class=red>&lt;?</em>
  <b>$file_list</b><em class=gr> = </em><b>ftp_nlist</b><em class=gr>(</em><b>$connect</b>, "."<em class=gr>);
  if(</em><b>is_array</b><em class=gr>(</em><b>$file_list</b><em class=gr>))
  {</em>
    <b>foreach</b><em class=gr>(</em><b>$file_list</b> <em class=gr>as</em> <b>$file</b><em class=gr>)
    {
      echo(</em>"<b>$file</b> &lt;br&gt;"<em class=gr>);
    }
  }</em>
<em class=red>?&gt;</em>
</pre></blockquote>
<a name=6></a>
<h2 class=p1>Переименование файлов</h2>
<p class=text>Переименовать файлы на FTP-сервере осуществляется с помощью функции <b>ftp_rename</b>:</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
  <em class=gr>bool</em><b> ftp_rename</b><em class=gr>(int</em><b> ftp_connect</b>, <em class=gr>string</em><b> from</b>, <em class=gr>string</em><b> to</b><em class=gr>);</em>
</pre></blockquote>
<a name=7></a>
<h2 class=p1>Удаление каталогов</h2>
<p class=text>Для удаления каталогов применяется функция <b>ftp_rmdir</b>:</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
   <em class=gr>bool</em><b> ftp_rmdir</b><em class=gr>(int</em><b> ftp_connect</b>, <em class=gr>string</em><b> directory</b><em class=gr>);</em>
</pre></blockquote>
<a name=8></a>
<h2 class=p1>Определение размера файлов</h2>
<p class=text>Для определения размера файлов существует функция <b>ftp_size</b>:</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
  <em class=gr>int</em><b> ftp_size</b><em class=gr>(int</em><b> ftp_connect</b>, <em class=gr>string</em><b> filepath</b><em class=gr>);</em>
</pre></blockquote>
<p class=text>В случае неудачи функция возвращает -1. К примеру:</p>
<blockquote><pre>
<em class=red>&lt;?</em>
  <b>$file</b><em class=gr> = </em>"/web/user/file.txt"<em class=gr>;</em>
  <b>$file_size</b><em class=gr> = </em><b>ftp_size</b><em class=gr>(</em><b>$connect</b>, <b>$file</b><em class=gr>);
  if (</em><b>$file_size</b><em class=gr> == </em>-1<em class=gr>)
  {
    echo(</em>"Размер файла не определен"<em class=gr>);
  }
  else
  {
    echo(</em>"Файл <b>$file</b> имеет размер <b>$file_size</b> байт"<em class=gr>);
  }</em>
<em class=red>?&gt;</em>
</pre></blockquote>
<a name=9></a>
<h2 class=p1>Посылка команды на сервер</h2>
<p class=text>Послать на сервер команду можно с помощью функции <b>ftp_site</b>:</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
  <em class=gr>bool</em><b> ftp_site</b><em class=gr>(int</em><b> ftp_connect</b>, <em class=gr>string</em><b> command</b><em class=gr>);</em>
</pre></blockquote>
<p class=text>Эта функция посылает на сервер команду <b>SITE</b>. Как правило, с помощью команд SITE выполняются такие команды операционной системы, как <b>chmod</b>. Список команд SITE, поддерживаемый сервером можно узнать, подключившись к нему и выполнив команду <b>REMOTEHELP</b>.  Ниже приведен код, позволяющий изменить права доступа к файлу на удаленном сервере:</p>
<blockquote><pre>
<em class=red>&lt;?</em>
  <b>$command</b><em class=gr> = </em>"chmod 0766 /web/user/file.txt"<em class=gr>;</em>
  <b>ftp_site</b><em class=gr>(</em><b>$connect</b>, <b>$command</b><em class=gr>);</em>
<em class=red>?&gt;</em>
</pre></blockquote>
<a name=0></a>
<h2 class=p1>Работа через брандмауэр</h2>
<p class=text>При работе с FTP-сервером через брандмауэр часто бывает необходимо изменить активный режим, при котором соединение инициируется сервером, на пассивный, при котором соединение инициируется клиентом. Это можно сделать, применив функцию <b>ftp_pasv</b>:</p>
<blockquote><pre>
<em class=red>&lt;?</em>
  <b>$pasv_flag</b><em class=gr> = </em>true<em class=gr>;</em>
  <b>$pasv_result</b><em class=gr> = </em><b>$pasv_flag</b><em class=gr> ? </em>"enabled" <em class=gr>:</em> "disabled"<em class=gr>;</em>
  <b>ftp_pasv</b><em class=gr>(</em><b>$connect</b>, <b>$pasv_flag</b><em class=gr>);</em>
<em class=red>?&gt;</em>
</pre></blockquote>
