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

ဖိုင်များကို upload လုပ်သည့်အခါ array_chunk ဖြင့် upload လုပ်ထားသောဖိုင်များကိုမည်သို့ခွဲထုတ်ရမည်နည်း

M66 2025-04-27

မျက်မှောက်ခေတ်ဝက်ဘ်ဆိုက်ဖွံ့ဖြိုးတိုးတက်မှုတွင်ဖိုင်တင်ခြင်းသည်အထူးသဖြင့်အပ်လုဗင်ထုတ်လုပ်မှုလုပ်ငန်းစဉ်အတွင်းအချိန်ကုန်များစသည့်စိန်ခေါ်မှုများစွာနှင့်မကြာခဏရင်ဆိုင်နေရသောစိန်ခေါ်မှုများစွာနှင့်ရင်ဆိုင်နေရသောကြီးမားသောဖိုင်များနှင့်ရင်ဆိုင်ရသောအခါအထူးလိုအပ်ချက်တစ်ခုဖြစ်သည်။ PHP သည် developer များဤပြ problems နာများကိုဖြေရှင်းရန်အတွက်ကိရိယာများစွာပေးသည်။ Array_chunk function သည်ကြီးမားသောဖိုင်များကိုသေးငယ်သောဖိုင်များခွဲရန်အသုံးပြုနိုင်ပြီး upload လုပ်ငန်းစဉ်ကိုပိုမိုကောင်းမွန်စေရန်နှင့်ကြီးမားသောဖိုင်များကိုတစ်ချိန်ကတင်ခြင်းကြောင့်ဖြစ်ပေါ်လာသောပြ problems နာအမျိုးမျိုးကိုရှောင်ရှားနိုင်သည်။

ဤဆောင်းပါးသည် array_chunk function ကို အသုံးပြု. ကြီးမားသောဖိုင်များကိုမည်သို့ထိထိရောက်ရောက်ခွဲခြားပြီး upload process ကိုပိုမိုကောင်းမွန်စေရန်ပြသရန်နမူနာကုဒ်ကိုအသုံးပြုလိမ့်မည်။

1 ။ Array_chunk function ကဘာလဲ။

Array_chunk သည် PHP တွင် function တစ်ခုဖြစ်ပြီး stray တစ်ခုဖြစ်သော strays ကိုသေးငယ်သည့် array များသို့ခွဲထားသည်။ သေးငယ်တဲ့ခင်းကျင်းမှုတစ်ခုစီ၏အရွယ်အစားကိုသတ်မှတ်ထားသော parameters တွေကိုကဆုံးဖြတ်သည်။ ဤလုပ်ဆောင်မှုသည်များသောအားဖြင့်ကြီးမားသောအပိုင်းအစများအဖြစ်ခွဲထားရန်လိုအပ်သည့်အခြေအနေများတွင်အသုံးပြုသည်။

2 ။ File Upload တွင်စိန်ခေါ်မှုများ

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

  • တင်ရန်အချိန်ကုန် ။ ကြီးမားသောဖိုင်များကိုတင်ခြင်းသည်အချိန်များစွာကြာနိုင်သည်။ အကယ်. ဆာဗာသည်အချိန်ကန့်သတ်ချက်ကိုတင်ပါက,

  • မှတ်ဉာဏ်ကန့်သတ်ချက်များ

  • Network မတည်ငြိမ်မှု - တင်စဉ်အတွင်းကွန်ယက်ချိတ်ဆက်မှုပြတ်တောက်မှုသည်ပျက်ကွက်မှုဖြစ်စေနိုင်သည်။

3 ။ ဖိုင်များခွဲရန် array_chunk ကို သုံးပါ

မှတ်ဥာဏ်သုံးစွဲမှုကိုဖယ်ရှားရန်နှင့်ကြီးမားသောဖိုင်များကိုတစ်ချိန်တည်းတင်ခြင်းကြောင့်အချိန်ကုန်စေသောပြ problems နာများကိုတင်ရန်အတွက်ဖိုင်ကိုတင်ရန်အသေးအဖွဲအပိုင်းအစများသို့ခွဲရန် array_chunk function ကိုသုံးနိုင်သည်။ ၎င်းသည်ပိတ်ပင်တားဆီးမှုငယ်တစ်ခုစီကိုအသုတ်တွင်တင်ရန်ခွင့်ပြုထားပြီး upload လုပ်ငန်းစဉ်တည်ငြိမ်မှုကိုတိုးတက်စေပြီးဆာဗာ၏မှတ်ဉာဏ်ဖိအားကိုလျှော့ချရန်ခွင့်ပြုသည်။

အဆင့်

  1. တင်ထားသောဖိုင်ကိုဖတ်ပါ။

  2. ဖိုင်အကြောင်းအရာကိုသေးငယ်သောအပိုင်းပိုင်းခွဲပါ။

  3. အပိုင်းအစတစ်ခုစီကိုတစ်ခုဖြင့်တင်ပါ။

  4. သေးငယ်တဲ့အပိုင်းအစတစ်ခုတင်ပြီးနောက် client ကိုနှင့်ဆာဗာသည်လိုအပ်သောအတည်ပြုချက်အချက်အလက်များကိုဖလှယ်နိုင်သည်။

4 ။ နမူနာကုဒ်

ကျွန်ုပ်တို့တွင်တင်ရန်လိုအပ်သည့်ဖိုင်ကြီးတစ်ခုရှိသည်ဆိုပါစို့။ PHP code မှတဆင့်ဖိုင်ငယ်များကိုအပိုင်းပိုင်း ခွဲ. server တစ်ခုစီကို server တစ်ခုစီသို့တင်နိုင်သည်ဆိုပါစို့။ ဒီနေရာမှာအခြေခံကုဒ်ဥပမာတစ်ခုပါ။

 <?php
