လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Zip_read () ကိုသုံးသောအခါနောက်လာမည့်ဖိုင်ကိုအဘယ်ကြောင့်မဖတ်နိုင်သနည်း။ ဘာမှားသွားတာလဲ

Zip_read () ကိုသုံးသောအခါနောက်လာမည့်ဖိုင်ကိုအဘယ်ကြောင့်မဖတ်နိုင်သနည်း။ ဘာမှားသွားတာလဲ

M66 2025-06-23

Zip compressed files များကို manipulate လုပ်ရန် PHP ကိုအသုံးပြုသောအခါ zip_read () သည် compressed package တွင်နောက်ဖိုင်ကိုဖတ်ရန်ဘုံလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ သို့သော်အချို့ developer တချို့ကအမှန်တကယ်လည်ပတ်မှုတွင် zip_read () သည် အမြဲတမ်း မှားယွင်းစွာ ပြန်ယူပြီးနောက်ဖိုင်ကိုမှန်ကန်စွာဖတ်ရန်ပျက်ကွက်ခြင်းအားဖြင့်တကယ့်ကိုအစဉ်အမြဲပြန်လည်ရရှိခဲ့သည်။ ဤပြ problem နာသည်ရှုထောင့်များစွာမှလာနိုင်သည်, ၎င်းကိုတစ် ဦး ချင်းစီခွဲခြမ်းစိတ်ဖြာကြပါစို့။

1 ။ ဖွင့်ရန်မှန်ကန်သောနည်းလမ်း

ပထမ ဦး စွာသင်သည် zip ဖိုင်ကိုမှန်ကန်သောနည်းလမ်းကိုဖွင့်ရန်သေချာအောင်ပြုလုပ်ရမည်။ စံစာဖတ်ခြင်းလုပ်ငန်းစဉ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

 $zip = zip_open("archive.zip");

if (is_resource($zip)) {
    while ($zip_entry = zip_read($zip)) {
        echo "Name: " . zip_entry_name($zip_entry) . "\n";
    }
    zip_close($zip);
}

ဤနေရာတွင်ဤနေရာတွင် Zip_read ($ zip) သို့ခေါ်ဆိုမှုသည် Zip_open () သည် အရင်းအမြစ်ကိုပြန်လည်ရောက်ရှိပြီးနောက်ကွပ်မျက်ခံရရမည်။

2 ။ zip_entry_open ၏အမှားအယွင်းများကိုသုံးပါ။

developer များစွာသည် Zip_Entry_open () သည် လက်ရှိ 0 င်ရောက်မှုကိုဖွင့်ရန် Zip_entry_open () ဟုခေါ်ပြီးစာဖတ်ပြီးနောက် PHP သည် cursor ကိုအလိုအလျောက်လုပ်ဆောင်နိုင်ပြီးနောက်ဖိုင်ကိုအလိုအလျောက်လုပ်ဆောင်လိမ့်မည်။

တကယ်တော့ဒါကဒီလိုမဟုတ်ဘူး။ အလွန်များသောအားဖြင့်အမှားတစ်ခုမှာ

 while ($entry = zip_read($zip)) {
    if (zip_entry_open($zip, $entry, "r")) {
        $data = zip_entry_read($entry);
        zip_entry_close($entry);
    }
}

အကယ်. သင်သည်ဒေတာ၏အစိတ်အပိုင်းတစ်ခုကိုသာဖတ်ပါကသို့မဟုတ်ဖတ်ရန်ပျက်ကွက်ပါကနောက်တစ်ကြိမ် Zip_read () ဟုသင်ခေါ်ဆိုသည့်အခါ, ဖိုင်၏အဆုံးကိုဖတ်ရန်သေချာပါစေသို့မဟုတ်နောက်တစ်ခုကိုဆက်မလုပ်မီ entry ကိုမှန်ကန်စွာပိတ်ပါ။

3 ။ zip ဖိုင်နှင့်အတူပြနာများ

ပြ the နာသည် Zip file တွင်တည်ရှိသည်။ အချို့သော zip ဖိုင်များကိုပုံမှန်ဖွင့်လှစ်နိုင်သော်လည်းအချို့သော entries နာအချို့ကိုအကျင့်ပျက်ပြားခြင်းသို့မဟုတ်မမှန်သောအဆောက်အအုံများရှိနိုင်သည်။ ဥပမာအားဖြင့်:

  • ဖိုင်နာမည်တွင်အထူးအက္ခရာများပါရှိသည်

  • entry header သတင်းအချက်အလက်အကျင့်ပျက်ခြစားမှုဖြစ်ပါတယ်

  • အသစ်သောချုံ့ algorithms ကိုအသုံးပြုသည်။ PHP ၏ Zip Extension သည်မပံ့ပိုးပါ

