社區裏某位同志寫的一個FTP內容抓取程序

程序演示 http://labs.phpz.org/ftplist/

源代碼如下:

<?php

$info = array (

    'user' => 'username',

    'pass' => 'password',

    'host' => 'ftp host',

    'port' => '21',

    'path' => '',

    'pasv' => true,

    'level' => 3,

    'charset' => 'gb2312',



    

);



ftplist($info);



function ftplist($info) {

    set_time_limit(0);

    $ftp_conn = @ ftp_connect($info['host'], intval($info['port']), 5) or die('ERR: 鏈接服務器失敗!');

    echo "INFO: 成功連接服務器./n";

    @ ftp_login($ftp_conn, $info['user'], $info['pass']) or die("ERR: 登錄失敗!");

    echo "INFO: 登錄成功./n";

    if (ftp_pasv($ftp_conn, $info['pasv'])) {

        printf("INFO: %s 被動模式./n", $info['pasv'] ? '開啓' : '關閉');

    } else {

        echo "ERR: 模式設置失敗./n";

    }

    fpath($info['path']);

    printf("/nftp://%s:%s@%s:%s%s/n/n", $info['user'], $info['pass'], $info['host'], $info['port'], $info['path']);

    get_file_list($ftp_conn, $info['path'], 0, intval($info['level']), $info['charset']);

    ftp_close($ftp_conn);

}



function get_file_list($ftp, $path, $level, $max_level = 3, $in_char = 'utf-8') {

    if ($level >= $max_level) {

        return;

    }

    $list = ftp_rawlist($ftp, $path);

    for ($i = 0; $i < count($list); $i++) {

        $finfo = file_info($list[$i], $path);

        fchar($finfo['info'], $finfo['file'], $in_char);

        flush();

        if ($finfo['isdir']) {

            get_file_list($ftp, $finfo['file'], $level +1, $max_level, $in_char);

        }

    }

}



function file_info($fileinfo, $path) {

    $isdir = strtolower($fileinfo[0]) == 'd';

    $info = substr($fileinfo, 0, 56);

    $file = $path . substr($fileinfo, 56);

    $isdir && fpath($file);

    return array (

        'isdir' => $isdir,

        'info' => $info,

        'file' => $file

    );

}



function fchar($info, $file, $in_char) {

    if ($in_char != 'utf-8') {

        $file = iconv($in_char, 'utf-8', $file);

    }

    echo "$info$file /n";

}



function fpath(& $path) {

    substr($path, -1) != '/' && $path .= '/';

    $path[0] != '/' && $path = '/' . $path;

}

?>

發佈了34 篇原創文章 · 獲贊 6 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章