먼저 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 파일을 관리 해야하는 응용 프로그램 시나리오에 적극 권장됩니다.