လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Laravel Projects တွင်ဝေးလံခေါင်သီသောဖိုင်စီမံခန့်ခွဲမှုကိုအကောင်အထည်ဖော်ရန် FTP_RAWLIST ကိုအသုံးပြုပါ

Laravel Projects တွင်ဝေးလံခေါင်သီသောဖိုင်စီမံခန့်ခွဲမှုကိုအကောင်အထည်ဖော်ရန် FTP_RAWLIST ကိုအသုံးပြုပါ

gitbox 2025-05-28

အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင် Laravel Project များသည်အဝေးမှ directory file lists များရယူခြင်း, ကူးယူခြင်းသို့မဟုတ်ဒေါင်းလုပ်လုပ်ခြင်းကဲ့သို့သောဝေးလံခေါင်ဖျားသော FTP ဆာဗာများနှင့်အပြန်အလှန်ဆက်သွယ်ရန်လိုအပ်သည်။ PHP ၏ built-in ftp_Rawlist function သည် ftp server directory file ၏အသေးစိတ်အချက်အလက်များကိုရယူခြင်း၏လုပ်ဆောင်မှုကိုပေးသည်။ Laravel framework နှင့်အတူပေါင်းစပ်ထားသော FTP ဖိုင်စီမံခန့်ခွဲမှုကိုအလွယ်တကူအကောင်အထည်ဖော်နိုင်သည်။

ဤဆောင်းပါးသည် FTP ဆာဗာနှင့်ချိတ်ဆက်ခြင်း, ဖိုင်စာရင်းတွင်ဖိုင်မှတ်တမ်းများရယူခြင်းနှင့်ဖိုင်အချက်အလက်များကိုထုတ်ဖော်ပြောဆိုခြင်းအပါအ 0 င်အဝေးမှ FTP ဖိုင်များကိုစီမံခန့်ခွဲရန် FTP_RAWList function ကိုမည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်မိတ်ဆက်ပေးပါမည်။


1 ။ အဝေးမှ FTP server ကိုဆက်သွယ်ပါ

Laravel တွင် ftp connection ၏ configuration information ကို .env Acturnection ၏ configure encount file ရှိ configuration admerment file သို့နေရာချထားရန်စီမံခန့်ခွဲမှုနှင့်ပြောင်းရန်လွယ်ကူချောမွေ့စေရန်အကြံပြုသည်။

 // .env
FTP_HOST=gitbox.net
FTP_USERNAME=your_username
FTP_PASSWORD=your_password
FTP_PORT=21

FTP server သို့ချိတ်ဆက်ရန်ဤ configurations များကိုသင်၏ကုဒ်တွင်သုံးပါ။

 <?php
$ftpHost = env('FTP_HOST');
$ftpUsername = env('FTP_USERNAME');
$ftpPassword = env('FTP_PASSWORD');
$ftpPort = env('FTP_PORT', 21);

// တည်ထောင်FTPဆက်
$connId = ftp_connect($ftpHost, $ftpPort);
if (!$connId) {
    die('无法ဆက်到FTPဆာဆာ');
}

// လော့ဂ်အင်
$loginResult = ftp_login($connId, $ftpUsername, $ftpPassword);
if (!$loginResult) {
    ftp_close($connId);
    die('FTPလော့ဂ်အင်失败');
}

// passive mode သို့ပြောင်းပါ(လိုအပ်ရင်)
ftp_pasv($connId, true);

2 ။ File List ကိုရယူရန် FTP_RAWLIST ကိုသုံးပါ

FTP_RAWLIST function သည် linux system တွင် LS -l command ၏ output နှင့်ဆင်တူသည့်သတ်မှတ်ထားသောလမ်းညွှန်တွင်ဖိုင်များနှင့်လမ်းညွှန်များနှင့်ပတ်သက်သောအသေးစိတ်အချက်အလက်များကိုရယူနိုင်သည်။ Return Value သည် strings array တစ်ခုဖြစ်ပြီး element တစ်ခုစီသည်လမ်းညွှန်အချက်အလက်များဖြစ်သည်။

root directory file list ကိုရယူရန်ဥပမာ -

 <?php
$directory = '/'; // Remote လမ်းညွှန်လမ်းကြောင်း
$fileList = ftp_rawlist($connId, $directory);

if ($fileList === false) {
    echo "ဖိုင်စာရင်းကိုမရရှိနိုင်ပါ";
} else {
    foreach ($fileList as $fileInfo) {
        echo $fileInfo . PHP_EOL;
    }
}

ရလဒ်ဥပမာ:

 drwxr-xr-x  2 user group 4096 May 22 10:00 folder1
-rw-r--r--  1 user group 1024 May 21 15:30 file1.txt

