PHP_READ () function ကိုအသုံးပြုသည့်အခါ Zip compressed files များကိုဖတ်ရန်အတွက်အထူးသဖြင့်ဖိုင်သည်အလွန်ကြီးမားသောအခါ developer များစွာသည်ပရိုဂရမ်ပျက်သွားခြင်း, ကြီးမားသောဖိုင်များပြုပြင်သည့်အခါ zip_read () function crash များသည် zip_read () function crash များသည်အဘယ်ကြောင့်ဖြစ်ပေါ်လာသောအကြောင်းပြချက်များကိုဤဆောင်းပါးတွင်အသေးစိတ်လေ့လာသုံးသပ်လိမ့်မည်။
မှတ်ဉာဏ်ကန့်သတ်ချက်
PHP ၏ပုံမှန်မှတ်ဉာဏ်ကန့်သတ်ချက်သည်များသောအားဖြင့်အနိမ့်ဆုံးဖြစ်ပြီးပုံမှန်အားဖြင့် 128MB သို့မဟုတ် 256MB ဖြစ်သည်။ ကြီးမားသောဖိုင်များပြုလုပ်သောအခါ zip_read () သည် ဖိုင်အချက်အလက်များကိုမှတ်ဉာဏ်ထဲသို့ထည့်သွင်းရန်လိုအပ်သည့်အခါမှတ်ဥာဏ်အသုံးပြုမှုတွင်သိသိသာသာတိုးလာသည်။ အဆိုပါအစီအစဉ်ကိုကန့်သတ်ကျော်လွန်ပြီးနောက်ပျက်ကျလိမ့်မည်။
Execution Time ကန့်သတ်ချက်
PHP scripts ၏မူလကွပ်မျက်မှုသည်စက္ကန့် 30 ဖြစ်သည်။ ကြီးမားသောဖိုင်များ၏စာဖတ်ခြင်းလုပ်ငန်းလည်ပတ်မှုသည်ဤအချိန်ထက်ကျော်လွန်သွားနိုင်သည်။
zip_read ၏ကန့်သတ်ချက်များ () သူ့ဟာသူ
Libzip စာကြည့်တိုက်ပေါ်တွင် အခြေခံ. Zip_Read () ကိုအကောင်အထည်ဖော်သည်။ ၎င်းသည်ရိုးရှင်းလွယ်ကူပြီးအသုံးပြုရလွယ်ကူသော်လည်းအထူးသဖြင့်ဖိုင်၏အတွင်းပိုင်းဖွဲ့စည်းပုံသည်ရှုပ်ထွေးသောသို့မဟုတ်ချုံ့မှုနှုန်းသည်မြင့်မားသည်။
Disk I / O Budlock <br> ဖိုင်ကြီးများကိုဖတ်ခြင်းသည် disk operations အမြောက်အများပါ 0 င်သည်။ အကယ်. disk စွမ်းဆောင်ရည်ကိုမလုံလောက်ပါကဖိုင်များကို network disk များပေါ်တွင်သိမ်းဆည်းထားပါက၎င်းတို့သည်ကွန်ယက် disk များပေါ်တွင်သိမ်းဆည်းထားလျှင်၎င်းသည်နောက်ကျခြင်းသို့မဟုတ်ပျက်ကျမှုဖြစ်စေနိုင်သည်။
ကြီးမားသောဖိုင်များပြုပြင်သည့်အခါ PHP operating environment environment configuration ကိုပထမ ဦး စွာချိန်ညှိပါ။
ini_set('memory_limit', '1024M'); // မှတ်ဉာဏ်ကန့်သတ်တိုးမြှင့်1GBသို့မဟုတ်ထိုထက်ပို
set_time_limit(0); // ကွပ်မျက်အချိန်ကန့်သတ်ချက်ဖျက်သိမ်းပါ,အချိန်ကုန်များကိုရှောင်ပါ
၎င်းသည် script သည်လုပ်ငန်းကိုဖြည့်ရန် script သည်အရင်းအမြစ်များအလုံအလောက်ရှိကြောင်းသေချာစေသည်။
ဖိုင်တစ်ခုလုံးကိုတစ်ချိန်တည်းတွင်မတင်ပါနှင့်။
နမူနာကုဒ်:
<?php
$zipPath = "http://m66.net/path/to/your/largefile.zip";
$zip = zip_open($zipPath);
if ($zip) {
while ($zipEntry = zip_read($zip)) {
$entryName = zip_entry_name($zipEntry);
if (zip_entry_open($zip, $zipEntry)) {
$size = zip_entry_filesize($zipEntry);
$contents = '';
while ($size > 0) {
$readSize = 1024 * 1024; // တစ်ခုချင်းစီကိုဖတ်ပါ1MB
$buffer = zip_entry_read($zipEntry, min($readSize, $size));
if ($buffer === false) break;
$contents .= $buffer;
$size -= strlen($buffer);
}
// ကိုင်တွယ်ဖြေရှင်းသည်$contents,ဥပမာအားဖြင့်ဖိုင်များကိုသိမ်းဆည်းပါ
zip_entry_close($zipEntry);
}
}
zip_close($zip);
} else {
echo "ဖွင့်လို့မရဘူးZIPစာချုပ်စာတမ်း";
}
?>
ဤသည်ကိုတစ်ပြိုင်နက်အလွန်အကျွံမှတ်ဉာဏ်စာဖတ်ခြင်းကိုရှောင်ရှားနိုင်ပါတယ်။
PHP ၏ built-in zip_read () function ကိုကန့်သတ်ထားသည်။
ဇက်စမျိုး
Ziparchive အတန်းသည်ပိုမိုပြည့်စုံပြီးထိရောက်သော zip file operty interface ကိုထောက်ပံ့ပေးသည်။ ကြီးမားသောဖိုင်များအတွက်ပိုမိုကောင်းမွန်သောအထောက်အပံ့များရှိသည်။
နမူနာကုဒ်:
<?php
$zipPath = "http://m66.net/path/to/your/largefile.zip";
$zip = new ZipArchive();
if ($zip->open($zipPath) === TRUE) {
for ($i = 0; $i < $zip->numFiles; $i++) {
$stat = $zip->statIndex($i);
$filename = $stat['name'];
$stream = $zip->getStream($filename);
if (!$stream) {
echo "无法ဖတ်စာချုပ်စာတမ်း: $filename\n";
continue;
}
while (!feof($stream)) {
$buffer = fread($stream, 1024 * 1024); // ဖတ်1MBအချက်များ
// ကိုင်တွယ်ဖြေရှင်းသည်$buffer
}
fclose($stream);
}
$zip->close();
} else {
echo "ဖွင့်လို့မရဘူးZIPစာချုပ်စာတမ်း";
}
?>
Ziparchive ကို အသုံးပြုခြင်းသည်မှတ်ဥာဏ်, စီးစာဖတ်ခြင်းကိုပိုမိုကောင်းမွန်စွာထိန်းချုပ်နိုင်ပြီးလိုက်လျောညီထွေဖြစ်အောင်ပြုလုပ်နိုင်သည်။
Zip ဖိုင်များ၏အရင်းအမြစ်ကိုသင်ထိန်းချုပ်နိုင်ပါကဖိုင်ကြီးများကိုမျိုးဆက်အဆင့်တွင်ဖိုင်ငယ်များစွာသို့ခွဲရန်သို့မဟုတ်လွယ်ကူစွာအသုတ်လုပ်ထုံးလုပ်နည်းများအတွက်ချုံ့ထားသောအထုပ်များတွင်သိမ်းဆည်းရန်အကြံပြုသည်။
ဆာဗာ၏ disk I / O စွမ်းဆောင်ရည်သည်ကောင်းမွန်သောဖိုင်များကိုဖတ်ရှုသောအခါကောင်းမွန်ပြီးပိတ်ဆို့မှုများကိုရှောင်ကြဉ်ကြောင်းသေချာပါစေ။ ထို့အပြင် operating system's file cachegy ကိုချိန်ညှိခြင်းကလည်းစာဖတ်ခြင်း၏စွမ်းဆောင်ရည်ကိုတိုးတက်စေနိုင်သည်။
Zip_read () ကြီးမားသောဖိုင်များကိုကိုင်တွယ်ရာတွင်ပျက်ကျသည့်အခါပထမအဆင့်မှာ PHP ၏မှတ်ဉာဏ်နှင့် Execute Time Configuration ကိုစစ်ဆေးရန်ဖြစ်သည်။
ဖိုင်တစ်ခုလုံးကိုတစ်ပြိုင်တည်းဖတ်ရှုခြင်းကိုရှောင်ရှားရန် streaming စာဖတ်ခြင်းကိုအသုံးပြုရန်ကြိုးစားပါ။
ပိုမိုထိရောက်ပြီးတည်ငြိမ်သော Zip_Read အစား Ziparchive ကို သုံးရန်အကြံပြုသည်။
အချိန်တစ်ခုတည်းတွင်ပြုလုပ်သောဒေတာပမာဏကိုလျှော့ချရန်ချုံ့ထားသောဖိုင်ဖွဲ့စည်းပုံကို Preprocess ။
I / O စွမ်းဆောင်ရည်ကိုသေချာစေရန်ဆာဗာပတ်ဝန်းကျင်ကိုအကောင်းဆုံးလုပ်ပါ။
အထက်ဖော်ပြပါနည်းလမ်းများသည်ကြီးမားသောဖိုင်များ zip ကိုပြုပြင်ပြီးအစီအစဉ်၏တည်ငြိမ်မှုနှင့်ထိရောက်မှုကိုတိုးတက်စေရန်ပျက်ကျမှုအန္တရာယ်ကိုသိသိသာသာလျှော့ချနိုင်သည်။