လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP PRESTPATH ​​တွင် Symlints ကိုဘယ်လိုကိုင်တွယ်ရမလဲ။

PHP PRESTPATH ​​တွင် Symlints ကိုဘယ်လိုကိုင်တွယ်ရမလဲ။

gitbox 2025-06-04

နေ့စဉ် PHP ဖွံ့ဖြိုးတိုးတက်မှုတွင် parsing ဖိုင်လမ်းကြောင်းများမှာသာမန်လိုအပ်ချက်တစ်ခုဖြစ်သည်။ Realpath () function သည်ပုံမှန်အားဖြင့်ဖိုင်များကိုပုံမှန်စားသုံးရန်လမ်းကြောင်းများရရှိရန်အတွက်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။ သို့သော်၎င်း၏အပြုအမူသည် symlinks နှင့်ဆက်ဆံရာတွင်ရှုပ်ထွေးနိုင်သည်။ ဤဆောင်းပါးသည် လုပ်ငန်းခွင်၏လုပ်ငန်းနိယာမကိုစနစ်တကျရှင်းပြပါလိမ့်မည် () ပုံဆောင်ဆက်သွယ်မှုများကိုကိုင်တွယ်ရန်အမှန်တကယ်စီမံကိန်းများတွင်မည်သို့မှန်ကန်စွာအသုံးပြုရမည်ကိုလက်တွေ့ကျသောအကြံပြုချက်များကိုမျှဝေပါမည်။

1 ။ realpath ၏အခြေခံအသုံးပြုမှု ()

Realpath () လမ်းကြောင်း၏ပုံမှန်အကြွင်းမဲ့အာဏာလမ်းကြောင်းကိုပြန်ပို့သည်။ ဆိုလိုသည်မှာ၎င်းကဲ့သို့သော element များကိုခွဲခြမ်းစိတ်ဖြာလိမ့်မည် , .. သင်္ကေတ links ။

နမူနာကုဒ်:

 $path = realpath('./myfolder/../link-to-file.txt');
echo $path;

ဒီဥပမာမှာ ... Path on the the Pather ကိုခွဲခြမ်းစိတ်ဖြာလိမ့်မည်။

2. သင်္ကေတလိုင်းများအတွက် realath () အပြုအမူ

သင် realappath () ကို သင်္ကေတလိုင်းတစ်ခုအတွက်အသုံးပြုသောအခါ၎င်းသည် link ၏တည်နေရာမဟုတ်ဘဲအမှန်တကယ်လမ်းကြောင်းမှန်ပေါ်အမှတ်အသားများကိုပြန်ပို့သည်။ အချို့ကိစ္စများတွင်သင်လိုချင်တာမဟုတ်ပါ။

ဥပမာအားဖြင့်:

 // ယူဆချက် link.txt သင်္ကေတ link ကိုဖြစ်ပါတယ်,ဘက်ရိခြင်း /data/files/realfile.txt
$resolvedPath = realpath('/var/www/html/link.txt');
echo $resolvedPath;

/Var/www/html/link.txt သည် /var/www/html/link.txt အစား sympath / files/realfile.txt ဖြစ်သည်။

3 ။ realpath () မှားယွင်းသောပြန်လာ

Realpath () သည် ပစ်မှတ်လမ်းကြောင်း၏တည်ရှိမှုပေါ်မူတည်သည်။ အကယ်. လမ်းကြောင်း၌မတည်ရှိပါက မှားယွင်းစွာ ပြန်လာလိမ့်မည်။ ဆိုလိုသည်မှာ၎င်းကို မဖန်တီးသေးသောဖိုင်လမ်းကြောင်းများအတွက်အသုံးမပြုနိုင်ပါ

ဥပမာ -

 $nonExistent = realpath('/path/to/nonexistent/file.txt');
var_dump($nonExistent); // ထုတ်လုပ်ခြင်း bool(false)

4 ။ လက်တွေ့ဆိုင်ရာအချက်များ - Symlink ကိုကိုင်တွယ်ရန် realappath () ကိုလုံခြုံစွာအသုံးပြုခြင်း

1 ။ လမ်းကြောင်းတည်ရှိရှိမရှိဆုံးဖြတ်ရန်

realappath () ကိုမခေါ်မီလမ်းကြောင်းတည်ရှိရန်သေချာပါစေ:

 $path = '/var/www/html/link.txt';
if (file_exists($path)) {
    echo realpath($path);
} else {
    echo "လမ်းကြောင်းမတည်ရှိပါဘူး";
}

2 ။ သင်္ကေတ link သူ့ဟာသူ၏တည်နေရာကိုရယူပါ

သငျသညျအချက်များမှအချက်များအစားသင်္ကေတ link ကိုသူ့ဟာသူလမ်းကြောင်းကိုလမ်းကြောင်းမှန်ပေါ်ရချင်တယ်ဆိုရင်, သင် readlink () ကို သုံးနိုင်သည်။

 $link = '/var/www/html/link.txt';
if (is_link($link)) {
    echo readlink($link); // link ကိုပစ်မှတ်သို့ပြန်သွားပါ
}

