Woffka
Новичок
индексирование ftp сервера. проблема 
PHP Version 4.3.11
FreeBSD 5.3-RELEASE-p15 FreeBSD 5.3-RELEASE-p15
проблема назрела таковая:
у меня на сайте, есть поиск по фтп серверам, естественно не в режиме реального времени. я их заранее сканю
все было хорошо, пока сайт хостился у меня на компе под виндой(были глюки в разборе строки полученной от rawlist, если в имени файла или папки имелась дата - была кака, неправильно записывалось. ну то не важно), а вот как переехал на людский хостинг, возникли проблемы.
опишу на пальцах. скрипт сканит секуднд 15-20(по разному), после чего как бы останавливается, видимо фтпшник разрывает связь и выдает
Warning: ftp_chdir(): Data connection closed, transfer aborted. in /usr/local/psa/home/vhosts/*/httpdocs/admin/scan_ftp.php on line 149
Warning: ftp_chdir(): PORT Command successful. in /usr/local/psa/home/vhosts/*/httpdocs/admin/scan_ftp.php on line 149
/Games/EA GAMES/Need for Speed Most Wanted/CARS/TRAFCOURT
/Games/EA GAMES/Need for Speed Most Wanted/CARS/TRAFCEMTR
и так до конца списка фалов в папке "Warning: ftp_chdir(): PORT Command successful"
вобщем так, скнит первую папку Games, там идет в первую андерграунд, и просканивает ее всю, потом как только переходит в другую игру
Warning: ftp_chdir(): PORT Command successful.
естественно до конца не сканитца
все остальные папки расположенные в корне, он только заходит и сразу выходит
Warning: ftp_chdir(): PORT Command successful. in /usr/local/psa/home/vhosts/*/httpdocs/admin/robot.php on line 72
woffka.mt: /Games/lfs
woffka.mt:
Warning: ftp_chdir(): PORT Command successful. in /usr/local/psa/home/vhosts/*/httpdocs/admin/robot.php on line 72
woffka.mt: /Install
woffka.mt:
Warning: ftp_chdir(): PORT Command successful. in /usr/local/psa/home/vhosts/*/httpdocs/admin/robot.php on line 72
woffka.mt: /Music
woffka.mt:
Warning: ftp_chdir(): PORT Command successful. in /usr/local/psa/home/vhosts/*/httpdocs/admin/robot.php on line 72
woffka.mt: /incom
woffka.mt:
помогите, пожалуйста! заранее благодарю за ответы!!!

PHP Version 4.3.11
FreeBSD 5.3-RELEASE-p15 FreeBSD 5.3-RELEASE-p15
проблема назрела таковая:
у меня на сайте, есть поиск по фтп серверам, естественно не в режиме реального времени. я их заранее сканю

все было хорошо, пока сайт хостился у меня на компе под виндой(были глюки в разборе строки полученной от rawlist, если в имени файла или папки имелась дата - была кака, неправильно записывалось. ну то не важно), а вот как переехал на людский хостинг, возникли проблемы.
опишу на пальцах. скрипт сканит секуднд 15-20(по разному), после чего как бы останавливается, видимо фтпшник разрывает связь и выдает
Warning: ftp_chdir(): Data connection closed, transfer aborted. in /usr/local/psa/home/vhosts/*/httpdocs/admin/scan_ftp.php on line 149
Warning: ftp_chdir(): PORT Command successful. in /usr/local/psa/home/vhosts/*/httpdocs/admin/scan_ftp.php on line 149
/Games/EA GAMES/Need for Speed Most Wanted/CARS/TRAFCOURT
/Games/EA GAMES/Need for Speed Most Wanted/CARS/TRAFCEMTR
и так до конца списка фалов в папке "Warning: ftp_chdir(): PORT Command successful"
вобщем так, скнит первую папку Games, там идет в первую андерграунд, и просканивает ее всю, потом как только переходит в другую игру
Warning: ftp_chdir(): PORT Command successful.
естественно до конца не сканитца

