首先,我們通過ftp_connect和ftp_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_rawlist和array_map ,你可以靈活地處理FTP 文件列表,實現過濾、結構化、批量鏈接生成等操作。這種方法不僅高效,還具備良好的可維護性和擴展性。對於需要管理大量FTP 文件的應用場景,十分推薦採用這一方案。