<?xml version="1.0" encoding="UTF-8" ?><oembed><version>1.0</version><provider_name>Чудо{вищные} заметки</provider_name><provider_url>https://miracle.rpz.name</provider_url><author_name>MiRacLe</author_name><author_url>https://miracle.rpz.name/author/miracle/</author_url><title>phing.tasks.ext.FtpUploadTask</title><html>Вычищая комментарии от спама (достали, честное октябрятское) наткнулся на &lt;a href=&quot;http://miracle.rpz.name/2006/09/20/phing-is-not-gnu/#comments&quot;&gt;незаслуженно позабытый вопрос&lt;/a&gt; товарища &lt;a href=&quot;http://altern.ho.com.ua/&quot;&gt;altern&lt;/a&gt;-a про обещанный ftpupload-таск. Вы спросили - мы ответили: нет, мне не сложно - делюсь.

Собственно сам класс &lt;a href=&quot;http://miracle.rpz.name/shared/phing/FtpUploadTask.html&quot;&gt;FtpUploadTask.php&lt;/a&gt;. И небольшие пояснения.

Код по означенной ссылке необходимо сохранить в файл %PHING_HOME%/classes/phing/tasks/ext/FtpUploadTask.php (Разумеется вы уже знаете что такое &lt;a href=&quot;http://phing.info/&quot;&gt;Phing&lt;/a&gt; и он у вас установлен и готов к использованию).
Для работы требуется установленный в include_path &lt;a href=&quot;http://pear.php.net/package/Net_FTP/&quot;&gt;PEAR::Net_FTP&lt;/a&gt;, которому в свою очередь необходим &lt;a href=&quot;http://php.net/ftp&quot;&gt;php-extension FTP&lt;/a&gt;.
&lt;blockquote&gt;&lt;strike&gt;На заметку виндузятникам&lt;/strike&gt;
&lt;i&gt;Первое можно установить посредством выполнения магического пасса в командной строке:
&gt;pear install --all-deps net_ftp
Второе в виндовом php уже вкомпилено.&lt;/i&gt;&lt;/blockquote&gt;
Параметры, которые принимает task (на всякий случай на моём террибл инглиш ):
&lt;table class=&quot;std&quot;&gt;
&lt;thead&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;host&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Hostname.&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;port&lt;/td&gt;
&lt;td&gt;Integer&lt;/td&gt;
&lt;td&gt;Ftp server&#039;s port.&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;username&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Ftp user&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;password&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Ftp password&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;targetDir&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Path to destination directory&lt;/td&gt;
&lt;td&gt;. (FTP-user&#039;s home)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mode&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Upload FTP-mode.&lt;/td&gt;
&lt;td&gt;Binary&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cleanDir&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;td&gt;Cleanup target directory before upload?&lt;/td&gt;
&lt;td&gt;False&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;overwriteExisten&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;td&gt;Overwrite existen files?&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;passiveMode&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;td&gt;use passive or active ftp-data connection&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
И пример использования : привожу часть build.xml необходимую и достаточную для запуска таска.
&lt;pre class=&quot;xml:nocontrols&quot;&gt;
&lt;!-- //skip --&gt;
&lt;taskdef classname=&quot;phing.tasks.ext.FtpUploadTask&quot; name=&quot;ftpupload&quot; /&gt;
&lt;!-- //skip --&gt;
&lt;target name=&quot;deploy&quot;&gt;
   &lt;ftpupload host=&quot;example.com&quot; username=&quot;joe&quot; password=&quot;$ecr3t&quot; targetDir=&quot;/remote/project_home/&quot;&gt;
      &lt;fileset dir=&quot;/path/to/local/project&quot;&gt;
         &lt;include name=&quot;**&quot; /&gt;
         &lt;exclude name=&quot;**/*.dist&quot; /&gt;
         &lt;exclude name=&quot;src/*&quot; /&gt;
      &lt;/fileset&gt;
   &lt;/ftpupload&gt;
&lt;/target&gt;
&lt;!-- //skip --&gt;
&lt;/pre&gt;
Разумеется taskdef удобнее перенести в defaults.properties, для того чтобы не таскать его из проекта в проект.

И снова повторюсь - &quot;таким образом программист может за три часа написать программу, которая сделает за пять минут то, что другой человек делал бы целый час…&quot;  ;o)

Technorati Tags: &lt;a href=&quot;http://technorati.com/tag/php&quot; rel=&quot;tag&quot;&gt;php&lt;/a&gt;, &lt;a href=&quot;http://technorati.com/tag/phing&quot; rel=&quot;tag&quot;&gt;phing&lt;/a&gt;, &lt;a href=&quot;http://technorati.com/tag/deploy&quot; rel=&quot;tag&quot;&gt;deploy&lt;/a&gt;</html><type>rich</type></oembed>