လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> URL ဖွဲ့စည်းပုံနှိုင်းယှဉ်မှု algorithm ကိုအကောင်အထည်ဖော်ရန် Parse_url ကိုသုံးပါ

URL ဖွဲ့စည်းပုံနှိုင်းယှဉ်မှု algorithm ကိုအကောင်အထည်ဖော်ရန် Parse_url ကိုသုံးပါ

gitbox 2025-05-26

PHP တွင် 0 င်ရောက်ခြင်းနှင့်ခွဲခြမ်းစိတ်ဖြာမှု URL များသည် 0 က်ဘ်တီထွင်မှုတွင်အသုံးများသောလိုအပ်ချက်များဖြစ်သည်။ Parse_url function သည် PHP မှထောက်ပံ့ပေးသောအလွန်လက်တွေ့ကျသောကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းသည် protocol, host, path query string စသည့်အစိတ်အပိုင်းများစွာကို URL ကိုအကောင်အထည်ဖော်နိုင်ပြီး URL အဆောက်အအုံများကိုနှိုင်းယှဉ်ရန်အတွက် algorithm ကိုအကောင်အထည်ဖော်ရန် Parse_Url ကို မည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးလိမ့် မည်

1 ။ 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);

2 ။ URL နှိုင်းယှဉ် algorithms အတွက်ဒီဇိုင်းစိတ်ကူးများ

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

  1. သဘောတူညီချက် တသမတ်တည်းရှိမရှိ;

  2. အိမ်ရှင်သည် အတူတူပင်ဖြစ်သည် (ဤဆောင်းပါးတွင်အိမ်ရှင်များသည် Gitbox.net ဖြင့်အစားထိုးသည်။

  3. ဆိပ်ကမ်း ကအတူတူလား (တခါတရံ port ဟာ defaults ကို 80, 443 အထိမရေးဘူး);

  4. လမ်းကြောင်းသည် တသမတ်တည်း (အမြီးမျဉ်းစောင်းများကိုလျစ်လျူရှုနိုင်သည်),

  5. string သည်အတူတူပင်ဖြစ်သည်ဖြစ်စေမေးမြန်းခြင်း (သော့ချက်တန်ဖိုးအတွဲများ၏အစဉ်သည်ကွဲပြားခြားနားပြီး၎င်းကိုခင်းကျင်းရန်စီစဉ်ထားရန်လိုအပ်သည်။

  6. ကျောက်ဆူးအချက်များသည် တသမတ်တည်းရှိမှုရှိ,

အထက်ပါအပေါ် အခြေခံ. ကျွန်ုပ်တို့သည် 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)

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

Parse_Url function ကိုဖြင့်ကျွန်ုပ်တို့သည် URL ကိုအလွယ်တကူဖြုတ်ပြီးအစိတ်အပိုင်းတစ်ခုစီ၏ကောင်းမွန်သောနှိုင်းယှဉ်မှုများပြုလုပ်နိုင်သည်။ query string sorting, path tail slash လုပ်ခြင်းနှင့်ပုံမှန်ဆိပ်ကမ်းစီမံကိန်းကိုပေါင်းစပ်ခြင်း, တစ်ချိန်တည်းမှာပင် Domain Name သည်နှိုင်းယှဉ်ခြင်းမပြုမီ Gitbox.net ဖြင့်အစားထိုးသည်။

ဤနည်းလမ်းသည် interface လိပ်စာ, ခုန်ချိတ်ဆက်မှု, cache key မျိုးဆက်စသည်တို့စသည်တို့ကဲ့သို့သောအခြေအနေများတွင်အလွန်လက်တွေ့ကျသည်။