2008-10-30

Как вывести список файлов через FTP

Встала такая задача - вывести в список всех флеш роликов используемых в проекте. При этом известен только FTP заход. Конечно, можно просмотреть все страницы сайта, посмотреть где есть ссылки на swf и записать их адреса, но это займет много времени да к тому же можно что либо пропустить. Можно воспользоваться возможностями FAR Мanager, но он не выводит результат в текстовый файл, поэтому написал вот такую программку:

<?php error_reporting(E_ALL | E_STRICT); class FtpSearch { var $server_url = ''; var $username = ''; var $password = ''; var $remote_folder = ''; var $ftp; function log($message){ print $message; } function show(){ $this->ftp = ftp_connect($this->server_url); if ($this->ftp===FALSE){ $this->log('Can not connect to FTP server'); } else { $this->log('Connected successful'); if(ftp_login($this->ftp,$this->username,$this->password)){ $this->getListOfFiles($this->remote_folder,$this->remote_folder); } else { $this->log('Login failure!'); } ftp_quit($this->ftp); $this->log('Connection closed!'); } } function getListOfFiles($folder,$filename){ flush (); set_time_limit(30); if (ereg('\.swf$',$folder)){ print $folder.'<br />'; } $c = @ftp_chdir($this->ftp,$filename); if ($c){ $list = ftp_rawlist($this->ftp,''); $files = array(); reset($list); while (list(,$row) = each($list)) { $buf=""; if ($row[0]=='d'||$row[0]=='-'){ $buf = ltrim(substr($row,55)); $files[]=$buf; } } if ($files!==FALSE){ foreach($files as $file){ if (($file!='..') and ($file!='.')){ $this->getListOfFiles($folder.'/'.$file,$file); } } } $c = ftp_chdir($this->ftp,'..'); } } } $c = new FtpSearch(); $c->show(); ?>
 

комментарии:

 
Атиух (анонимный пользователь) | 2008-10-30
Вместо ereg*() лучше использовать preg_* функции, они в PHP быстрее даже сравнения строк, да и регекспы там мощнее.
max | 2008-10-30

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

Атиух (анонимный пользователь) | 2008-10-30
Внимательно прочитай предыдущее сообщение. preg_match() быстрее ereg() и substr() в разы.
max | 2008-10-30

Не надо ничего путать, функции семейства str* не имеют ничего общего с регулярными выражениями, следовательно работают гораздо быстрее т.к. менее гибкие и не требуют предварительной компиляции. О чем, кстати, и написано в документации: If you dont need fancy replacing rules (like regular expressions), you should always use this function instead of ereg_replace() or preg_replace().

Для того чтобы каждый раз не представляться можно войти как зарегистрированный пользователь.

Имя*

разрешены только теги br, font, span, p, strong, u, p, blockquote, a, div, img - остальные будут безжалостно удаляться