FTP_RAWLIST 기능의 기능은 지정된 디렉토리의 자세한 파일 정보를 얻는 것입니다. Linux 터미널에서 LS -L 명령을 실행하는 것과 유사합니다. 결과는 문자열 배열이며 각 요소는 권한, 소유자, 크기, 시간 등을 포함한 파일 세부 사항을 나타냅니다.
$ftp_conn = ftp_connect("gitbox.net");
ftp_login($ftp_conn, "username", "password");
$rawlist = ftp_rawlist($ftp_conn, "/path/to/directory");
얻은 $ rawlist 배열은 일반적으로 다음과 같습니다.
-rw-r--r-- 1 user group 1234 May 10 12:30 file1.txt
drwxr-xr-x 2 user group 4096 Apr 22 10:00 folder1
-rw-r--r-- 1 user group 5678 May 11 14:15 file2.log
시간별로 순서를 달성하려면 각 파일 정보의 시간 부분을 구문 분석하고 타임 스탬프로 변환해야합니다. FTP_Rawlist 가 반환 한 시간 형식은 서버의 운영 체제에 따라 다를 수 있지만 대부분의 경우 위의 형식과 유사합니다.
다음은 타임 스탬프를 구문 분석하는 예제 기능입니다.
function parseFtpRawlistTime($line) {
// 공간별로 라인 줄을 분할하십시오,대부분의 부서9부분,파일 이름의 공백을 방지합니다
$parts = preg_split('/\s+/', $line, 9);
if (count($parts) < 9) {
return false; // 형식이 잘못되었습니다,구문 분석 할 수 없습니다
}
// 시간 정보는 일반적으로6、7、8조금,예를 들어:May 10 12:30 또는 May 10 2024
$month = $parts[5];
$day = $parts[6];
$timeOrYear = $parts[7];
// 현재 연도를 얻으십시오,기본 연도로
$currentYear = date('Y');
// 시간 형식은 시간입니다:분 또는 해
if (strpos($timeOrYear, ':') !== false) {
// 시간 형식,현재 연도를 연결해야합니다
$datetimeStr = "$month $day $currentYear $timeOrYear";
$timestamp = strtotime($datetimeStr);
// 시간이 현재 시간을 초과하는 경우(새해 전야),작년에 조정되었습니다
if ($timestamp > time()) {
$timestamp = strtotime("$month $day " . ($currentYear - 1) . " $timeOrYear");
}
} else {
// 올해 형식입니다,직접 변환
$datetimeStr = "$month $day $timeOrYear";
$timestamp = strtotime($datetimeStr);
}
return $timestamp ?: false;
}
타임 스탬프를 사용하면 전체 파일 목록을 PHP의 USORT 함수와 함께 정렬 할 수 있습니다. 예는 다음과 같습니다.
// 가정 $rawlist 예 ftp_rawlist 반환 된 배열
usort($rawlist, function($a, $b) {
$timeA = parseFtpRawlistTime($a);
$timeB = parseFtpRawlistTime($b);
if ($timeA == $timeB) return 0;
return ($timeA < $timeB) ? -1 : 1;
});
이런 식으로 $ rawlist는 오름차순으로 정렬됩니다. 내림차순으로 정렬하려면 비교 기호를 반대로 돌립니다.
구문 분석 시간의 이전 기능을 결합하여 다음은 시간별로 정렬 된 FTP 파일의 전체 목록의 예입니다.
<?php
$ftp_server = "gitbox.net";
$ftp_user = "username";
$ftp_pass = "password";
$conn = ftp_connect($ftp_server);
if (!$conn) {
die("연결할 수 없습니다 FTP 섬기는 사람");
}
if (!ftp_login($conn, $ftp_user, $ftp_pass)) {
ftp_close($conn);
die("FTP 로그인이 실패했습니다");
}
$path = "/path/to/directory";
$rawlist = ftp_rawlist($conn, $path);
ftp_close($conn);
function parseFtpRawlistTime($line) {
$parts = preg_split('/\s+/', $line, 9);
if (count($parts) < 9) {
return false;
}
$month = $parts[5];
$day = $parts[6];
$timeOrYear = $parts[7];
$currentYear = date('Y');
if (strpos($timeOrYear, ':') !== false) {
$datetimeStr = "$month $day $currentYear $timeOrYear";
$timestamp = strtotime($datetimeStr);
if ($timestamp > time()) {
$timestamp = strtotime("$month $day " . ($currentYear - 1) . " $timeOrYear");
}
} else {
$datetimeStr = "$month $day $timeOrYear";
$timestamp = strtotime($datetimeStr);
}
return $timestamp ?: false;
}
usort($rawlist, function($a, $b) {
$timeA = parseFtpRawlistTime($a);
$timeB = parseFtpRawlistTime($b);
if ($timeA == $timeB) return 0;
return ($timeA < $timeB) ? -1 : 1;
});
// 출력 정렬 된 파일 목록
foreach ($rawlist as $line) {
echo $line . "\n";
}