လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> GetFile function ကိုဖိုင်တင်ခြင်းကိုကိုင်တွယ်နိုင်ပါသလား။ ၎င်းသည် upload လုပ်ငန်းစဉ်တွင်မည်သို့အလုပ်လုပ်သည်ကိုကြည့်ပါ

GetFile function ကိုဖိုင်တင်ခြင်းကိုကိုင်တွယ်နိုင်ပါသလား။ ၎င်းသည် upload လုပ်ငန်းစဉ်တွင်မည်သို့အလုပ်လုပ်သည်ကိုကြည့်ပါ

gitbox 2025-06-15

GetFile function ကိုဖိုင်တင်ခြင်းကိုကိုင်တွယ်နိုင်ပါသလား။ ၎င်းသည် upload လုပ်ငန်းစဉ်တွင်မည်သို့အလုပ်လုပ်သည်ကိုကြည့်ပါ

PHP တွင်ဖိုင်တင်ခြင်းကိုကိုင်တွယ်ခြင်းသည်ဘုံလုပ်ငန်းဖြစ်သည်။ developer များစွာအတွက်ဖိုင်တင်ခြင်းသည်ပုံမှန်အားဖြင့် 0 ဘ်ဆိုဒ်သို့မဟုတ်လျှောက်လွှာတစ်ခု၏အစိတ်အပိုင်းတစ်ခုဖြစ်ပြီးဖြစ်သည်။ ပုံမှန်အားဖြင့်ဖိုင်တစ်ခု၏ uploading သည် HTML ပုံစံများ, PHP ၏ $ _files hyperglobal array နှင့်အချို့သောနောက်ထပ်ယုတ္တိကုဒ်များပါဝင်သည်။ သို့သော်ဤလုပ်ငန်းစဉ်ကိုရိုးရှင်းအောင်လုပ်ခြင်းသို့မဟုတ်ကုဒ်၏ပြန်လည်သုံးသပ်ခြင်းနှင့်ထိန်းသိမ်းခြင်းတို့ကိုမြှင့်တင်ရန်, developer များက uploads ကိုင်တွယ်ရန်အချို့သောလုပ်ဆောင်ချက်များကိုရေးနိုင်သည်။ ယနေ့တွင်ကျွန်ုပ်တို့သည်ဖိုင် တင်ခြင်းကို ကိုင်တွယ်နိုင်သည့်ဖိုင်တင်ခြင်းသို့မဟုတ်တင်ခြင်းလုပ်ငန်းစဉ်တွင်၎င်း၏အခန်းကဏ် function ကိုကိုင်တွယ်နိုင်သည်။

GetFile function ကဘာလဲ။

ပထမ ဦး စွာ GetFile သည် PHP တွင် built-in function မဟုတ်ပါ, သို့သော် developer များမှစိတ်ကြိုက်လုပ်ဆောင်သည့် function name တစ်ခုဖြစ်နိုင်သည်။ ယေဘုယျအားဖြင့်ပြောရလျှင် function သည်ဖိုင်များကို တင်. ဖိုင်များကို တင်. တင်ထားသောစစ်ဆင်ရေးများကိုလုပ်ဆောင်ရန်နှင့်သက်ဆိုင်သောသတင်းအချက်အလက်များကိုရယူရန်ဖြစ်သည်။ ၎င်းကိုပိုမိုနားလည်ရန်ကျွန်ုပ်တို့သည် GetFile function ၏ဖွဲ့စည်းပုံကိုမြင်ယောင်ကြည့်နိုင်သည်။

ကျွန်ုပ်တို့တွင်အောက်ပါကုဒ်ရှိသည်ဆိုပါစို့။

 function getFile($inputName, $targetDir) {
    if (isset($_FILES[$inputName]) && $_FILES[$inputName]['error'] === UPLOAD_ERR_OK) {
        $fileTmpPath = $_FILES[$inputName]['tmp_name'];
        $fileName = $_FILES[$inputName]['name'];
        $fileSize = $_FILES[$inputName]['size'];
        $fileType = $_FILES[$inputName]['type'];
        
        // ပစ်မှတ်ဖိုင်လမ်းကြောင်းကိုထုတ်လုပ်ပါ
        $targetFilePath = $targetDir . DIRECTORY_SEPARATOR . $fileName;
        
        // Target Folder သို့ယာယီဖိုင်များကိုရွှေ့ပါ
        if (move_uploaded_file($fileTmpPath, $targetFilePath)) {
            return [
                'status' => 'success',
                'file_path' => $targetFilePath
            ];
        } else {
            return [
                'status' => 'error',
                'message' => 'ဖိုင်တင်ခြင်းမအောင်မြင်ပါ'
            ];
        }
    } else {
        return [
            'status' => 'error',
            'message' => 'upload စဉ်အတွင်းမည်သည့်ဖိုင်ကိုရွေးချယ်ခြင်းသို့မဟုတ်အမှားတစ်ခုဖြစ်ပွားခဲ့သည်'
        ];
    }
}