все остальные папки расположенные в корне, он только заходит и сразу выходит
Warning: ftp_chdir(): PORT Command successful. in /usr/local/psa/home/vhosts/*/httpdocs/admin/robot.php on line 72
woffka.mt: /Games/lfs
woffka.mt:
Warning: ftp_chdir(): PORT Command successful. in /usr/local/psa/home/vhosts/*/httpdocs/admin/robot.php on line 72
woffka.mt: /Install
woffka.mt:
Warning: ftp_chdir(): PORT Command successful. in /usr/local/psa/home/vhosts/*/httpdocs/admin/robot.php on line 72
woffka.mt: /Music
woffka.mt:
Warning: ftp_chdir(): PORT Command successful. in /usr/local/psa/home/vhosts/*/httpdocs/admin/robot.php on line 72
woffka.mt: /incom
woffka.mt:
PHP:
function analysedir($dirline)
{
global $systyp,$ftp_server,$stop;
if(ereg("([-dl])[rwxst-]{9}",substr($dirline,0,10))) {
$systyp = "UNIX";
}
if(substr($dirline,0,5) == "total") {
$dirinfo[0] = -1;
} elseif($systyp=="Windows_NT") {
if(ereg("[-0-9]+ *[0-9:]+[PA]?M? +<DIR> {10}(.*)",$dirline,$regs)) {
$dirinfo[0] = 1;
$dirinfo[1] = 0;
$dirinfo[2] = $regs[1];
} elseif(ereg("[-0-9]+ *[0-9:]+[PA]?M? +([0-9]+) (.*)",$dirline,$regs)) {
$dirinfo[0] = 0;
$dirinfo[1] = $regs[1];
$dirinfo[2] = $regs[2];
}
} elseif($systyp=="UNIX") {
if(ereg("([-d])[rwxst-]{9}.* ([0-9]*) [a-zA-Z]+ [0-9: ]*[0-9] (.+)",$dirline,$regs)) {
if($regs[1]=="d") $dirinfo[0] = 1;
$dirinfo[1] = $regs[2];
$dirinfo[2] = $regs[3];
}
}
if(($dirinfo[2]==".")||($dirinfo[2]=="..")) $dirinfo[0]=0;
// array -> 0 = switch, directory or not
// array -> 1 = filesize (if dir =0)
// array -> 2 = filename or dirname
return $dirinfo;
}
function rekdir($dir)
{
global $conn_id,$filetyps,$exectyps,$ftp_server,$banlist,$size,$ssize,$connection,$ftp_name,$ftp_id;
echo "$ftp_name: <b>$dir</b><br>";
$dirlist = ftp_rawlist($conn_id,"");
for($i=0;$i<count($dirlist);$i++) {
$dirinfo = analysedir($dirlist[$i]);
if($dirinfo[0]==1) {
$newdir = "$dir/$dirinfo[2]";
if(($dirinfo[2]=="~")||(substr($dirinfo[2],0,1)==" "))
$chdir=ftp_chdir($conn_id,$newdir);
else $chdir=ftp_chdir($conn_id,$dirinfo[2]);
$stop = 0;
// for($k=0;($k<count($banlist))&&(!$stop);$k++) {
// if(strpos($newdir,$banlist[$k])!=0) $stop=1;
// }
if(!$stop && $chdir) {
rekdir($newdir);
}
if(!ftp_chdir($conn_id,$dir)) ftp_cdup($conn_id);
} elseif($dirinfo[0]==0) {
if($dirinfo[2] != ".." && $dirinfo[2] != ".") {
if(mysql_query("insert into index_ftp values('$ftp_id', '$dir', '$dirinfo[2]', '$dirinfo[1]')", $connection) && mysql_query("update ftp_servers set size='-', files='-' WHERE id='$ftp_id'", $connection))
{
echo "$ftp_name: $dirinfo[2]<br>";
}
}
$size += $dirinfo[1];
}
}
}
////////////////////////////
$conn_id = ftp_connect($ftp_ip, $ftp_port, 2);
$login_result = @ftp_login($conn_id, $ftp_user, $ftp_pass);
if ($login_result) {
$real_systyp = ftp_systype($conn_id);
$systyp = $real_systyp;
#echo "Systyp - $systyp";
rekdir("");
ftp_quit($conn_id);
}
////////////////////////////