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();
?>
разрешены только теги br, font, span, p, strong, u, p, blockquote, a, div, img - остальные будут безжалостно удаляться
комментарии:
Да мне их мощность, в принципе, не нужна была, нужно было чтобы быстро и чтобы все работало. Да и для того чтобы проверить хвост файла можно и substr без вопросов применить, эта функция в разы быстрее будет работать, но это ведь думать надо было :)
Не надо ничего путать, функции семейства str* не имеют ничего общего с регулярными выражениями, следовательно работают гораздо быстрее т.к. менее гибкие и не требуют предварительной компиляции. О чем, кстати, и написано в документации: If you dont need fancy replacing rules (like regular expressions), you should always use this function instead of ereg_replace() or preg_replace().