ဤကုဒ်တွင် Getfile function ၏လုပ်ဆောင်ချက်မှာ -

  1. upload ဖိုင်တည်ရှိခြင်းရှိမရှိစစ်ဆေးပါ။ upload လုပ်ငန်းစဉ်အတွင်းအမှားများမရှိပါ။

  2. ဖိုင်၏ယာယီလမ်းကြောင်း, အမည်, အရွယ်အစားနှင့်အမျိုးအစားကိုရရှိသည်။

  3. ပစ်မှတ်ဖိုင်လမ်းကြောင်းကိုထုတ်လုပ်ပါ။

  4. ယာယီဖိုင်ကို destination folder ထဲသို့ရွှေ့။ upload ရလဒ်ကိုပြန်ပို့ပါ။

File Upload တွင် GetFile ၏အံ့သွဖွယ်အသုံးပြုခြင်း

အထက်ဖော်ပြပါကုဒ်များမှ GetFile function သည်ဖိုင်တင်ခြင်းလုပ်ငန်းစဉ်ကိုရိုးရှင်းစေပြီးရှုပ်ထွေးသောစစ်ဆေးခြင်းနှင့်ပြုပြင်ခြင်းများအားလုံးကို encapsulate လုပ်နိုင်သည်ကိုကျွန်ုပ်တို့တွေ့နိုင်သည်။ ဤလုပ်ဆောင်မှုကိုအသုံးပြုသောအခါ developer သည်တူညီသောစစ်ဆေးမှုကိုထပ်ခါတလဲလဲစစ်ဆေး။ ယုတ္တိဗေဒကိုထပ်ခါတလဲလဲလုပ်ခြင်းမရှိဘဲဖိုင်နယ်ပယ်နှင့် destination directory လမ်းကြောင်း၏အမည်ကိုသာပေးရန်လိုအပ်သည်။

1 ။ ဖိုင်အမျိုးအစားနှင့်အရွယ်အစားကိုစစ်ဆေးပါ

ဖိုင်တင်ခြင်းတွင်အသုံးအများဆုံးလိုအပ်ချက်များအနက်မှတစ်ခုမှာဖိုင်အမျိုးအစားများနှင့်အရွယ်အစားများကိုကန့်သတ်ရန်ဖြစ်သည်။ တင်ထားသောဖိုင်များသည်လိုအပ်ချက်များနှင့်ကိုက်ညီစေရန်သေချာစေရန်ဤကန့်သတ်ချက်များကိုစစ်ဆေးရန် GetFile function များကိုစစ်ဆေးရန် GetFile function အတွင်းရှိနောက်ထပ်ယုတ္တိဗေဒကိုထည့်သွင်းနိုင်သည်။ ဥပမာအားဖြင့်ဖိုင်အမျိုးအစားသည်ခွင့်ပြုထားသော MIME အမျိုးအစားသို့မဟုတ်ဖိုင်အရွယ်အစားသည်အမြင့်ဆုံးကန့်သတ်ချက်အတွင်းတွင်ရှိ, မရှိကိုစစ်ဆေးနိုင်သည်။

 function getFile($inputName, $targetDir, $allowedTypes = [], $maxSize = 5000000) {
    if (isset($_FILES[$inputName]) && $_FILES[$inputName]['error'] === UPLOAD_ERR_OK) {
        $fileTmpPath = $_FILES[$inputName]['tmp_name'];
        $fileName = $_FILES[$inputName]['name'];
        $fileSize = $_FILES[$inputName]['size'];
        $fileType = $_FILES[$inputName]['type'];
        
        // ဖိုင်အမျိုးအစားကိုစစ်ဆေးပါ
        if (!empty($allowedTypes) && !in_array($fileType, $allowedTypes)) {
            return [
                'status' => 'error',
                'message' => 'မထောက်ခံဖိုင်အမျိုးအစားများ'
            ];
        }

        // ဖိုင်အရွယ်အစားကိုစစ်ဆေးပါ
        if ($fileSize > $maxSize) {
            return [
                'status' => 'error',
                'message' => 'ဖိုင်ကြီးကြီး'
            ];
        }
        
        // ပစ်မှတ်ဖိုင်လမ်းကြောင်းကိုထုတ်လုပ်ပါ
        $targetFilePath = $targetDir . DIRECTORY_SEPARATOR . $fileName;
        
        // Target Folder သို့ယာယီဖိုင်များကိုရွှေ့ပါ
        if (move_uploaded_file($fileTmpPath, $targetFilePath)) {
            return [
                'status' => 'success',
                'file_path' => $targetFilePath
            ];
        } else {
            return [
                'status' => 'error',
                'message' => 'ဖိုင်တင်ခြင်းမအောင်မြင်ပါ'
            ];
        }
    } else {
        return [
            'status' => 'error',
            'message' => 'upload စဉ်အတွင်းမည်သည့်ဖိုင်ကိုရွေးချယ်ခြင်းသို့မဟုတ်အမှားတစ်ခုဖြစ်ပွားခဲ့သည်'
        ];
    }
}

