PHP တွင်ဖိုင်တင်ခြင်းကိုကိုင်တွယ်ခြင်းသည်ဘုံလုပ်ငန်းဖြစ်သည်။ developer များစွာအတွက်ဖိုင်တင်ခြင်းသည်ပုံမှန်အားဖြင့် 0 ဘ်ဆိုဒ်သို့မဟုတ်လျှောက်လွှာတစ်ခု၏အစိတ်အပိုင်းတစ်ခုဖြစ်ပြီးဖြစ်သည်။ ပုံမှန်အားဖြင့်ဖိုင်တစ်ခု၏ uploading သည် HTML ပုံစံများ, PHP ၏ $ _files hyperglobal array နှင့်အချို့သောနောက်ထပ်ယုတ္တိကုဒ်များပါဝင်သည်။ သို့သော်ဤလုပ်ငန်းစဉ်ကိုရိုးရှင်းအောင်လုပ်ခြင်းသို့မဟုတ်ကုဒ်၏ပြန်လည်သုံးသပ်ခြင်းနှင့်ထိန်းသိမ်းခြင်းတို့ကိုမြှင့်တင်ရန်, developer များက uploads ကိုင်တွယ်ရန်အချို့သောလုပ်ဆောင်ချက်များကိုရေးနိုင်သည်။ ယနေ့တွင်ကျွန်ုပ်တို့သည်ဖိုင် တင်ခြင်းကို ကိုင်တွယ်နိုင်သည့်ဖိုင်တင်ခြင်းသို့မဟုတ်တင်ခြင်းလုပ်ငန်းစဉ်တွင်၎င်း၏အခန်းကဏ် 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 ၏လုပ်ဆောင်ချက်မှာ -
upload ဖိုင်တည်ရှိခြင်းရှိမရှိစစ်ဆေးပါ။ upload လုပ်ငန်းစဉ်အတွင်းအမှားများမရှိပါ။
ဖိုင်၏ယာယီလမ်းကြောင်း, အမည်, အရွယ်အစားနှင့်အမျိုးအစားကိုရရှိသည်။
ပစ်မှတ်ဖိုင်လမ်းကြောင်းကိုထုတ်လုပ်ပါ။
ယာယီဖိုင်ကို destination folder ထဲသို့ရွှေ့။ upload ရလဒ်ကိုပြန်ပို့ပါ။
အထက်ဖော်ပြပါကုဒ်များမှ GetFile function သည်ဖိုင်တင်ခြင်းလုပ်ငန်းစဉ်ကိုရိုးရှင်းစေပြီးရှုပ်ထွေးသောစစ်ဆေးခြင်းနှင့်ပြုပြင်ခြင်းများအားလုံးကို encapsulate လုပ်နိုင်သည်ကိုကျွန်ုပ်တို့တွေ့နိုင်သည်။ ဤလုပ်ဆောင်မှုကိုအသုံးပြုသောအခါ developer သည်တူညီသောစစ်ဆေးမှုကိုထပ်ခါတလဲလဲစစ်ဆေး။ ယုတ္တိဗေဒကိုထပ်ခါတလဲလဲလုပ်ခြင်းမရှိဘဲဖိုင်နယ်ပယ်နှင့် destination directory လမ်းကြောင်း၏အမည်ကိုသာပေးရန်လိုအပ်သည်။
ဖိုင်တင်ခြင်းတွင်အသုံးအများဆုံးလိုအပ်ချက်များအနက်မှတစ်ခုမှာဖိုင်အမျိုးအစားများနှင့်အရွယ်အစားများကိုကန့်သတ်ရန်ဖြစ်သည်။ တင်ထားသောဖိုင်များသည်လိုအပ်ချက်များနှင့်ကိုက်ညီစေရန်သေချာစေရန်ဤကန့်သတ်ချက်များကိုစစ်ဆေးရန် 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 န်မရှိပါ။ သို့သော်မမှန်ကန်တဲ့သို့မဟုတ်အလွန်အကျွံဖိုင်တင်ခြင်းကိုရှောင်ရှားရန်မတင်မီဖိုင်အမျိုးအစားနှင့်အရွယ်အစားကိုလည်းစစ်ဆေးသည်။
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 အတွက်ပိုမိုလွယ်ကူသောနှင့်ယုံကြည်စိတ်ချရသောအထောက်အပံ့များကိုပိုမိုလွယ်ကူစွာကိုင်တွယ်နိုင်သည်။