နေ့စဉ် 0 ဘ်ဆိုဒ်ဖွံ့ဖြိုးတိုးတက်မှုအတွက် PHP ကိုအသုံးပြုသောအခါ Parse_Url () သည် URLs ကိုခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်အစိတ်အပိုင်းများကိုရယူရန်အလွန်အသုံးများသောလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ သို့သော် developer များစွာသည်ဤလုပ်ဆောင်မှုကို "လမ်းကြောင်းမှန်များ" ဖြစ်ရန်ဤလုပ်ဆောင်မှုကိုအသုံးပြုသောအခါမမျှော်လင့်သောရလဒ်များနှင့်ကြုံတွေ့ရလိမ့်မည်။ တကယ်တော့ပြ problem နာက Parse_Url () သူ့ဟာသူမဟုတ်ပေမယ့်ကျွန်တော်တို့ရဲ့အသုံးပြုမှုမြင်ကွင်းနှင့်ပတ်သက်။ နားလည်မှုလွဲမှားခြင်းရှိသည်။
ဤဆောင်းပါးသည်သင့်အား Parse_Url () ၏အပြုအမူကိုနက်နက်နဲနဲနားလည်ရန်သင့်အားနားလည်စေလိမ့်မည်။
Parse_url ၏တရားဝင်ဖော်ပြချက်သည်ဤလုပ်ဆောင်ချက်၏ parametersters သည်တရားဝင် URL ဖြစ်သင့်ကြောင်းရှင်းလင်းစွာဖော်ပြထားသည်။ ဆိုလိုသည်မှာ၎င်းသည် အကြွင်းမဲ့အာဏာ URLs များကို ခွဲခြမ်းစိတ်ဖြာခြင်းအတွက်ပိုမိုသင့်တော်သည်။ အကယ်. သင်သည်ဆွေမျိုးလမ်းကြောင်းကိုဖြတ်သန်းပါကရလဒ်သည်သင်မျှော်လင့်ထားသည့်အရာမဟုတ်ပါ။
ဥပမာတစ်ခုကိုကြည့်ရအောင်။
$url = "/path/to/resource?foo=bar#section";
var_dump(parse_url($url));
ထုတ်လုပ်မှု -
array(1) {
["path"]=>
string(19) "/path/to/resource?foo=bar#section"
}
Parse_Url () မကွဲနိုင်ကြောင်းသင်တွေ့လိမ့်မည် ။ foo = bar နှင့် #section ဖြစ်သော်လည်း string တစ်ခုလုံးကိုလမ်းကြောင်းအဖြစ်ရှုမြင်သည်။ အကြောင်းပြချက်မှာအဝင်သည်ဆွေမျိုးလမ်းကြောင်းဖြစ်သည် ။
အကယ်. သင်သည် query string ကို (သို့) အပိုင်းအစတစ်ခုကိုဆန်းပြားသောလမ်းကြောင်းတစ်ခုတွင်ခွဲခြမ်းစိတ်ဖြာရန်လိုအပ်ပါကအလွယ်တကူ unsute URL သို့ပြောင်းရန်ဖြစ်သည်။ ၎င်းကို virtual protocol နှင့် host name ကို splicting လုပ်ခြင်းဖြင့်အကောင်အထည်ဖော်နိုင်သည်။
$relativeUrl = "/path/to/resource?foo=bar#section";
$absoluteUrl = "http://gitbox.net" . $relativeUrl;
$parts = parse_url($absoluteUrl);
// အတုဖယ်ရှားလိုက်ပါ scheme နှင့် host
unset($parts['scheme'], $parts['host']);
var_dump($parts);
ထုတ်လုပ်မှု -
array(3) {
["path"]=>
string(17) "/path/to/resource"
["query"]=>
string(7) "foo=bar"
["fragment"]=>
string(7) "section"
}
ဤနည်းဖြင့်ကျွန်ုပ်တို့လိုချင်သောရလဒ်များကိုရနိုင်သည်။
အကယ်. သင်သည်ဤကဲ့သို့သောမြင်ကွင်းမျိုးကိုမကြာခဏကြုံတွေ့ရပါက,
function parse_relative_url($url) {
// သို့ဆိုလျှင် / စတင်ရန်လမ်းကြောင်း,ပေါင်းထည့်ရန်ဒိုမိန်းအမည်ကို forge
if (strpos($url, '/') === 0) {
$url = 'http://gitbox.net' . $url;
$parts = parse_url($url);
unset($parts['scheme'], $parts['host']);
return $parts;
}
// ဒါကြောင့်အခြား format ပဲဆိုပါက,သင်သည်ခွဲခြမ်းစိတ်ဖြာခြင်းသို့မဟုတ်ခြွင်းချက်တစ်ခုပစ်ရန်သင့်ကိုရွေးချယ်နိုင်သည်
throw new InvalidArgumentException("Only relative paths starting with '/' are supported.");
}
ခေါ်ဆိုမှုဥပမာ -
$info = parse_relative_url('/test/path?x=1#top');
print_r($info);
ထုတ်လုပ်မှု -
Array
(
[path] => /test/path
[query] => x=1
[fragment] => top
)
Parse_url () အကြွင်းမဲ့အာဏာ URLs ကိုခွဲခြမ်းစိတ်ဖြာသောအခါအလွန်စိတ်ချရသော်လည်းဆွေမျိုးလမ်းကြောင်းများနှင့်ရင်ဆိုင်ရသောအခါစွမ်းဆောင်ရည်အကန့်အသတ်ရှိသည်။ ဒိုမိန်းအတုအတုကိုယာယီခွဲထုတ်ခြင်းအားဖြင့်သင်သည်ဤကန့်သတ်ချက်ကိုကျော်လွှားနိုင်ပြီး,
၎င်းသည် hack မဟုတ်ဘဲ function design ၏နယ်နိမိတ်ကိုကျိုးကြောင်းဆီလျော်သောတုန့်ပြန်မှုမဟုတ်ပါ။ ကိရိယာများ၏နယ်နိမိတ်ကိုနားလည်ခြင်းသည်ကိရိယာများတွင် bug များရှိ, ဒီဆောင်းပါးကမင်းကိုထောင်ချောက်နည်းလာအောင်ကူညီနိုင်မယ်လို့မျှော်လင့်ပါတယ်။