Zip file ၏သမာဓိကိုကြည့်ရှုရန် Zipinfo သို့မဟုတ်အခြားကိရိယာများကိုအသုံးပြုရန်အကြံပြုသည်။ စစ်ဆေးရန် command line ကိုလည်းသုံးနိုင်သည်။

 unzip -t archive.zip

ဤ command သည် entry တစ်ခုစီအတွက်စမ်းသပ်မှုရလဒ်များကိုဖော်ပြထားသည်။

4 ။ ဗားရှင်းသဟဇာတကိစ္စရပ်များ

Zip_read () သည် Zip extension (ယခင် libzip ဗားရှင်း) နှင့်သက်ဆိုင်သည်။ အကယ်. သင်သည် PHP 7.4 သို့မဟုတ်နောက်ပိုင်းတွင်အသုံးပြုနေပါက ZIP API ဟောင်းကိုကန့်ကွက်နိုင်သည်။ ယင်းအစား Ziparchive class ကိုအသုံးပြုရန်အတွက်၎င်းကိုပိုမိုတည်ငြိမ်။ ခေတ်သစ် interface ကိုထောက်ပံ့ပေးရန်အကြံပြုသည်။

 $zip = new ZipArchive;
if ($zip->open('archive.zip') === TRUE) {
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $entry = $zip->getNameIndex($i);
        echo "Entry: $entry\n";
    }
    $zip->close();
}

Zip_read () နှင့်နှိုင်းယှဉ်ပါက Ziparchive နှင့်နှိုင်းယှဉ်လျှင် ziparchive သည် အမှားအယွင်းများကိုဖြေရှင်းရန်ပိုမိုလွယ်ကူပြီးလျှို့ဝှက်ချက်များကိုကာကွယ်ခြင်း,

5 ။ ဥပမာ - ဖိုင်များအားလုံးကိုသတ်မှတ်ထားသောဒိုမိန်းအမည်လင့်ခ်ကိုဖတ်ပါ

အကယ်. သင်သည် Zip ဖိုင်တစ်ခုစီကို Entry တစ်ခုစီကိုထုတ်ယူလိုပါက domain name ( M66.net ကဲ့သို့သော) နှင့်ချိတ်ဆက်ထားသောလမ်းကြောင်းကိုထုတ်လုပ်လိုပါကသင်လုပ်နိုင်သည်။

 $zip = zip_open("archive.zip");

if (is_resource($zip)) {
    while ($entry = zip_read($zip)) {
        $name = zip_entry_name($entry);
        echo "<a href='https://m66.net/files/" . urlencode($name) . "'>$name</a><br>";
    }
    zip_close($zip);
}

ကျေးဇူးပြု. သတိပြုပါ။ ကျွန်ုပ်တို့သည် link ကိုထုတ်လုပ်ပြီးဖိုင်ကိုဖြည်မနေကြောင်းသတိပြုပါ။ https://m66.net/files/xxx ကို ရယူရန်သင်သည် Zip ရှိအကြောင်းအရာများကိုဆာဗာပေါ်ရှိလမ်းညွှန်ရန်ညွှန်ကြားထားသည်။

နိဂုံးချုပ်အားဖြင့်

Zip_read () ကို အသုံးပြုသည့်အခါနောက်လာမည့်ဖိုင် entry ကိုသင်မဖတ်နိုင်ပါက -

  • entry တစ်ခုစီကိုမှန်ကန်စွာဖတ်ပြီးပိတ်ထားကြောင်းစစ်ဆေးပါ။

  • PHP မှမထောက်ပံ့သော zip file ကိုအဂတိလိုက်စားမှုသို့မဟုတ်အင်္ဂါရပ်များမဟုတ်ကြောင်းအတည်ပြုပါ။

  • Zip function အဟောင်းကို Ziparchive နှင့်အစားထိုးရန်ကြိုးစားပါ။

  • အထူးသဖြင့်ကွင်းဆက်များကိုပြုပြင်သည့်အခါ,

zip_read () ရိုးရှင်းသောပုံရသည်, ၎င်းသည်အမှန်တကယ်အမှားများကိုအမှန်တကယ်ကျရောက်စေနိုင်သည်။ ၎င်း၏အခြေခံမူများနှင့်အခြားရွေးချယ်စရာများကိုနားလည်ခြင်းအားဖြင့်သာသင်သည်မှီဝဲခြင်းကိုရှောင်ရှားနိုင်ပြီးသင်၏ zip file processing logic ကိုပိုမိုခိုင်မာစေနိုင်သည်။