လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> FTP_RAWLIST သည် File Lists ကိုအချိန်အားဖြင့် sorting နည်းလမ်းကိုအကောင်အထည်ဖော်သည်

FTP_RAWLIST သည် File Lists ကိုအချိန်အားဖြင့် sorting နည်းလမ်းကိုအကောင်အထည်ဖော်သည်

gitbox 2025-05-26

1 ။ ftp_Rawlist function ကိုမိတ်ဆက်

FTP_RAWLIST function ၏ function သည်သတ်မှတ်ထားသော directory ၏အသေးစိတ်ဖိုင်အချက်အလက်များကိုရယူရန်ဖြစ်သည်။ ၎င်းသည် LS -L command ကို Linux terminal တွင်လုပ်ဆောင်ခြင်းနှင့်ဆင်တူသည်။ ရရှိသောရလဒ်မှာ DESTRESS တစ်ခုစီသည်ခွင့်ပြုချက်များ, ပိုင်ရှင်များ, အရွယ်အစား, အချိန်စသည်ဖြင့်ဖိုင်မှတ်တမ်းများအပါအ 0 င်ဖိုင်အသေးစိတ်အချက်အလက်များဖြစ်သည်။

 $ftp_conn = ftp_connect("gitbox.net");
ftp_login($ftp_conn, "username", "password");
$rawlist = ftp_rawlist($ftp_conn, "/path/to/directory");

ရရှိသော $ Rawlist Array သည်များသောအားဖြင့်ဤသို့ဖြစ်သည်။

 -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 ။ အချိန်အချက်အလက်များကိုခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်အချိန်တံဆိပ်ခေါင်းများထုတ်ယူပါ

အချိန်အားဖြင့်မှာယူရန်အချိန်အားဖြင့်အချိန်အတိုမလ်အချက်အလက်များတွင်အချိန်အပိုင်းအခြားသည်အချိန်ခွဲခြမ်းစိတ်ဖြာရန်နှင့် timestamp သို့ပြောင်းလဲရန်လိုအပ်သည်။ FTP_RAWLIST မှပြန်လာသောအချိန်သည်ဆာဗာ၏ operating system ပေါ် မူတည်. ကွဲပြားနိုင်သည်ကိုသတိပြုပါ။ သို့သော်များသောအားဖြင့်၎င်းသည်အထက်ဖော်ပြပါပုံစံနှင့်ဆင်တူသည်။

ဤတွင် timestamps များကို parsestamps ကိုခွဲခြမ်းစိတ်ဖြာသောဥပမာတစ်ခုမှာ -

 function parseFtpRawlistTime($line) {
    // နေရာများအားဖြင့် split line strings,ကွဲပြားမှုအများဆုံး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');

    // အချိန် format ကိုဆုံးဖြတ်ရန်နာရီဖြစ်ပါတယ်:တစ်မိနစ်သို့မဟုတ်တစ်နှစ်
    if (strpos($timeOrYear, ':') !== false) {
        // အချိန်ပုံစံ,လက်ရှိနှစ် splice ဖို့လိုအပ်ပါတယ်
        $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 ။ ဖိုင်စာရင်းအားဖြင့် sort

Timestamp နှင့်အတူဖိုင်တွဲတစ်ခုလုံးကို PHP ၏ USort function နှင့်ပေါင်းစပ်။ sort လုပ်နိုင်ပါတယ်။ ဥပမာများမှာအောက်ပါအတိုင်းဖြစ်သည် -

 // ယူဆချက် $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 ကို အချိန်အတန်ကြာအမိန့်တွင်ခွဲထားသည်။ သင်ကဆင်းနိုင်ရန်အတွက် sort လုပ်လိုလျှင်နှိုင်းယှဉ်သင်္ကေတများကိုပြောင်းပြန်ဖြင့်ပြောင်းပါ။

4 ။ နမူနာကုဒ်ကိုဖြည့်ပါ

ယခင် parsing အချိန်၏ယခင် function ကိုပေါင်းစပ်ခြင်း, အောက်ပါကအချိန်အားဖြင့် sorted 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;
});

// output sorted file list ကို
foreach ($rawlist as $line) {
    echo $line . "\n";
}