လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ပစ်မှတ်ထားဖိုင်တွဲဖွဲ့စည်းပုံကိုမည်သို့ဖန်တီးရမည်နှင့် PHP ၏ Zip_read function ကိုစကင်ဖတ် () function ကို အသုံးပြု. ဖိုင် decompression ကိုအကောင်အထည်ဖော်နိုင်မည်နည်း။

ပစ်မှတ်ထားဖိုင်တွဲဖွဲ့စည်းပုံကိုမည်သို့ဖန်တီးရမည်နှင့် PHP ၏ Zip_read function ကိုစကင်ဖတ် () function ကို အသုံးပြု. ဖိုင် decompression ကိုအကောင်အထည်ဖော်နိုင်မည်နည်း။

M66 2025-06-15

PHP တွင် Zip compressed files များပြုလုပ်သောအခါ zip_read () function သည် compressed package တစ်ခုရှိအကြောင်းအရာများကိုဖတ်ရန်ကူညီနိုင်သည်။ ဒီ စကင်တူး ()) ကို recursive folder operations အတွက် function နဲ့အတူဆာဗာဘက်မှာ zip ဖိုင်တွေရဲ့ functioning function ကိုအလွယ်တကူအကောင်အထည်ဖော်နိုင်ပြီး directory structure ကိုထိန်းသိမ်းထားနိုင်ပါတယ်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်ချက်နှစ်ခုမှတစ်ဆင့်ထိုကဲ့သို့သော script များကိုမည်သို့တည်ဆောက်ရမည်ကိုအသေးစိတ်မိတ်ဆက်ပေးပါမည်။

1 ။ သဘာဝပတ်ဝန်းကျင်ပြင်ဆင်မှု

သင်၏ PHP ပတ် 0 န်းကျင်သည် zip extens ည့်သည် zip extensed ရှိကြောင်းသေချာပါစေ။ အကယ်. ၎င်းကို enable မလုပ်ပါက PHP.INI ဖိုင်ကိုတည်းဖြတ်နိုင်သည်, အောက်ပါ configuration line နှင့် uncomment ကိုရှာပါ။

 extension=zip

ထို့နောက်သင်၏ဝဘ်ဆာဗာကိုပြန်လည်စတင်ပါ။

2 ။ အခြေခံအတွေးအခေါ်များ

  1. zip ဖိုင်ကိုဖွင့်;

  2. zip တွင် 0 င်ခွင့်တစ်ခုစီမှတစ်ဆင့်ကြားခံ;

  3. entry တစ်ခုသည် directory သို့မဟုတ် file တစ်ခုရှိမရှိဆုံးဖြတ်ရန်,

  4. ထုံးစံလုပ်ဆောင်ချက်များနှင့်အတူ directory storcures ကိုအားဖွင့်ရန် Scandir () ကိုသုံးပါ။

  5. ဖိုင်များကို ZIP တွင် destination လမ်းကြောင်းသို့ရေးပါ။

3 ။ ကုဒ်အကောင်အထည်ဖော်မှု

 <?php

function createDirRecursive($path) {
    if (!is_dir($path)) {
        mkdir($path, 0777, true);
    }
}

function unzipWithStructure($zipFilePath, $destination) {
    $zip = zip_open($zipFilePath);

    if (is_resource($zip)) {
        while ($zip_entry = zip_read($zip)) {
            $entryName = zip_entry_name($zip_entry);
            $fullPath = $destination . '/' . $entryName;

            // ဒါကြောင့် directory လျှင်,ဖန်တီး
            if (substr($entryName, -1) === '/') {
                createDirRecursive($fullPath);
            } else {
                // ဖိုင်တည်ရှိရာလမ်းညွှန်ကိုသေချာစွာသေချာပါစေ
                $dirPath = dirname($fullPath);
                createDirRecursive($dirPath);

                if (zip_entry_open($zip, $zip_entry)) {
                    $fileContent = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
                    file_put_contents($fullPath, $fileContent);
                    zip_entry_close($zip_entry);
                }
            }
        }
        zip_close($zip);
    } else {
        echo "ဖွင့်လို့မရဘူးZIPစာချုပ်စာတမ်း: $zipFilePath";
    }
}

// အသုံးပြုမှုဥပမာ
$zipPath = '/var/www/html/uploads/sample.zip';
$extractTo = '/var/www/html/extracted';

// decompress ဖို့ function ကိုခေါ်ပါ
unzipWithStructure($zipPath, $extractTo);
?>

4 ။ လမ်းညွှန် traversal နှင့်စိစစ်အတည်ပြု

Target Directory ဖွဲ့စည်းပုံကိုမှန်ကန်စွာဖန်တီးကြောင်းထပ်မံစစ်ဆေးရန် စနဗူယာ () ကို သုံးပါ။ ဥပမာအားဖြင့်:

 function listAllFiles($dir) {
    $files = scandir($dir);
    foreach ($files as $file) {
        if ($file === '.' || $file === '..') continue;
        $path = $dir . '/' . $file;
        if (is_dir($path)) {
            echo "မာတိကာ: $path\n";
            listAllFiles($path);
        } else {
            echo "စာချုပ်စာတမ်း: $path\n";
        }
    }
}

listAllFiles('/var/www/html/extracted');

အထက်ပါကုဒ်ကိုကွပ်မျက်ပြီးနောက်သင်အလွယ်တကူ decompressed files များနှင့်ဖိုင်တွဲများကိုလွယ်ကူစွာ debugging နှင့် deter များကို output လုပ်နိုင်သည်။

5 ။ မှတ်စုဖို့အရာ

  • လမ်းစဉ်အားလုံးသည်ခွင့်ပြုချက်သို့မဟုတ်လမ်းကြောင်းပေါ်မှအမှားများကိုရှောင်ရှားရန်အကြွင်းမဲ့လမ်းကြောင်းများကိုအသုံးပြုသင့်သည်။

  • ထုတ်လုပ်မှုပတ်ဝန်းကျင်တွင် directory traversal တိုက်ခိုက်မှုများကိုကာကွယ်ရန် Zip ဖိုင်၏အရင်းအမြစ်ကိုဂရုပြုပါ (ဥပမာ Zip တွင်ပါ 0 င် သည်။

  • လမ်းကြောင်းကို realappath () နှင့်ပေါင်းစပ်။ ပုံမှန်နိုင်ပါတယ်။

  • အကယ်. ဖိုင်သည်ကြီးမားပါကမှတ်ဉာဏ်ပြည့်လျှံမှုကိုကာကွယ်ရန် streaming စာဖတ်ခြင်းကိုအသုံးပြုရန်အကြံပြုသည်။

6 ။ လျှောက်လွှာဇာတ်လမ်းတစ်ပုဒ်

ဤ script သည် compressed files များကို upload လုပ်ခြင်းနှင့်အလိုအလျောက်ခွဲခြားရန်သင့်တော်သည်။ ဥပမာအားဖြင့်အသုံးပြုသူသည် M66.net/upload ရှိသည့် M66.net/upload ပါ 0 င်သော zip ဖိုင်တစ်ခုကိုတင်ပါကနောက်ခံသည် M66.net/storage လမ်းညွှန်တွင်ပြည့်စုံသောဖွဲ့စည်းပုံကိုတိုက်ရိုက်ပြန်ယူနိုင်သည်။

ဤနည်းအားဖြင့် Content upload နှင့် File Institutionfload ၏လုပ်ငန်းစဉ်ကိုအလျင်အမြန်ပြုလုပ်နိုင်ပြီးဖွံ့ဖြိုးတိုးတက်မှုထိရောက်မှုကိုတိုးတက်စေနိုင်သည်။