PHP တွင် Symlink () function သည် developer များက developer များက developer များက developer များကိုဖန်တီးရန်ခွင့်ပြုသည်။ သို့သော်, အခြေခံဖိုင်စနစ်၏လုပ်ငန်းလည်ပတ်မှုသဘောသဘာဝကြောင့်မတော်လျော်စွာအသုံးပြုပါကခွင့်ပြုချက်ပြ problems နာများနှင့်လုံခြုံရေးဆိုင်ရာအန္တရာယ်များကိုဖြစ်စေရန်လွယ်ကူသည်။
ဤဆောင်းပါးသည် Symlink () Symlink () ကို လက်တွေ့ကျသော application များ၏ရှုထောင့်မှကြည့်ရှုသည့်အခါ Pymlink () ၏ရှုထောင့်မှကြည့်ရှုသောအခါဘုံခွင့်ပြုချက်ပြ Proble နာများနှင့်ဖြေရှင်းနည်းများအပေါ်နက်ရှိုင်းသောဆွေးနွေးမှုများပြုလုပ်မည်ဖြစ်သည်။
$target = '/var/www/html/data/original.txt';
$link = '/var/www/html/data/link.txt';
if (symlink($target, $link)) {
echo 'သင်္ကေတ link ဖန်တီးမှုကိုအောင်မြင်စွာ。';
} else {
echo 'သင်္ကေတ link ကိုဖန်တီးရန်ပျက်ကွက်。';
}
အသုံးပြုမှုသည်ရိုးရှင်းပြီးရှင်းလင်းသော်လည်း developer များသည်အမှန်တကယ်ဖြန့်ကျက်မှုတွင်အောက်ပါပြ problems နာများကိုမကြာခဏကြုံတွေ့ရလေ့ရှိသည်။
အသုံးအများဆုံးပြ problem နာမှာ Symlink () အမှားသတိပေးချက်များမရှိဘဲ မှားယွင်းသော ပြန်လာခြင်းဖြစ်သည်။ အဓိကအကြောင်းအရင်းမှာများသောအားဖြင့်ဖြစ်သည်။
PHP script execution အသုံးပြုသူ (ထိုကဲ့သို့သော www-data ကဲ့သို့) သည်ပစ်မှတ်ထားဖိုင်သို့မဟုတ်၎င်း၏သာလွန်လမ်းညွှန်အတွက်သင့်လျော်သောခွင့်ပြုချက်မရှိပါ။
အချို့သောစနစ်များ (အထူးသဖြင့် Selinux-Enabled Linux Systems) သည် Symlink () ၏အပြုအမူကိုကန့်သတ်ထားသည်။
Windows ပလက်ဖောင်းရှိစီမံခန့်ခွဲသူမဟုတ်သည့်အကောင့်များကပုံသေအနေဖြင့်ပုံဆောင်ဆက်သွယ်မှုများကိုဖန်တီးရန်ခွင့်ပြုချက်မရှိပါ။
PHP အသုံးပြုသူများသည် "Execution" နှင့် "ရေး" ခွင့်ပြုချက်များကိုပစ်မှတ်လမ်းကြောင်းသို့သွားပါ။
Linux တွင်ခွင့်ပြုချက်ကိုပြုပြင်ရန်အောက်ပါ command ကိုသုံးနိုင်သည်။
sudo chown -R www-data:www-data /var/www/html/data
sudo chmod -R 755 /var/www/html/data
Selinux status ကိုစစ်ဆေးပြီးသက်ဆိုင်ရာမူဝါဒကိုစစ်ဆေးပါ ( setsebool -p httpd_homedirs ) ။
Developer Mode ကို Windows တွင်ဖွင့်ပါသို့မဟုတ် PHP ကိုအုပ်ချုပ်ရေးမှူးအဖြစ်လုပ်ကိုင်ပါ။
Commlink () မျက်စိကန်းသောကွပ်မျက်ခြင်းကိုရှောင်ရှားရန်မခေါ်မီခွင့်ပြုချက်ကိုစစ်ဆေးပါ။
if (is_writable(dirname($link)) && is_readable($target)) {
symlink($target, $link);
} else {
error_log('လုံလောက်သောခွင့်ပြုချက်မရှိဘဲသင်္ကေတ links ဖန်တီးပါ');
}
အချို့သောစနစ်များသည်မမှန်မကန်လမ်းကြောင်းများကြောင့် (ထိုကဲ့သို့သောလမ်းကြောင်းများအသုံးပြုခြင်းကဲ့သို့သောလမ်းကြောင်းများကြောင့်အချိတ်အဆက်များကိုဖန်တီးရန်ငြင်းဆန်လိမ့်မည်။ လမ်းကြောင်းမှန်ပေါ်ကိုသေချာစေရန်သင် realappath () ကို သုံးနိုင်သည်။
$target = realpath('/var/www/html/data/original.txt');
$link = '/var/www/html/data/link.txt';
အသုံးပြုသူထိန်းချုပ်ထားသောလမ်းကြောင်းများကို Symlink () တွင်တိုက်ရိုက်ပါ 0 င်ရန်ခွင့်မပြုပါနှင့်, လမ်းကြောင်းကိုကန့်သတ်ရန် Whitelist စိစစ်အတည်ပြုကိုသုံးနိုင်သည်။
$allowedDir = '/var/www/html/data/';
$target = realpath($_POST['path']);
if (strpos($target, $allowedDir) === 0) {
symlink($target, $link);
} else {
die('တရားမဝင်လမ်းကြောင်း');
}
Link Target ကိုစစ်ဆေးရန် Readlink () သို့မဟုတ် realapher () realapher () ကိုသုံးပါ ။
$realTarget = realpath($target);
if (strpos($realTarget, '/var/www/html/data/') !== 0) {
die('တရားမဝင် link ကိုပစ်မှတ်');
}
လင့်ခ်တစ်ခုကိုဖန်တီးခြင်းတွင်ဖိုင်စနစ်အပြောင်းအလဲများပါ 0 င်သည်။ ခြွင်းချက်ခြေရာခံခြင်းကိုလွယ်ကူချောမွေ့စေရန်မှတ်တမ်းများကိုမှတ်တမ်းတင်ရန်အကြံပြုသည်။
file_put_contents('/var/log/link_log.txt', date('c') . " link တစ်ခုဖန်တီးပါ: $link -> $target\n", FILE_APPEND);
မြင့်မားသောတစ်ပြိုင်နက်တည်းသို့မဟုတ်လူမျိုးရေးအခြေအနေများကြောင့်ဖြစ်ပေါ်လာသောခွင့်ပြုချက် ပြ problems နာများကိုရှောင်ရှားရန်,
$fp = fopen('/tmp/link.lock', 'w+');
if (flock($fp, LOCK_EX)) {
symlink($target, $link);
flock($fp, LOCK_UN);
}
fclose($fp);
အကယ်. ပတ်ဝန်းကျင်က (ထိုကဲ့သို့သောမျှဝေထားသော hosting) ကဲ့သို့သော (ထိုကဲ့သို့သော shared hosting) ကို (ထိုကဲ့သို့သော shared hosting) ကိုအားလုံးခွင့်မပြုပါက PHP ကိုသုံးနိုင်သည်။
header('Location: https://gitbox.net/files/original.txt');
exit;
ဤနည်းလမ်းသည် system-level link မဟုတ်သော်လည်း၎င်းသည်လိုအပ်ချက်များအတွက်လိုအပ်ချက်များနှင့်ခွင့်ပြုချက်အတွက်တင်းကျပ်လိုအပ်ချက်များမရှိပါ။