현재 위치: > 최신 기사 목록> ftp_rawlist는 파일 목록을 시간별로 정렬하는 방법을 구현합니다.

ftp_rawlist는 파일 목록을 시간별로 정렬하는 방법을 구현합니다.

gitbox 2025-05-26

1. FTP_RAWLIST 기능 소개

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

2. 시간 정보를 분석하고 타임 스탬프를 추출하십시오

시간별로 순서를 달성하려면 각 파일 정보의 시간 부분을 구문 분석하고 타임 스탬프로 변환해야합니다. 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;
}

3. 파일 목록을 시간별로 정렬하십시오

타임 스탬프를 사용하면 전체 파일 목록을 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는 오름차순으로 정렬됩니다. 내림차순으로 정렬하려면 비교 기호를 반대로 돌립니다.

4. 샘플 코드를 완료하십시오

구문 분석 시간의 이전 기능을 결합하여 다음은 시간별로 정렬 된 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";
}