သင်္ကေတ link ကိုယ်နှိုက်ကိုအကြွင်းမဲ့လမ်းခရီးကို ရယူရန် Dirname () နှင့် Readlink () ကို ပေါင်းစပ်နိုင်သည်။

 $link = '/var/www/html/link.txt';
if (is_link($link)) {
    $target = readlink($link);
    $realTarget = realpath(dirname($link) . '/' . $target);
    echo $realTarget;
}

3 ။ realappath ကန့်သတ်ခြင်းကိုရှောင်ရှားရန် parsing လမ်းကြောင်းကိုစိတ်ကြိုက်ပြုလုပ်ပါ

သငျသညျ "ခွဲခြမ်းစိတ်ဖြာခြင်း" လမ်းကြောင်းကိုလမ်းကြောင်းမတည်ရှိသည့်လမ်းကြောင်းကို "ခွဲခြမ်းစိတ်ဖြာ" လိုလျှင် resolution ကိုစိတ်ကြိုက်ပြုလုပ်နိုင်သည်။

 function custom_realpath($path) {
    $parts = explode('/', $path);
    $absolutes = [];
    foreach ($parts as $part) {
        if ($part === '' || $part === '.') continue;
        if ($part === '..') {
            array_pop($absolutes);
        } else {
            $absolutes[] = $part;
        }
    }
    return '/' . implode('/', $absolutes);
}

$resolved = custom_realpath('/var/www/html/../html/link.txt');
echo $resolved;

ဤနည်းလမ်းသည်ပုံဆောင်လမ်းကြောင်းကိုခွဲခြမ်းစိတ်ဖြာလိမ့်မည်မဟုတ်ကြောင်းသတိပြုပါ နှင့် လမ်းကြောင်း၌တည်၏။

5 ။ လက်တွေ့ကျသော application တစ်ခု၏ဥပမာများ

သင်ဝက်ဘ်ဖိုင်ဘရောက်ဇာကိုတီထွင်နေပြီးအသုံးပြုသူမှ အောက်ပါ / www / data directory ကိုကန့်သတ်ထားသည်ဆိုပါစို့။ ခွဲခြမ်းစိတ်ဖြာလမ်းကြောင်းသည်ထိုလမ်းညွှန်တွင်သေချာစွာသေချာစေရန်လိုအပ်သည်။

 $base = realpath('/var/www/data');
$userPath = $_GET['path']; // ဥပမာအားဖြင့်:link/to/file.txt
$fullPath = realpath($base . '/' . $userPath);

if ($fullPath && strpos($fullPath, $base) === 0) {
    echo "ဝင်ရောက်ခွင့်ပြုပါ:$fullPath";
} else {
    echo "တရားမဝင်လမ်းကြောင်း";
}

အကယ် . Link / file.txt သည် symlink တစ်ခုဖြစ်ပါက Realpath သည်၎င်း၏ရည်မှန်းချက်တည်နေရာကိုဖြေရှင်းရန်ဖြစ်သည်။ Directory traversal တိုက်ခိုက်မှုများကိုကာကွယ်ရန် Parsed Target သည် ဒေါ်လာအတွင်းအခြေစိုက်စခန်း အတွင်း၌ရှိနေဆဲဖြစ်ကြောင်းသင်အတည်ပြုရန်လိုအပ်သည်။

6 ။ နှိုင်းယှဉ်: realpath () vs dir vs getcwd ()

လုပ်ဆောင်ချက် function ကိုဖော်ပြချက်
Realpath () PYSTLINK နှင့်လမ်းကြောင်းအစိတ်အပိုင်းများခွဲခြမ်းစိတ်ဖြာ
__dir____ လက်ရှိဖိုင်တည်ရှိရာလမ်းညွှန်, compile အချိန်ဆုံးဖြတ်ချက်
GetCwd () လက်ရှိအလုပ်လုပ် directory, runtime ဆုံးဖြတ်ချက်

လမ်းကြောင်းများအသုံးပြုသောအခါမှန်ကန်သောလုပ်ဆောင်မှုကိုရွေးချယ်ခြင်းသည်အထူးသဖြင့် CLI နှင့် Web ပတ်ဝန်းကျင်ကိုရောနှောသောအခါလမ်းကြောင်းရှုပ်ထွေးမှုကိုရှောင်ရှားရန်ကူညီသည်။

7 ။ နိဂုံးချုပ်

Realpath () သည် PHP file path စီမံခန့်ခွဲမှုတွင်မရှိမဖြစ်လိုအပ်သောကိရိယာတစ်ခုဖြစ်သည်။ IS_LINK () , Readlink () နှင့်လမ်းကြောင်းစိစစ်အတည်ပြုနည်းစနစ်များကိုပေါင်းစပ်ခြင်းဖြင့်ပိုမိုလုံခြုံစိတ်ချနိုင်သည်။ နားလည်မှုအားဖြင့်သာ၎င်း၏အကန့်အသတ်များကိုရှုပ်ထွေးသောဖိုင်စနစ်အရ CORD Code ကိုရေးနိုင်ပါသည်။

PHP ဖိုင်လမ်းကြောင်းများနှင့်သင်္ကေတလိုင်းများကိုအသုံးပြုခြင်း ပိုမို. ဥပမာများအရ https://gitbox.net/artet/artet/artping/php-syymlink-Realtath