PHP တွင် Zip compressed files များပြုလုပ်သောအခါ zip_read () function သည် compressed package တစ်ခုရှိအကြောင်းအရာများကိုဖတ်ရန်ကူညီနိုင်သည်။ ဒီ စကင်တူး ()) ကို recursive folder operations အတွက် function နဲ့အတူဆာဗာဘက်မှာ zip ဖိုင်တွေရဲ့ functioning function ကိုအလွယ်တကူအကောင်အထည်ဖော်နိုင်ပြီး directory structure ကိုထိန်းသိမ်းထားနိုင်ပါတယ်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်ချက်နှစ်ခုမှတစ်ဆင့်ထိုကဲ့သို့သော script များကိုမည်သို့တည်ဆောက်ရမည်ကိုအသေးစိတ်မိတ်ဆက်ပေးပါမည်။
သင်၏ PHP ပတ် 0 န်းကျင်သည် zip extens ည့်သည် zip extensed ရှိကြောင်းသေချာပါစေ။ အကယ်. ၎င်းကို enable မလုပ်ပါက PHP.INI ဖိုင်ကိုတည်းဖြတ်နိုင်သည်, အောက်ပါ configuration line နှင့် uncomment ကိုရှာပါ။
extension=zip
ထို့နောက်သင်၏ဝဘ်ဆာဗာကိုပြန်လည်စတင်ပါ။
zip ဖိုင်ကိုဖွင့်;
zip တွင် 0 င်ခွင့်တစ်ခုစီမှတစ်ဆင့်ကြားခံ;
entry တစ်ခုသည် directory သို့မဟုတ် file တစ်ခုရှိမရှိဆုံးဖြတ်ရန်,
ထုံးစံလုပ်ဆောင်ချက်များနှင့်အတူ directory storcures ကိုအားဖွင့်ရန် Scandir () ကိုသုံးပါ။
ဖိုင်များကို ZIP တွင် destination လမ်းကြောင်းသို့ရေးပါ။
<?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);
?>
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 လုပ်နိုင်သည်။
လမ်းစဉ်အားလုံးသည်ခွင့်ပြုချက်သို့မဟုတ်လမ်းကြောင်းပေါ်မှအမှားများကိုရှောင်ရှားရန်အကြွင်းမဲ့လမ်းကြောင်းများကိုအသုံးပြုသင့်သည်။
ထုတ်လုပ်မှုပတ်ဝန်းကျင်တွင် directory traversal တိုက်ခိုက်မှုများကိုကာကွယ်ရန် Zip ဖိုင်၏အရင်းအမြစ်ကိုဂရုပြုပါ (ဥပမာ Zip တွင်ပါ 0 င် သည်။
လမ်းကြောင်းကို realappath () နှင့်ပေါင်းစပ်။ ပုံမှန်နိုင်ပါတယ်။
အကယ်. ဖိုင်သည်ကြီးမားပါကမှတ်ဉာဏ်ပြည့်လျှံမှုကိုကာကွယ်ရန် streaming စာဖတ်ခြင်းကိုအသုံးပြုရန်အကြံပြုသည်။
ဤ script သည် compressed files များကို upload လုပ်ခြင်းနှင့်အလိုအလျောက်ခွဲခြားရန်သင့်တော်သည်။ ဥပမာအားဖြင့်အသုံးပြုသူသည် M66.net/upload ရှိသည့် M66.net/upload ပါ 0 င်သော zip ဖိုင်တစ်ခုကိုတင်ပါကနောက်ခံသည် M66.net/storage လမ်းညွှန်တွင်ပြည့်စုံသောဖွဲ့စည်းပုံကိုတိုက်ရိုက်ပြန်ယူနိုင်သည်။
ဤနည်းအားဖြင့် Content upload နှင့် File Institutionfload ၏လုပ်ငန်းစဉ်ကိုအလျင်အမြန်ပြုလုပ်နိုင်ပြီးဖွံ့ဖြိုးတိုးတက်မှုထိရောက်မှုကိုတိုးတက်စေနိုင်သည်။