3 ။ FTP_RAWLIST မှပြန်လာသောအချက်အလက်များကိုခွဲခြမ်းစိတ်ဖြာ

FTP_RAWLIST မှပြန်လာသောအချက်အလက်များတစ်ခုစီတွင်ခွင့်ပြုချက်များ, ပိုင်ရှင်, ဖိုင်အရွယ်အစား, ပြုပြင်မွမ်းမံခြင်းအချိန်, ဖိုင်အမည်, ဖိုင်အမည်များပါ 0 င်သည်။

ရိုးရှင်းသော parsing ဥပမာ:

 <?php
function parseRawList($rawList) {
    $result = [];

    foreach ($rawList as $line) {
        $parts = preg_split('/\s+/', $line, 9);
        if (count($parts) < 9) continue;

        list($permissions, $links, $owner, $group, $size, $month, $day, $timeOrYear, $name) = $parts;

        $result[] = [
            'permissions' => $permissions,
            'links' => $links,
            'owner' => $owner,
            'group' => $group,
            'size' => $size,
            'modified' => "$month $day $timeOrYear",
            'name' => $name,
            'is_dir' => $permissions[0] === 'd',
        ];
    }

    return $result;
}

$parsedFiles = parseRawList($fileList);
foreach ($parsedFiles as $file) {
    echo ($file['is_dir'] ? '[မာတိကာ]' : '[စာချုပ်စာတမ်း]') . " {$file['name']} အရွယ်: {$file['size']} ပြုပြင်မွမ်းမံအချိန်: {$file['modified']}" . PHP_EOL;
}

4 ။ FTP ဆက်သွယ်မှုကိုပိတ်ပါ

စစ်ဆင်ရေးပြီးစီးပြီးနောက် connection ကိုပိတ်ပြီးအရင်းအမြစ်ကိုထုတ်ပြန်ပါ။

 <?php
ftp_close($connId);

5 ။ ဥပမာ Laravel ရှိ FTP ဖိုင်စီမံခန့်ခွဲမှု 0 န်ဆောင်မှုအတန်းကို Encapsuling ၏ဥပမာ

ပြန်လည်သုံးသပ်ရန်အတွက် reusability တိုးတက်စေရန် FTP 0 န်ဆောင်မှုအတန်းကို encapsulated encapsulated ပြုလုပ်နိုင်ပြီးဖိုင်စာရင်းဝယ်ယူမှု function ကိုပေးနိုင်သည်။

 <?php

namespace App\Services;

class FtpService
{
    protected $connection;
    protected $loginResult;

    public function connect()
    {
        $host = config('ftp.host', 'gitbox.net');
        $port = config('ftp.port', 21);
        $username = config('ftp.username');
        $password = config('ftp.password');

        $this->connection = ftp_connect($host, $port);
        if (!$this->connection) {
            throw new \Exception('FTPဆက်失败');
        }

        $this->loginResult = ftp_login($this->connection, $username, $password);
        if (!$this->loginResult) {
            ftp_close($this->connection);
            throw new \Exception('FTPလော့ဂ်အင်失败');
        }

        ftp_pasv($this->connection, true);
    }

    public function getRawList($directory = '/')
    {
        if (!$this->connection) {
            $this->connect();
        }

        $rawList = ftp_rawlist($this->connection, $directory);
        if ($rawList === false) {
            throw new \Exception("获取မာတိကာ $directory စာချုပ်စာတမ်း列表失败");
        }

        return $rawList;
    }

    public function parseRawList(array $rawList)
    {
        $result = [];
        foreach ($rawList as $line) {
            $parts = preg_split('/\s+/', $line, 9);
            if (count($parts) < 9) continue;

            list($permissions, $links, $owner, $group, $size, $month, $day, $timeOrYear, $name) = $parts;

            $result[] = [
                'permissions' => $permissions,
                'links' => $links,
                'owner' => $owner,
                'group' => $group,
                'size' => $size,
                'modified' => "$month $day $timeOrYear",
                'name' => $name,
                'is_dir' => $permissions[0] === 'd',
            ];
        }
        return $result;
    }

    public function disconnect()
    {
        if ($this->connection) {
            ftp_close($this->connection);
            $this->connection = null;
        }
    }
}

အသုံးပြုတဲ့အခါ

 <?php
use App\Services\FtpService;

$ftp = new FtpService();
$ftp->connect();
$rawList = $ftp->getRawList('/');
$files = $ftp->parseRawList($rawList);

foreach ($files as $file) {
    echo ($file['is_dir'] ? '[မာတိကာ]' : '[စာချုပ်စာတမ်း]') . " {$file['name']} အရွယ်: {$file['size']} ပြုပြင်မွမ်းမံအချိန်: {$file['modified']}" . PHP_EOL;
}

$ftp->disconnect();