// ဖိုင်ပြုပြင်ခြင်းကုဒ်တင်ပါ
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
    $fileTmpPath = $_FILES['file']['tmp_name'];
    $chunkSize = 1024 * 1024; // တစ်ခုချင်းစီကိုအပိုင်းအစ၏အရွယ်အစား,1MB

    // ဖိုင်အကြောင်းအရာကိုဖတ်ပါ
    $fileContent = file_get_contents($fileTmpPath);
    $fileChunks = array_chunk(str_split($fileContent, $chunkSize), $chunkSize);

    // တစ်ခုချင်းစီကိုအပိုင်းအစတစ်ခုစီတင်ပါ
    foreach ($fileChunks as $index => $chunk) {
        $uploadUrl = 'http://m66.net/upload_chunk.php'; // ပစ်မှတ်တင်ပါ URL
        $postData = [
            'chunk' => base64_encode(implode('', $chunk)), // ဖိုင်၏သေးငယ်တဲ့အပိုင်းပိုင်းကို encode လုပ်ပြီး upload လုပ်ပါ
            'index' => $index,
            'totalChunks' => count($fileChunks),
        ];

        // အသုံးပြု cURL တစ်ခုချင်းစီကိုအတုံး upload
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $uploadUrl);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);

        if (curl_errno($ch)) {
            echo 'Error:' . curl_error($ch);
        }

        curl_close($ch);
    }

    echo 'အောင်မြင်စွာဖိုင်တင်ပါ!';
}
?>

<!-- ပုံစံတင်ခြင်း -->
<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">ဖိုင်တင်ပါ</button>
</form>

5 ။ ကုဒ်ဖော်ပြချက်

  • ဖိုင်ဖတ်ခြင်းနှင့်ခွဲခြင်း - ဖိုင်အမျိုးအစားများဖြင့်တင်ထားသောဖိုင်အိတ်ကိုဖတ်ပါ။ ထို့နောက် file_get_contentents မှတဆင့်တင်ထားသောဖိုင်အကြောင်းအရာကိုဖတ်ပါ

  • ဒေတာ encoding : ဖိုင်အိတ်အကြောင်းအရာကို HTTP ပို့စ်မှတစ်ဆင့်လုံခြုံစွာတင်ပို့နိုင်ရန်အတွက်ဒေတာ base64_encode () တစ်ခုစီကိုကျွန်ုပ်တို့ encode လုပ်ပါ။

  • တင်ရန်တောင်းဆိုချက် - POST တောင်းဆိုမှုကိုပို့ရန်နှင့်ဆာဗာသို့ဖိုင်တစ်ခုစီကိုတင်ရန် curl ကို သုံးပါ။ $ Uploadurl ရှိ URL ကို http://m66.net/upload_chunk.php ဖြင့်အစားထိုးထားသော server-side script ကိုအသုံးပြုသည်။

6 ။ server-side အပြောင်းအလဲနဲ့

ဆာဗာဘေးထွက် Upload_chunk.php code သည် file တစ်ခုချင်းစီကိုရိုက်ကူးပြီး၎င်းတို့ကိုပြည့်စုံသောဖိုင်တစ်ခုထဲသို့ထည့်သွင်းသင့်သည်။ ဤတွင်ရိုးရှင်းသောပေါင်းစည်းကုဒ်ဥပမာတစ်ခုရှိသည်။

 <?php
// တင်ထားသောဖိုင်လုပ်ကွက်များကိုလက်ခံရရှိသည်
if (isset($_POST['chunk']) && isset($_POST['index']) && isset($_POST['totalChunks'])) {
    $chunkData = base64_decode($_POST['chunk']);
    $index = $_POST['index'];
    $totalChunks = $_POST['totalChunks'];

    // ဖိုင်များကိုသိမ်းဆည်းရန်ယာယီလမ်းညွှန်
    $uploadDir = 'uploads/';
    $filePath = $uploadDir . 'uploaded_file.tmp';

    // ဖိုင်လုပ်ကွက်ဖြည့်ပါ
    file_put_contents($filePath, $chunkData, FILE_APPEND);

    // အားလုံးလုပ်ကွက် uploaded နေကြသည်ဆိုပါက,ယာယီဖိုင်များကိုနောက်ဆုံးဖိုင်များမှအမည်ပြောင်းနိုင်သည်
    if ($index == $totalChunks - 1) {
        rename($filePath, $uploadDir . 'final_uploaded_file.ext');
        echo 'ဖိုင်တင်ခြင်းပြီးစီးခဲ့သည်!';
    }
}
?>

7 ။ အကျဉ်းချုပ်

array_chunk function ကိုပေါင်းစပ်ခြင်းနှင့်တင်ထားသော chunking ၏မဟာဗျူဟာကိုပေါင်းစပ်ခြင်းအားဖြင့်ကြီးမားသောဖိုင်များတင်ခြင်းကိုထိရောက်စွာကိုင်တွယ်နိုင်သည်။ ဤနည်းလမ်းသည်ဖိုင်တင်ခြင်းတည်ငြိမ်မှုကိုတိုးတက်စေရုံသာမကကွန်ရက်မတည်ငြိမ်သောအခါ upload process ကိုဆက်လက်ထိန်းသိမ်းရန်သေချာစေသည်။ ထို့အပြင်ပိတ်ဆို့မှုတင်ခြင်းကို အသုံးပြု. အသုံးပြုသူများသည် upload လုပ်ငန်းစဉ်အတွင်းမည်သည့်အချိန်တွင်မဆို upload များကိုခေတ္တရပ်တန့်ပြီးပြန်လည်စတင်နိုင်သည်။