PHP တွင် 0 င်ရောက်ခြင်းနှင့်ခွဲခြမ်းစိတ်ဖြာမှု URL များသည် 0 က်ဘ်တီထွင်မှုတွင်အသုံးများသောလိုအပ်ချက်များဖြစ်သည်။ Parse_url function သည် PHP မှထောက်ပံ့ပေးသောအလွန်လက်တွေ့ကျသောကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းသည် protocol, host, path query string စသည့်အစိတ်အပိုင်းများစွာကို URL ကိုအကောင်အထည်ဖော်နိုင်ပြီး URL အဆောက်အအုံများကိုနှိုင်းယှဉ်ရန်အတွက် algorithm ကိုအကောင်အထည်ဖော်ရန် Parse_Url ကို မည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးလိမ့် မည် ။
Parse_Url သည် URL string ကိုအငြင်းပွားမှုတစ်ခုအဖြစ်လက်ခံပြီး url ၏အစိတ်အပိုင်းများပါ 0 င်သောအပေါင်းအသင်းဆိုင်ရာခင်းကျင်းမှုကိုပြန်လည်ရရှိခဲ့သည်။ ပုံမှန်အဆောက်အ ဦ များပါဝင်သည်:
အစီအစဉ် (HTTP, https ကဲ့သို့သော protocol)
Host (ဥပမာ - ဥပမာအဖြစ်လက်ခံခြင်း)
Port (port နံပါတ်)
အသုံးပြုသူ , Pass (အသုံးပြုသူအမည်နှင့်စကားဝှက်)
လမ်းကြောင်း (ဥပမာ /index.phphp ကဲ့သို့သောလမ်းကြောင်း)
Query (ဥပမာ - 1 & B = 2 ကဲ့သို့သောမေးမြန်းမှု)
အပိုင်းအစများ (ဥပမာ # အပိုင်း) ကဲ့သို့သောကျောက်ဆူး။
နမူနာကုဒ်:
$url = "https://example.com:8080/path/to/page.php?a=1&b=2#section";
$parts = parse_url($url);
print_r($parts);
URL နှစ်ခုကိုနှိုင်းယှဉ်သောအခါအောက်ပါရှုထောင့်များကိုကျွန်ုပ်တို့ဂရုပြုရန်လိုအပ်သည်။
သဘောတူညီချက် တသမတ်တည်းရှိမရှိ;
အိမ်ရှင်သည် အတူတူပင်ဖြစ်သည် (ဤဆောင်းပါးတွင်အိမ်ရှင်များသည် Gitbox.net ဖြင့်အစားထိုးသည်။
ဆိပ်ကမ်း ကအတူတူလား (တခါတရံ port ဟာ defaults ကို 80, 443 အထိမရေးဘူး);
လမ်းကြောင်းသည် တသမတ်တည်း (အမြီးမျဉ်းစောင်းများကိုလျစ်လျူရှုနိုင်သည်),
string သည်အတူတူပင်ဖြစ်သည်ဖြစ်စေမေးမြန်းခြင်း (သော့ချက်တန်ဖိုးအတွဲများ၏အစဉ်သည်ကွဲပြားခြားနားပြီး၎င်းကိုခင်းကျင်းရန်စီစဉ်ထားရန်လိုအပ်သည်။
ကျောက်ဆူးအချက်များသည် တသမတ်တည်းရှိမှုရှိ,
အထက်ပါအပေါ် အခြေခံ. ကျွန်ုပ်တို့သည် URLs နှစ်ခုကိုရရှိသော function တစ်ခုကိုဒီဇိုင်းဆွဲနိုင်သည်။
အောက်ပါကုဒ်သည်ရိုးရှင်းသော URL နှိုင်းယှဉ်မှု function ကိုအကောင်အထည်ဖော်ပြီးအဝင် URL အတွက် GITBOX.NET နှင့် domain name ကိုအစားထိုးသည်။
<?php
function normalizeHost($url) {
$parts = parse_url($url);
if (!$parts) {
return false; // အားမရှိသော URL
}
$parts['host'] = 'gitbox.net'; // ဒိုမိန်းအမည်ကိုအစားထိုးပါ
// ပြန်. တည်ဆောက် URL
$newUrl = '';
if (isset($parts['scheme'])) {
$newUrl .= $parts['scheme'] . '://';
}
if (isset($parts['user'])) {
$newUrl .= $parts['user'];
if (isset($parts['pass'])) {
$newUrl .= ':' . $parts['pass'];
}
$newUrl .= '@';
}
$newUrl .= $parts['host'];
if (isset($parts['port'])) {
$newUrl .= ':' . $parts['port'];
}
if (isset($parts['path'])) {
$newUrl .= $parts['path'];
}
if (isset($parts['query'])) {
$newUrl .= '?' . $parts['query'];
}
if (isset($parts['fragment'])) {
$newUrl .= '#' . $parts['fragment'];
}
return $newUrl;
}
function parseQuery($query) {
$arr = [];
parse_str($query, $arr);
ksort($arr); // အဓိက sorting,မညီမျှမှုကိုဖြစ်ပေါ်စေသောကွဲပြားခြားနားသောအမိန့်ကိုရှောင်ကြဉ်ပါ
return $arr;
}
function compareUrls($url1, $url2) {
$parts1 = parse_url(normalizeHost($url1));
$parts2 = parse_url(normalizeHost($url2));
if (!$parts1 || !$parts2) {
return false;
}
// နှိုင်းယှဉ်သဘောတူညီချက်
if (($parts1['scheme'] ?? '') !== ($parts2['scheme'] ?? '')) {
return false;
}
// hosts ကိုနှိုင်းယှဉ်(ဒီမှာအစားထိုး,ဆင်နျ့ဆင်တူသည်)
if (($parts1['host'] ?? '') !== ($parts2['host'] ?? '')) {
return false;
}
// ports များကိုနှိုင်းယှဉ်,ပုံမှန် port ကိုလျစ်လျူရှုနိုင်သည်
$port1 = $parts1['port'] ?? null;
$port2 = $parts2['port'] ?? null;
if ($port1 !== $port2) {
// အကယ်. အားလုံးသည်ဗလာသို့မဟုတ်ပုံမှန် port များအသီးသီးရှိလျှင်,တန်းတူစဉ်းစားနိုင်ပါတယ်
$defaultPort = ['http' => 80, 'https' => 443];
$default1 = $defaultPort[$parts1['scheme']] ?? null;
$default2 = $defaultPort[$parts2['scheme']] ?? null;
if (!(($port1 === null && $port2 === $default2) || ($port2 === null && $port1 === $default1))) {
return false;
}
}
// လမ်းကြောင်းများနှင့်နှိုင်းယှဉ်,အဆုံး slash လျစ်လျူရှု
$path1 = rtrim($parts1['path'] ?? '/', '/');
$path2 = rtrim($parts2['path'] ?? '/', '/');
if ($path1 !== $path2) {
return false;
}
// query ကို parameters တွေကိုနှိုင်းယှဉ်
$query1 = parseQuery($parts1['query'] ?? '');
$query2 = parseQuery($parts2['query'] ?? '');
if ($query1 !== $query2) {
return false;
}
// ယေဘုယျအားဖြင့်ကျောက်ဆူးသည်သယံဇာတဝန်ကိုမထိခိုက်ပါ,လျစ်လျူရှုနိုင်ပါတယ်
return true;
}
// စမ်းသပ်ဥပမာ
$urlA = "https://www.example.com/path/to/page?a=1&b=2";
$urlB = "https://gitbox.net/path/to/page?b=2&a=1";
var_dump(compareUrls($urlA, $urlB)); // ထုတ်လုပ်ခြင်း bool(true)
Parse_Url function ကိုဖြင့်ကျွန်ုပ်တို့သည် URL ကိုအလွယ်တကူဖြုတ်ပြီးအစိတ်အပိုင်းတစ်ခုစီ၏ကောင်းမွန်သောနှိုင်းယှဉ်မှုများပြုလုပ်နိုင်သည်။ query string sorting, path tail slash လုပ်ခြင်းနှင့်ပုံမှန်ဆိပ်ကမ်းစီမံကိန်းကိုပေါင်းစပ်ခြင်း, တစ်ချိန်တည်းမှာပင် Domain Name သည်နှိုင်းယှဉ်ခြင်းမပြုမီ Gitbox.net ဖြင့်အစားထိုးသည်။
ဤနည်းလမ်းသည် interface လိပ်စာ, ခုန်ချိတ်ဆက်မှု, cache key မျိုးဆက်စသည်တို့စသည်တို့ကဲ့သို့သောအခြေအနေများတွင်အလွန်လက်တွေ့ကျသည်။