+ -
当前位置:首页 → 问答吧 → 第一题(FTP方式遍历linux服务器)

第一题(FTP方式遍历linux服务器)

时间:2008-10-08

来源:互联网

这道题大家一般应该大都写的遍历win32本地磁盘上信息,我就写一个遍历linux的ftp服务器上信息的吧
[php]
/**
*
* 功能: 遍历ftp服务器上的所有文件(linux)
* $ftp_id: ftp链接句柄
* $dir_address: 要遍历的目录
* 返回值: 二维数组 | false
*
*/
function listFilesOnFTP($ftp_id, $dir_address)
{
    $fileslist = array();
    $count = 0;
    $contents = ftp_rawlist($ftp_id, $dir_address);
    if(!is_array($contents)) return false;
    foreach($contents as $entry)
    {
        $entry = str_replace(" 0 ", " * ", $entry);
        $pieces = strtok($entry, " ");
        $i = 0;
        while($pieces)
        {
            $i++;
            if($i == 1) $type = $pieces; //获取文件属性
            if($i == 5) $size = $pieces; //获取文件大小
            if($i == 9) $name = $pieces; //获取文件名
            if($i >  9) $name = $name." ".$pieces; //获取完整名称
            $pieces = strtok(" ");
        }
        $address = $dir_address.$name; //文件的完整地址
        if($type[0] == 'd') //如果该文件是目录
        {
            $tmp = listFilesOnFTP($ftp_id, $dir_address.$name.'/'); //递归
            $fileslist[] = $tmp;
            $count = $count + count($tmp);
        }else{ //如果不是目录,逐项添加到数组
            $fileslist[$count][] = $name;
            $fileslist[$count][] = $type;
            $fileslist[$count][] = $size;
            $fileslist[$count][] = $address;
        }
        $count++;
    }
    return $fileslist;
}
[/php]


$ftp_server = "127.0.0.1";
$conn_id = ftp_connect($ftp_server);
$ftp_user = "username";
$ftp_pass = "password";
ftp_login($conn_id, $ftp_user, $ftp_pass);
$dir_address = '/dir/'; //要遍历的目录
var_dump(listFilesOnFTP($conn_id, $dir_address));

作者: linvo   发布时间: 2008-10-08

这个思路我都没想到。楼主脑子确实挺灵活。我没想到用FTP。
不错的说。

作者: kuhanzhu   发布时间: 2008-10-08

粉不错嘀说,不过,如果用FTP遍历一个PHPCMS的目录结构,那速度…………不敢想象的说~~

作者: 飞翔de希望   发布时间: 2008-10-08

原帖由 飞翔de希望 于 2008-10-8 16:40 发表
粉不错嘀说,不过,如果用FTP遍历一个PHPCMS的目录结构,那速度…………不敢想象的说~~
呵呵,这主要可以用于遍历ftp服务器上的资源
如果可以本地操作,当然不会用它啦

作者: linvo   发布时间: 2008-10-08