<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// ဒီစာရွက်စာတမ်းအကြောင်းပါ pathinfo Tail Slashes နှင့်အတူ function processing လမ်းကြောင်းများ၏သုတေသနနှင့်ခွဲခြမ်းစိတ်ဖြာခြင်း</span></span><span>
</span><span><span class="hljs-comment">//--------------------------------------------------</span></span><span>
<span class="hljs-comment">/**
* လမ်းကြောင်း string ကိုအဆုံးမှာ slash ရှိပါတယ်အခါ,PHP pathinfo ရလဒ်ကိုပြန်ပို့ရန် function ကိုများအတွက်အထူးအခြေအနေများနှင့်ကိုင်တွယ်အကြံပြုချက်များသည်အဘယ်အရာနည်း?
*
* အသုံးပြုမှုအတွက် PHP ဖိုင်လမ်းကြောင်းများနှင့်သက်ဆိုင်သော features များဖွံ့ဖြိုးဆဲ,`pathinfo()` ဒါဟာအလွန်အသုံးများသော built-in function ကိုဖြစ်ပါတယ်。၎င်းသည်လမ်းကြောင်း string ကိုခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်လမ်းကြောင်းရှိလမ်းညွှန်အမည်ကိုပြန်ပို့နိုင်သည်、အခြေခံဖိုင်အမည်、ဖိုင် extension များနှင့်အခြားသတင်းအချက်အလက်များ。မည်မှျပင်,လမ်းကြောင်း string ကို slashed သောအခါ(/ သို့မဟုတ် \)အဆုံးမှာ,ဤလုပ်ဆောင်မှု၏အပြုအမူသည်အလွန်အလိုလိုသိသောအထူးအခြေအနေများရှိလိမ့်မည်။。
*
* ဤဆောင်းပါးသည်ဤအခြေအနေများကိုဥပမာပေါ်မူတည်ပြီးအသေးစိတ်လေ့လာသုံးသပ်လိမ့်မည်,နှင့်သက်ဆိုင်ရာကိုင်တွယ်အကြံပြုချက်များပေးပါ,developer များ protection proture proture ကိုပိုမိုတဖြည်းဖြည်းကူညီပေးပါ。
*
* ### တစ်、pathinfo() လုပ်ဆောင်ချက်များ၏အခြေခံအသုံးပြုမှု
*
* `pathinfo()` 用于ပြန်လာတစ်个数组,လမ်းကြောင်း၏အောက်ပါအစိတ်အပိုင်းများပါရှိသည်:
*
* - dirname:မာတိကာ
* - basename:ဖိုင်အမည်အပိုင်း(extension ကိုနှင့်အတူ)
* - extension:မျဉ်းပြိုင်ယှဉ်တဲှတယ်လီဖုံး
* - filename:不extension ကိုနှင့်အတူ的ဖိုင်နာမည်
*
* နမူနာ:
* ```php
* pathinfo('/var/www/html/index.php');
* // ပြန်လာ:
* // [
* // 'dirname' => '/var/www/html',
* // 'basename' => 'index.php',
* // 'extension' => 'php',
* // 'filename' => 'index'
* // ]
* ```
*
* ### နှစ်、အမြီး slash ရှိခြင်းအခါအထူးအခြေအနေများ
*
* 当ခေြလမ်း以斜杠အဆုံးမှာ,ဥပမာအားဖြင့်:
*
* ```php
* pathinfo('/var/www/html/');
* ```
*
* ပြန်လာ结果ကဲ့သို့下(PHP 8.x):
*
* ```php
* [
* 'dirname' => '/var/www',
* 'basename' => 'html',
* 'extension' => '',
* 'filename' => 'html'
* ]
* ```
*
* အခုအချိန်တွင်,`pathinfo()` 会将倒数第နှစ်层目录(`html`)အဖြစ် `basename` ပြန်လာ,အဲဒီအစားမျှော်လင့်ထားသည့်အချည်းနှီးသောဖိုင်အမည်。တစ်နည်းပြောရရင်တော့,ဒါဟာအမြီးမျဉ်းကြောင်းလျစ်လျူရှု,把倒数第နှစ်级目录当成“ဖိုင်နာမည်”ကိုင်တွယ်ဖြေရှင်းသည်。
*
* 更极端တစ်点:
*
* ```php
* pathinfo('/');
* ```
*
* ပြန်လာ:
*
* ```php
* [
* 'dirname' => '/',
* 'basename' => '',
* ]
* ```
*
* အဓိပ်ပါယျမှာ `pathinfo()` တကယ်တော့ခွဲခြားလို့မရပါဘူး“ခေြလမ်း”ငြိမ်သော“စာချုပ်စာတမ်း”,ဒါဟာ string format ကိုအပေါ်အခြေခံပြီး parses ဖြစ်ပါတယ်。
*
* ### သုံး、အပြုအမူရှင်းပြချက်
*
* `pathinfo()` 并不检查ခေြလမ်း是否实际存在သို့မဟုတ်是စာချုပ်စာတမ်း,ဒါဟာ string ကို၏စင်ကြယ်သော parse ဖြစ်ပါတယ်。အဆုံး slevash ဖြစ်ပါက,它会将倒数第နှစ်级目录视为ဖိုင်နာမည်ကိုင်တွယ်ဖြေရှင်းသည်,因为它假设最后တစ်个非空段是“basename”。
*
* 所以对于以斜杠结尾的ခေြလမ်း,ဒါဟာတကယ်ကို slash လျစ်လျူရှု,把前တစ်部分当成有效ခေြလမ်း。
*
* ### လေး、ကိုင်တွယ်ဖြေရှင်းသည်建议
*
* **1. အသုံးပြုမှုအတွက် pathinfo() 前统တစ်清理ခေြလမ်း尾部的斜杠:**
*
* ကဲ့သို့果你明确只ကိုင်တွယ်ဖြေရှင်းသည်စာချုပ်စာတမ်းခေြလမ်း,而不是目录ခေြလမ်း,建议统တစ်အသုံးပြုမှုအတွက် `pathinfo()` 之前清除ခေြလမ်း末尾的斜杠:
*
* ```php
* $cleanPath = rtrim($path, '/\\');
* $info = pathinfo($cleanPath);
* ```
*
* ဒီသေချာ `basename` နှင့် `filename` 的含义始终指向真正的စာချုပ်စာတမ်း部分。
*
* **2. 对目录ခေြလမ်း的特殊判断:**
*
* ကဲ့သို့果ခေြလမ်း本身是目录,နှင့် slash နှင့်အတူအဆုံးသတ်,ဒါပေမယ့်သင်နေဆဲလမ်းညွှန်ကိုသိချင်တယ်“နံမယ်”,အသုံးပြုနိုင် `basename(rtrim($path, '/\\'))`,အပေါ်မှီခိုမ `pathinfo()` ရလဒ်များ。
*
* ```php
* $dirname = basename(rtrim($path, '/\\'));
* ```
*
* **3. 小心根ခေြလမ်း(/)的ကိုင်တွယ်ဖြေရှင်းသည်:**
*
* 对于根ခေြလမ်း `/`,`pathinfo()` ပြန်လာ的 `basename` ဒါဟာအချည်းနှီးသော string ကိုပါပဲ。ဒါဖြစ်နိုင်တယ် UI 展示သို့မဟုတ်逻辑判断时引发问题,需要单独做判断ကိုင်တွယ်ဖြေရှင်းသည်:
*
* ```php
* if ($path === '/') {
* $basename = '/';
* } else {
* $basename = basename(rtrim($path, '/\\'));
* }
* ```
*
* ### ငါး、အကျဉ်းချုပ်
*
* `pathinfo()` 是တစ်个方便的函数,但在ကိုင်တွယ်ဖြေရှင်းသည်带尾部斜杠的ခေြလမ်း时,它的行为可能与你的预期不တစ်致。理解它的工作原理并配合ခေြလမ်း清理函数(ကဲ့သို့ `rtrim()`)အသုံးပြု,可以避免很多ခေြလမ်း解析中的陷阱。
*
* 最安全的方式是先确定ခေြလမ်း的语义(是目录ငြိမ်သောစာချုပ်စာတမ်း),然后有针对性地ကိုင်တွယ်ဖြေရှင်းသည်ခေြလမ်း格式,避免错误地解读目录名为ဖိုင်နာမည်သို့မဟုတ်出现空 `basename` ပြနာ。
*/</span>
</span></span>