PHP ၏ Realpath () function ကို သတ်မှတ်ထားသောလမ်းကြောင်း၏ပကတိလမ်းကြောင်းကိုပြန်လည်ပတ်ရန်နှင့်ပုံဆောင်ဆက်သွယ်မှုများကိုပြန်လည်ခွဲခြမ်းစိတ်ဖြာရန်အသုံးပြုသည် ။
$realPath = realpath('/var/www/html/../index.php');
echo $realPath;
ဤကုဒ်သည် /var/index.php ၏အကြွင်းမဲ့လမ်းကြောင်းကိုထုတ်ပေးလိမ့်မည်။
နူးညံ့သော link တစ်ခုသည်အခြားဖိုင်သို့မဟုတ်လမ်းညွှန်ကိုရည်ညွှန်းသည်။ ၎င်းသည်အထူးသဖြင့်ဖြန့်ကျက်သောပတ်ဝန်းကျင်တွင် (soft link directory သို့ညွှန်ပြရန် Nginx Root ကို အသုံးပြု. Nginx Root) တွင်အလွန်အသုံးများသည်။ ပြနာက
Realpath () သည် soft link မှညွှန်ပြသည့် လမ်းကြောင်းမှန်ကို ခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်ပြန်လာလိမ့်မည်။
အကယ်. သင်သည်ခွင့်ပြုချက်ထိန်းချုပ်မှုသို့မဟုတ်လမ်းကြောင်းကိုက်ညီမှုအတွက်လမ်းကြောင်းများပေါ်တွင်မှီခိုနေလျှင်, realpath () မှပြန်လာသောလမ်းကြောင်းသည်သင်၏မျှော်လင့်ချက်များနှင့်မကိုက်ညီပါ။
အချို့သောအခြေအနေများတွင် (ထိုကဲ့သို့သော whitelist စိစစ်အတည်ပြုခြင်းကဲ့သို့သော), ပျော့ပျောင်းသော link resolution ပြီးနောက်လမ်းကြောင်းသည်သင်၏ကန့်သတ်ချက်များကိုကျော်လွှားနိုင်သည်။
ဥပမာ -
အောက်ပါဖိုင်ဖွဲ့စည်းပုံရှိသည်ဆိုပါစို့:
/data/app/storage/real/
/data/app/storage/link -> /data/app/storage/real/
ကုဒ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
$path = '/data/app/storage/link/file.txt';
echo realpath($path);
output ကိုဖြစ်လိမ့်မည်:
/data/app/storage/real/file.txt
ယခုအချိန်တွင်သင်ကပြန်ကြားချက် link ကို ပါသည့် link ကိုပါ 0 င်ရန်သင်မျှော်လင့်ပါက အမူအကျင့် () ၏အပြုအမူသည်သင်၏ရည်မှန်းချက်နှင့်မကိုက်ညီပါ။
အကယ်. သင်သည်ပကတိလမ်းကြောင်းကိုသာရလိုလျှင်နူးညံ့သော link ကိုခွဲခြမ်းစိတ်ဖြာခြင်းကိုဂရုမစိုက်လိုပါက၎င်းကိုရရှိရန်အောက်ပါနည်းလမ်းများကိုသုံးနိုင်သည်။
$absolutePath = rtrim(getcwd(), '/') . '/' . ltrim($relativePath, '/');
၎င်းသည်နူးညံ့သော link ကိုမဖြေရှင်းနိုင်ပါ။
လမ်းကြောင်းသည်ပျော့ပျောင်းသော link တစ်ခုဖြစ်ခြင်းရှိမရှိဆုံးဖြတ်နိုင်သည်။
if (is_link($path)) {
$target = readlink($path);
echo "ဒါက soft link ကိုဖြစ်ပါတယ်,ရည်မှန်းချက်:" . $target;
}
စီမံကိန်းလိုအပ်ချက်များအပေါ် အခြေခံ. link ကိုလိုက်နာရန်သို့မဟုတ်မူရင်းလမ်းကြောင်းကိုစောင့်ရှောက်ရန်သင်ဆုံးဖြတ်နိုင်သည်။
ဤတွင် အပျိုးစာ ပေါ်တွင်မူမမူတည်သည့်လမ်းကြောင်းပုံမှန်လုပ်ဆောင်ချက်ဖြစ်သည်။
function normalizePath($path) {
$parts = [];
foreach (explode('/', $path) as $segment) {
if ($segment === '' || $segment === '.') {
continue;
}
if ($segment === '..') {
array_pop($parts);
} else {
$parts[] = $segment;
}
}
return '/' . implode('/', $parts);
}
$input = '/data/app/storage/link/../link/file.txt';
echo normalizePath($input);
ဒီဟာကို သန့်ရှင်းစေတယ် ပြီးတော့ .. လမ်းကြောင်းထဲမှာပေမယ့် soft link ကိုမဖြေရှင်းနိုင်ပါဘူး။
ခွင့်ပြုချက်ထိန်းချုပ်မှုအတွင်းတွင်မူရင်းလမ်းကြောင်းနှင့် realpath () လမ်းကြောင်းကိုခွင့်ပြုချက်နှိုင်းယှဉ်ရန်တစ်ချိန်တည်းတွင်မှတ်တမ်းတင်နိုင်သည်။
$originalPath = '/data/app/storage/link/file.txt';
$realPath = realpath($originalPath);
if (strpos($realPath, '/data/app/storage/real/') !== 0) {
die('ဒီလမ်းကြောင်းကိုခွင့်မပြုပါ');
}
ဤချဉ်းကပ်မှုသည်ပျော့ပျောင်းသောလင့်ခ်များကအထိခိုက်မခံသောလမ်းကြောင်းများသို့ညွှန်ပြသည့်ပြ problem နာကိုကိုင်တွယ်ဖြေရှင်းရန်သင့်လျော်သည်။
Directory Directory Directory Directionation : မူရင်းလမ်းကြောင်းသည် realappath ကိုအသုံးမပြုခင်တရားဝင်ဖြစ်သည်ကိုစစ်ဆေးပါ။
Development Reficturment Debugging : ဖြန့်ကျက်မှုဝန်းကျင်တွင်အသုံးပြုသောပျော့ပျောင်းသောလင့်ခ်များစွာရှိသည်။ စာမူများမကိုက်ညီသောလမ်းများကြောင့်ဖြစ်ပေါ်လာသော bug များကိုရှောင်ရှားရန် debugging စဉ်အတွင်းလမ်းကြောင်းပြောင်းရန်လမ်းကြောင်းပြောင်းရန်သေချာစွာဂရုပြုပါ။
Framework Development : အကယ်. သင်သည်မူဘောင်ကိုတီထွင်နေပါကမှန်ကန်တဲ့အစား လမ်းကြောင်းမှန်ပေါ် ကိုဆက်ထိန်းထားမည့်အစားစိတ်ကြိုက်လမ်းကြောင်းဆိုင်ရာဆုံးဖြတ်ချက်ကိရိယာတစ်ခုပေးရန်အကြံပြုသည်။
PHP ၏ Realpath () သည် soft link များထုတ်လုပ်သည့်အခါ pathere uniformity နှင့်ရိုးရှင်းမှုကိုအမှန်ပင်ယူဆောင်လာနိုင်သည်။ မြင့်မားသောလုံခြုံရေးနှင့်ရှေ့နောက်ညီညွတ်မှုဆိုင်ရာလိုအပ်ချက်များရှိသောလျှောက်လွှာများအနေဖြင့်အမှန်တကယ်လိုအပ်ချက်များအပေါ် အခြေခံ. ပိုမိုကောင်းမွန်သော pathing processing strategy ကိုကျင့်သုံးရန်လိုအပ်ပါကပြန်လည်အသုံးပြုခြင်းမှရှောင်ရှားရန်လိုအပ်ပါက Path Analsisis ကိုသင်ကိုယ်တိုင်အကောင်အထည်ဖော်ရန်အကြံပြုပါသည် ။