ထိုကဲ့သို့သောတိုးတက်မှုများဖြင့် GetFile function သည်ဖိုင်တင်ခြင်း၏အခြေခံစစ်ဆင်ရေးအတွက်တာ 0 န်မရှိပါ။ သို့သော်မမှန်ကန်တဲ့သို့မဟုတ်အလွန်အကျွံဖိုင်တင်ခြင်းကိုရှောင်ရှားရန်မတင်မီဖိုင်အမျိုးအစားနှင့်အရွယ်အစားကိုလည်းစစ်ဆေးသည်။

2 ။ အမှားကိုင်တွယ်၏ unification

PHP ဖိုင်များကိုတင်ခြင်းလုပ်ငန်းစဉ်အတွင်းအမှားအယွင်းများကိုမကြာခဏတွေ့ရသည်။ ဥပမာအားဖြင့်ဆိုဒ်သည် PHP မှ Set up upload limit ထက် ကျော်လွန်. upload ဖိုင်သည်ဗလာဖြစ်ပြီးဖိုင်လမ်းကြောင်းသည်အရေးမပါပါ။ GetFile function ကိုမှတစ်ဆင့်ဤအမှားများကိုဗဟိုနှင့်စည်းလုံးညီညွတ်မှုပုံစံဖြင့်အမှားများကိုပြန်လည်ပြုပြင်နိုင်သည်။

 function getFile($inputName, $targetDir) {
    if (isset($_FILES[$inputName])) {
        switch ($_FILES[$inputName]['error']) {
            case UPLOAD_ERR_OK:
                // ပုံမှန် upload
                return handleFileUpload($_FILES[$inputName], $targetDir);
            case UPLOAD_ERR_INI_SIZE:
            case UPLOAD_ERR_FORM_SIZE:
                return ['status' => 'error', 'message' => 'ဖိုင်အရွယ်အစားကန့်သတ်ထက်ကျော်လွန်'];
            case UPLOAD_ERR_PARTIAL:
                return ['status' => 'error', 'message' => 'ဖိုင်တင်ခြင်းသည်မပြည့်စုံပါ'];
            case UPLOAD_ERR_NO_FILE:
                return ['status' => 'error', 'message' => 'ဖိုင်မရှိပါ'];
            default:
                return ['status' => 'error', 'message' => 'အမည်မသိ upload အမှား'];
        }
    }
}

function handleFileUpload($file, $targetDir) {
    $fileTmpPath = $file['tmp_name'];
    $fileName = $file['name'];
    $targetFilePath = $targetDir . DIRECTORY_SEPARATOR . $fileName;
    
    if (move_uploaded_file($fileTmpPath, $targetFilePath)) {
        return [
            'status' => 'success',
            'file_path' => $targetFilePath
        ];
    } else {
        return [
            'status' => 'error',
            'message' => 'ဖိုင်လှုပ်ရှားမှုပျက်ကွက်'
        ];
    }
}

ဤအမှားကိုင်တွယ်သည့်နည်းလမ်းသည် upload လုပ်ငန်းစဉ်တွင်တိကျစွာဖမ်းမိရန်နှင့်ပြန်လာသည့်အခါအမှားတိုင်းကိုခွင့်ပြုသည်။ အမှားအယွင်းများအားလုံး၏ဖွဲ့စည်းပုံသည်ဆက်လက်တည်တံ့ပြီးနောက်ဆက်တွဲအပြောင်းအလဲနှင့် debugging ကိုပိုမိုလွယ်ကူစေသည်။

အကျဉ်းချုပ်

GetFile function သည်ဖိုင်တင်ခြင်းလုပ်ငန်းစဉ်တွင်အရေးကြီးသောအခန်းကဏ် play မှပါ 0 င်နိုင်သည်။ upload ယုတ္တိဗေဒနှင့်ပြုပြင်ခြင်းစီးဆင်းမှုကိုဖုံးအုပ်ခြင်းအားဖြင့်၎င်းသည်ကုဒ်ကိုရိုးရှင်းရုံသာမကကုဒ်၏ဖတ်နိုင်မှုနှင့်ထိန်းသိမ်းခြင်းကိုလည်းတိုးတက်စေသည်။ ဖိုင်တင်ခြင်းအတွင်းဖိုင်အမျိုးအစားများ, အရွယ်အစားများ, လမ်းကြောင်းများနှင့်အမှားအယွင်းများကိုပိုမိုအဆင်ပြေစွာလက်ကိုင်ကိုင်ဆောင်သူများကိုပိုမိုအဆင်ပြေစွာကိုင်တွယ်နိုင်ပြီး File Upload အတွက်ပိုမိုလွယ်ကူသောနှင့်ယုံကြည်စိတ်ချရသောအထောက်အပံ့များကိုပိုမိုလွယ်ကူစွာကိုင်တွယ်နိုင်သည်။