индексирование ftp сервера. проблема :(

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:
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); 
}	
////////////////////////////
помогите, пожалуйста! заранее благодарю за ответы!!!
 

fizot

Новичок
а что за хостинг?весь текст не осилил, но думаю, что это связано с настройками твоего хостинга, т.к. возможно что он думает, что ты хочешь использовать его как шелл или ещё что-то в этом вроде. Вообщем задай этот вопрос в службу поддержки своего хостинга
 

Woffka

Новичок
спасибо :) переговорю

if(!ftp_chdir($conn_id,$dir)) ftp_cdup($conn_id);

вот на этой строке все гадится :(
 
Сверху