လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP Realtath ကိုအသုံးပြုနည်းကိုဖိုင်တစ်ခု၏တကယ့်လမ်းကြောင်းမှန်ပေါ်ကိုရယူရန်နှင့်ပျော့ပျောင်းသောချိတ်ဆက်မှုပြ issues နာများကိုရှောင်ရှားရန်မည်သို့အသုံးပြုရမည်နည်း။

PHP Realtath ကိုအသုံးပြုနည်းကိုဖိုင်တစ်ခု၏တကယ့်လမ်းကြောင်းမှန်ပေါ်ကိုရယူရန်နှင့်ပျော့ပျောင်းသောချိတ်ဆက်မှုပြ issues နာများကိုရှောင်ရှားရန်မည်သို့အသုံးပြုရမည်နည်း။

gitbox 2025-05-29

1 ။ realpath () function ကိုမိတ်ဆက်

PHP ၏ Realpath () function ကို သတ်မှတ်ထားသောလမ်းကြောင်း၏ပကတိလမ်းကြောင်းကိုပြန်လည်ပတ်ရန်နှင့်ပုံဆောင်ဆက်သွယ်မှုများကိုပြန်လည်ခွဲခြမ်းစိတ်ဖြာရန်အသုံးပြုသည်

 $realPath = realpath('/var/www/html/../index.php');
echo $realPath;

ဤကုဒ်သည် /var/index.php ၏အကြွင်းမဲ့လမ်းကြောင်းကိုထုတ်ပေးလိမ့်မည်။

2 ။ ပျော့ပျောင်းသောလင့်ခ်များကြောင့်ဖြစ်သည့်ပြနာများ

နူးညံ့သော 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 င်ရန်သင်မျှော်လင့်ပါက အမူအကျင့် () ၏အပြုအမူသည်သင်၏ရည်မှန်းချက်နှင့်မကိုက်ညီပါ။

3 ။ ပျော့ပျောင်းသောလင့်ခ်များကြောင့်ဖြစ်ပေါ်လာသောပြ problems နာများကိုမည်သို့ရှောင်ရှားနိုင်မည်နည်း

1 ။ realpath ကိုရှောင်ပါ။

အကယ်. သင်သည်ပကတိလမ်းကြောင်းကိုသာရလိုလျှင်နူးညံ့သော link ကိုခွဲခြမ်းစိတ်ဖြာခြင်းကိုဂရုမစိုက်လိုပါက၎င်းကိုရရှိရန်အောက်ပါနည်းလမ်းများကိုသုံးနိုင်သည်။

 $absolutePath = rtrim(getcwd(), '/') . '/' . ltrim($relativePath, '/');

၎င်းသည်နူးညံ့သော link ကိုမဖြေရှင်းနိုင်ပါ။

2 ။ Readlink () ကို soft link ကိုဆုံးဖြတ်ရန်အသုံးပြုပါ

လမ်းကြောင်းသည်ပျော့ပျောင်းသော link တစ်ခုဖြစ်ခြင်းရှိမရှိဆုံးဖြတ်နိုင်သည်။

 if (is_link($path)) {
    $target = readlink($path);
    echo "ဒါက soft link ကိုဖြစ်ပါတယ်,ရည်မှန်းချက်:" . $target;
}

စီမံကိန်းလိုအပ်ချက်များအပေါ် အခြေခံ. link ကိုလိုက်နာရန်သို့မဟုတ်မူရင်းလမ်းကြောင်းကိုစောင့်ရှောက်ရန်သင်ဆုံးဖြတ်နိုင်သည်။

3 ။ ကိုယ်တိုင်လမ်းကြောင်းကိုပုံမှန်အတိုင်း (soft link resolution မရှိပါ)

ဤတွင် အပျိုးစာ ပေါ်တွင်မူမမူတည်သည့်လမ်းကြောင်းပုံမှန်လုပ်ဆောင်ချက်ဖြစ်သည်။

 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 ကိုမဖြေရှင်းနိုင်ပါဘူး။

4 ။ မူရင်းလမ်းကြောင်းနှင့် realitpath လမ်းကြောင်းကိုနှိုင်းယှဉ်ပါ

ခွင့်ပြုချက်ထိန်းချုပ်မှုအတွင်းတွင်မူရင်းလမ်းကြောင်းနှင့် realpath () လမ်းကြောင်းကိုခွင့်ပြုချက်နှိုင်းယှဉ်ရန်တစ်ချိန်တည်းတွင်မှတ်တမ်းတင်နိုင်သည်။

 $originalPath = '/data/app/storage/link/file.txt';
$realPath = realpath($originalPath);

if (strpos($realPath, '/data/app/storage/real/') !== 0) {
    die('ဒီလမ်းကြောင်းကိုခွင့်မပြုပါ');
}

ဤချဉ်းကပ်မှုသည်ပျော့ပျောင်းသောလင့်ခ်များကအထိခိုက်မခံသောလမ်းကြောင်းများသို့ညွှန်ပြသည့်ပြ problem နာကိုကိုင်တွယ်ဖြေရှင်းရန်သင့်လျော်သည်။

4 ။ လက်တွေ့ကျသောလျှောက်လွှာအကြံပြုချက်များ

  • Directory Directory Directory Directionation : မူရင်းလမ်းကြောင်းသည် realappath ကိုအသုံးမပြုခင်တရားဝင်ဖြစ်သည်ကိုစစ်ဆေးပါ။

  • Development Reficturment Debugging : ဖြန့်ကျက်မှုဝန်းကျင်တွင်အသုံးပြုသောပျော့ပျောင်းသောလင့်ခ်များစွာရှိသည်။ စာမူများမကိုက်ညီသောလမ်းများကြောင့်ဖြစ်ပေါ်လာသော bug များကိုရှောင်ရှားရန် debugging စဉ်အတွင်းလမ်းကြောင်းပြောင်းရန်လမ်းကြောင်းပြောင်းရန်သေချာစွာဂရုပြုပါ။

  • Framework Development : အကယ်. သင်သည်မူဘောင်ကိုတီထွင်နေပါကမှန်ကန်တဲ့အစား လမ်းကြောင်းမှန်ပေါ် ကိုဆက်ထိန်းထားမည့်အစားစိတ်ကြိုက်လမ်းကြောင်းဆိုင်ရာဆုံးဖြတ်ချက်ကိရိယာတစ်ခုပေးရန်အကြံပြုသည်။

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

PHP ၏ Realpath () သည် soft link များထုတ်လုပ်သည့်အခါ pathere uniformity နှင့်ရိုးရှင်းမှုကိုအမှန်ပင်ယူဆောင်လာနိုင်သည်။ မြင့်မားသောလုံခြုံရေးနှင့်ရှေ့နောက်ညီညွတ်မှုဆိုင်ရာလိုအပ်ချက်များရှိသောလျှောက်လွှာများအနေဖြင့်အမှန်တကယ်လိုအပ်ချက်များအပေါ် အခြေခံ. ပိုမိုကောင်းမွန်သော pathing processing strategy ကိုကျင့်သုံးရန်လိုအပ်ပါကပြန်လည်အသုံးပြုခြင်းမှရှောင်ရှားရန်လိုအပ်ပါက Path Analsisis ကိုသင်ကိုယ်တိုင်အကောင်အထည်ဖော်ရန်အကြံပြုပါသည်