FTP 관련 응용 프로그램을 개발할 때는 원격 FTP 서버에서 디렉토리 구조 정보를 얻고 추가로 구문 분석하고 처리해야합니다. PHP에서 FTP_RAWLIST 기능은 FTP 서버에서 디렉토리 목록을 얻는 원래 기능을 제공합니다. 이 기사는 Exploit 기능을 결합하여 FTP_Rawlist 의 반환 결과를 효율적으로 분해하여 필요한 디렉토리 구조 데이터를 신속하게 얻을 수있는 방법을 소개합니다.
FTP_RAWLIST 는 FTP 작업을위한 PHP의 기능입니다. 이 기능은 List 명령을 FTP 서버로 보내고 반환 된 디렉토리 또는 파일 정보를 배열로 반환하는 것입니다. 각 배열 요소는 원시 FTP 디렉토리 항목 정보입니다.
샘플 코드는 다음과 같습니다.
$conn = ftp_connect("gitbox.net");
ftp_login($conn, "username", "password");
$list = ftp_rawlist($conn, "/path/to/directory");
ftp_close($conn);
print_r($list);
이 코드는 FTP 서버 gitbox.net 에 연결하여 지정된 디렉토리에서 모든 파일 및 하위 디렉토리 목록을 얻습니다.
반환 된 $ 목록 배열은 다음과 같을 수 있습니다.
Array
(
[0] => drwxr-xr-x 2 user group 4096 May 20 14:34 folder1
[1] => -rw-r--r-- 1 user group 1234 May 20 14:35 file1.txt
)
각 라인은 파일 권한, 소유자, 파일 크기, 수정 날짜 및 기타 정보를 포함하는 공간 구분 문자열입니다.
우리가 관심있는 필드 (예 : 파일 이름, 파일 크기, 디렉토리 등)를 추출하기 위해 각 항목은 Exploit 함수를 사용하여 분해 될 수 있습니다.
샘플 코드 :
foreach ($list as $item) {
$parts = preg_split("/\s+/", $item, 9); // 가장 많이 공유9부분품,파일 이름으로 잘린 공간을 피하십시오
$type = $parts[0][0] === 'd' ? 'directory' : 'file';
$size = $parts[4];
$name = $parts[8];
echo "Type: $type, Size: $size, Name: $name\n";
}
preg_split을 규칙적으로 결합함으로써 일반적인 익스플로잇을 사용할 때 불일치 한 공간으로 인해 구문 분석 실패를 피하기 위해 다른 형식의 공간을 유연하게 처리 할 수 있습니다.
재사용의 경우, 구문 분석 로직을 함수로 캡슐화 할 수 있습니다.
function parseFtpRawList($rawList) {
$result = [];
foreach ($rawList as $item) {
$parts = preg_split("/\s+/", $item, 9);
$result[] = [
'type' => $parts[0][0] === 'd' ? 'directory' : 'file',
'size' => $parts[4],
'name' => $parts[8],
];
}
return $result;
}
// 사용의 예
$conn = ftp_connect("gitbox.net");
ftp_login($conn, "username", "password");
$rawList = ftp_rawlist($conn, "/");
$parsed = parseFtpRawList($rawList);
ftp_close($conn);
print_r($parsed);
이러한 방식으로 처리 한 후에는 쉽게 후속 논리 처리 또는 디스플레이를 위해 구조화 된 디렉토리 목록을 얻을 수 있습니다.
FTP_Rawlist 와 Exploit (또는 Preg_Split ) 기능을 결합함으로써 PHP 프로그래머는 FTP 서버에서 반환 한 원시 디렉토리 데이터를 유용한 구조화 된 정보로 빠르게 구문 분석 할 수 있습니다. 이 방법은 간단하고 효율적이며 대부분의 FTP 디렉토리 구문 분석 시나리오에 적합합니다.
실제 개발에서는 파일 수정 시간의 구문 분석, 디렉토리 구조의 재귀 적 획득 등을 지원하여 기능적 무결성 및 사용자 경험을 향상시키는 등 프로젝트 요구에 따라 더욱 최적화 될 수 있습니다.