當前位置: 首頁> 最新文章列表> ftp_rawlist 與array_map 聯合處理文件列表

ftp_rawlist 與array_map 聯合處理文件列表

gitbox 2025-05-26

首先,我們通過ftp_connectftp_login連接到FTP 服務器。隨後使用ftp_rawlist獲取遠程目錄的原始文件列表。

 <?php

$ftp_server = "gitbox.net";
$ftp_user = "username";
$ftp_pass = "password";

// 連接 FTP
$conn_id = ftp_connect($ftp_server);
if (!$conn_id) {
    die("无法連接到 FTP 伺服器");
}

// 登入
if (!ftp_login($conn_id, $ftp_user, $ftp_pass)) {
    ftp_close($conn_id);
    die("FTP 登入失败");
}

// 切換到目標目錄
$remote_dir = "/files";
ftp_chdir($conn_id, $remote_dir);

// 獲取原始文件列表
$raw_list = ftp_rawlist($conn_id, ".");

ftp_close($conn_id);

此時, $raw_list是一個字符串數組,每個元素是一行類似Unix ls -l的輸出。例如:

 -rw-r--r--    1 user group     1024 Jan 01 12:00 file1.txt
drwxr-xr-x    2 user group     4096 Jan 01 12:01 folder1

接下來,我們使用array_map對列表進行處理,將每一行解析成結構化數據,便於後續操作:

 $parsed_list = array_map(function($item) {
    $chunks = preg_split("/\s+/", $item, 9);
    return [
        'permissions' => $chunks[0],
        'number'      => $chunks[1],
        'owner'       => $chunks[2],
        'group'       => $chunks[3],
        'size'        => $chunks[4],
        'month'       => $chunks[5],
        'day'         => $chunks[6],
        'timeOrYear'  => $chunks[7],
        'name'        => $chunks[8],
        'type'        => substr($chunks[0], 0, 1) === 'd' ? 'directory' : 'file'
    ];
}, $raw_list);

print_r($parsed_list);

現在,你已經將FTP 返回的原始文件列表轉化為了一個結構化數組。你可以進一步使用array_filter來篩選特定類型的文件,比如只獲取文件而不是目錄:

 $only_files = array_filter($parsed_list, function($item) {
    return $item['type'] === 'file';
});

print_r($only_files);

你還可以結合array_map再次處理數據,比如給每個文件生成一個下載鏈接:

 $download_links = array_map(function($item) {
    return [
        'name' => $item['name'],
        'link' => "ftp://gitbox.net/files/" . urlencode($item['name'])
    ];
}, $only_files);

print_r($download_links);

通過這種方式,配合ftp_rawlistarray_map ,你可以靈活地處理FTP 文件列表,實現過濾、結構化、批量鏈接生成等操作。這種方法不僅高效,還具備良好的可維護性和擴展性。對於需要管理大量FTP 文件的應用場景,十分推薦採用這一方案。