|
定义为:
array ftp_rawlist ( resource ftp_stream, string directory)
对这其中的directory所使用的字符有什么限制?
我编了一下脚本,用来在指定ftp服务器上搜索文件.
[php]
<?php
/* To search a file on ftp server using a regular expression.
To call:
ftp_search.php regx ftp_server user password
OR
ftp_search.php regx ftp://user:password@ftp_server/dir
OR
ftp_search.php regx user:password@ftp_server/dir
*/
//Input process
$file = $argv[1];
$file_reg = "/" . $file . "/i";
if ($argv[2])
list($user,$password,$ftp_site,$port,$dir) = url_parse($argv[2]);
if(!$ftp_site)
$ftp_site = "127.0.0.1";
if(!$user)
$user = "anonymous";
if(!password)
$password = "somebody@earth.com";
if(!$dir)
$dir = "/";
if(!$port)
$port = 21;
if($argv[3])
$user = $argv[3];
if($argv[4])
$password = $argv[4];
//input test
/* echo "user is $user\n";
echo "password is $password\n";
echo "ftp_site is $ftp_site\n";
echo "port is $port\n";
echo "dir is $dir\n";
*/
//input process ends
while(true)
{
$ftp = ftp_connect($ftp_site,$port);
if ($ftp)
{
echo "Connected succeesfully!\n";
echo "Remote system is " . ftp_systype($ftp) . "\n";
}
else
{
echo "Connection failed!\n";
continue;
}
$status = @ftp_login($ftp,$user,$password);
if ($status)
{
echo "Login successfully\n";
break;
}
else
{
echo "Login failed\n";
echo "I'll try again\n";
ftp_close($ftp);
}
}
if(ftp_pasv($ftp,true))
echo "Enter pasv mode\n";
search($dir,$file_reg);
if($ftp)
ftp_close($ftp);
function search($dir,$file_reg)
{
global $file;
global $ftp;
if(!ftp_chdir($ftp,$dir))
{
echo "Failed to chang to $dir \n";
return false;
}else{
// echo "Successfully changed into $dir\n";
// echo "Searching in $dir\n";
}
if(! $item = ftp_rawlist($ftp,$dir))
echo "Failed to list " . $dir . "\n";
else
{
foreach($item as $key => $each)
{
list($permission,$owner,$group,$filesize,$month,$mday,$time,$filename) = list_parse($each);
//echo "item[$key => $each]\n";
//$row = preg_split("/\s+/",$each);
//echo "Matching $file_reg, $row[8]\n";
if(preg_match("/^d/",$permission))
if ( $filename != "." && $filename != "..")
{
$dirname = (ftp_pwd($ftp) == "/") ? "" : ftp_pwd($ftp);
$dir = $dirname . "/$filename" ;
//echo "$dir is a directory!";
search($dir,$file_reg);
}
if(preg_match($file_reg,$filename))
{
$dirname = (ftp_pwd($ftp) == "/") ? " " : ftp_pwd($ftp);
echo "Find: " . $dirname . "/$filename\n";
}
}
}
ftp_cdup($ftp);
//echo "Now working in " . ftp_pwd($ftp) . "\n";
}
function url_parse($url)
{
//echo "url is $url\n";
preg_match("/^(ftp:\/\/)?(\w+:\w+@)?([^\/:]*)(:\d*)?(\/.*)?/i",$url, $matches);
$host = $matches[3];
$dir = $matches[5];
if($matches[2])
{
preg_match("/(\w+)\w+)@/",$matches[2],$user_passwd);
$user = $user_passwd[1];
$password = $user_passwd[2];
/*
echo "user is $user\n";
echo "password is $password\n";
echo "host is $host\n";
echo "dir is $dir\n";
*/
}
if($matches[4])
{
$port = ltrim($matches[4],":");
echo "port is $port\n";
}
return array($user,$password,$host,$port,$dir);
}
function list_parse($list)
{
//echo "list is:\n$list\n";
preg_match("/(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S.*)/",$list,$matches);
//echo $matches[0];
$permission = $matches[1];
$owner = $matches[3];
$group = $matches[4];
$filesize = $matches[5];
$month = $matches[6];
$mday = $matches[7];
$time = $matches[8];
$filename = $matches[9];
/*
echo "permission is $permission\n";
echo "owner is $owner\n";
echo "group is $group\n";
echo "filesize is $filesize\n";
echo "month is $month\n";
echo "mday is $mday\n";
echo "time is $time\n";
echo "filename is $filename\n";
*/
return array($permission,$owner,$group,$filesize,$month,$mday,$time,$filename);
}
?>
[/php]
出现的问题是,有些时候会出错:
failed to list directory:……
而这个目录我用其他的ftp工具是可以打开的。
而且当我在自己的机器上面建相同的目录结构时却又不出错。不知道是哪个地方是问题了 |
|