PHP တွင် စတူးတူးရေး function ကိုသတ်မှတ်ထားသော directory တွင်ဖိုင်များနှင့်ဖိုင်တွဲများစာရင်းကိုဖတ်ရန်အသုံးပြုသည်။ သို့သော်တစ်ခါတစ်ရံကျွန်ုပ်တို့သည်ပြ a နာတစ်ခုနှင့်ကြုံတွေ့ရသည်။ scandir သည် လျှို့ဝှက်ဖိုင်များ (အစက်များဖြင့်စတင်သည် ) ။ ဤဆောင်းပါးသည်အကြောင်းရင်းများကိုအသေးစိတ်လေ့လာပြီးဤပြ problem နာအတွက်လက်တွေ့ကျသောစုံစမ်းစစ်ဆေးမှုနှင့်ဆုံးဖြတ်ချက်များကိုမျှဝေပါမည်။
ပုံမှန်အားဖြင့် scandir function သည် directory ရှိဖိုင်များနှင့်ဖိုင်တွဲများကိုလျှို့ဝှက်ဖိုင်များအပါအ 0 င် directory ရှိဖိုင်များနှင့်ဖိုင်တွဲများကိုပြန်ပို့သည်။ သို့သော်လျှို့ဝှက်ဖိုင်များစာရင်းမ 0 င်ကြောင်းသင်တွေ့ရှိပါကဖြစ်နိုင်သောအကြောင်းပြချက်များမှာအောက်ပါအတိုင်းဖြစ်သည် -
filtered လျှို့ဝှက်ဖိုင်များ <br> ဖိုင်များအတွက် code အတွက် code အတွက်အခြေအနေများ filtering အခြေအနေများရှိပါတယ် ။ ဝှက်ထားသောဖိုင်များကိုဖယ်ထုတ်ပစ်စေသည့်အရာဖြစ်သည်။
ဖိုင်ခွင့်ပြုချက်ပြ issues နာများ
PHP Runtime သည်လျှို့ဝှက်ဖိုင်များကိုဖတ်ရန်ခွင့်ပြုချက်မရှိပါ။
operating system သို့မဟုတ် file system ခြားနားချက် <br> အချို့သောစနစ်များသည်လျှို့ဝှက်ဖိုင်များကိုကွဲပြားစွာကိုင်တွယ်နိုင်သည်, တိကျသောပတ် 0 န်းကျင်တွင်ဖော်ပြထားသောခြွင်းချက်များကိုပြသနိုင်သည်။
ထိုကဲ့သို့သော cache သို့မဟုတ်သင်္ကေတ links အဖြစ်အထူးအခြေအနေများ <br> <br> တစ်ခါတစ်ရံဖိုင်စနစ် Cache သို့မဟုတ်သင်္ကေတ link တစ်ခု၏တည်ရှိမှုသည်ဖိုင်စာရင်းကိုသက်ရောက်နိုင်သည်။
အဆိုပါ စန္ဒနဒိန် function တွင်လျှို့ဝှက်ဖိုင်များပါရှိသည်, သို့သော်ရလဒ်မှာရလဒ်မှာအထူးလမ်းညွှန်နှစ်ခုပါဝင်သည် ။ နှင့် .. ဥပမာများမှာအောက်ပါအတိုင်းဖြစ်သည် -
<?php
$files = scandir('/path/to/directory');
foreach ($files as $file) {
echo $file . PHP_EOL;
}
?>
ဤကုဒ်သည်လျှို့ဝှက်ဖိုင်များအပါအ 0 င်ဖိုင်များအားလုံးကိုစာရင်းပြုစုထားသည်။ ဒါပေမယ့်သင် filter လုပ်ချင်ရင် ... ... , မင်းဒါကိုရေးနိုင်တယ်။
<?php
$files = scandir('/path/to/directory');
foreach ($files as $file) {
if ($file === '.' || $file === '..') continue;
echo $file . PHP_EOL;
}
?>
အကယ်. သင်သည်လျှို့ဝှက်ဖိုင်များကိုအထူးသဖြင့်စစ်ထုတ်လိုပါကသင်အသုံးပြုနိုင်သည်။
<?php
$files = scandir('/path/to/directory');
foreach ($files as $file) {
if ($file === '.' || $file === '..') continue;
if ($file[0] === '.') {
echo "ဖိုင်များကိုဖျောက်ထားပါ: " . $file . PHP_EOL;
} else {
echo "ပုံမှန်ဖိုင်များ: " . $file . PHP_EOL;
}
}
?>
စနဗတီး သို့သွားသောလမ်းကြောင်းသည်မှန်ကန်ပြီးလက်လှမ်းမီကြောင်းသေချာပါစေ။ အတည်ပြုရန် is_dir ကို သုံးနိုင်သည်။
<?php
$dir = '/path/to/directory';
if (!is_dir($dir)) {
die("အဆိုပါ directory မတည်ရှိပါဘူးသို့မဟုတ်လက်လှမ်းမမှီပါဘူး");
}
$files = scandir($dir);
?>
PHP ကိုအသုံးပြုနေသောအသုံးပြုသူသည် (ဤကဲ့သို့သော www-data or apache ) သည် directory နှင့် files များကိုဖတ်ရန်ခွင့်ပြုချက်ရှိမရှိ။
စစ်ဆေးရန် is_readable () function ကိုသုံးနိုင်သည်။
<?php
if (!is_readable($dir)) {
die("ဒီလမ်းညွှန်ကိုဖတ်ရန်ခွင့်ပြုချက်မရှိပါ");
}
?>
code တွင်ယုတ္တိဗေဒရှိနေသေးသည့်လျှို့ဝှက်ဖိုင်များနှင့်တူသည်ကိုစစ်ဆေးပါ။ အချို့သောစီမံကိန်းများကိုလျှို့ဝှက်ဖိုင်များကိုပြသခြင်းကိုရှောင်ရှားရန်အတိအလင်း filtered ပြုလုပ်နိုင်သည်။
စနဗွတ် အပြင် PHP သည် File filtering နှင့်ခွင့်ပြုချက်ပြ issues နာများကိုပိုမိုအဆင်ပြေစွာကိုင်တွယ်နိုင်သည့်ပိုမိုလွယ်ကူစွာကြားဖြတ် iterator နည်းလမ်းကိုလည်းထောက်ပံ့ပေးသည်။
ဥပမာ -
<?php
$dir = '/path/to/directory';
$iterator = new FilesystemIterator($dir);
foreach ($iterator as $fileinfo) {
$filename = $fileinfo->getFilename();
if ($filename[0] === '.') {
echo "ဖိုင်များကိုဖျောက်ထားပါ: $filename" . PHP_EOL;
} else {
echo "ပုံမှန်ဖိုင်များ: $filename" . PHP_EOL;
}
}
?>
scandir တွင်လျှို့ဝှက်ဖိုင်များတွင်ပုံမှန်အားဖြင့်ပါ 0 င ် သည် ။
လမ်းကြောင်းသည်မှန်ကန်ကြောင်းစစ်ဆေးပြီး PHP သည်ဖိုင်ကိုဖတ်ရန်ခွင့်ပြုချက်ရှိသည်။
ကုဒ်ယုတ္တိဗေဒကိုမှားယွင်းစွာဖယ်ထုတ်ထားခြင်းရှိမရှိစစ်ဆေးပါ။
file စနစ်များ ကဲ့သို့သောအဆင့်မြင့်နည်းလမ်းများနှင့်ပေါင်းစပ်ပြီးဖိုင်စာရင်းများကိုသင်လည်ပတ်နိုင်သည့်ဖိုင်စာရင်းများကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်နိုင်သည်။
ဒီနည်းလမ်းတွေက scandir ဖိုင်တွေကိုမစာရင်းမသွင်းနိုင်တဲ့ပြ problem နာကိုဖြေရှင်းနိုင်လိမ့်မယ်လို့မျှော်လင့်ပါတယ်။
<?php
$directory = '/var/www/html';
if (!is_dir($directory) || !is_readable($directory)) {
die("လမ်းညွှန်သည်မတည်ရှိပါသို့မဟုတ်မဖတ်ပါ");
}
$files = scandir($directory);
foreach ($files as $file) {
if ($file === '.' || $file === '..') continue;
echo $file . PHP_EOL;
}
?>