|
سلام کد زیر و چطوری تغییر بدم که لیست دایرکتوری ها رو بدون زیر دایرکتوری بهم بده؟ متشکر
function dirList ($directory) {
$dir = opendir($directory);
while ($file = readdir($dir )) {
echo "<div><a href='?targ=" . $directory . DIRECTORY_SEPARATOR . "$file'>$file</a></div>";
}
closedir($dir);
return $results;
}
سلام
دوست عزیز این تابع عملا به شما زیر دایرکتوری برنمیگردونه و فقط دایرکتوریهای سطح اول در دایرکتوری ارسال شده به تابع رو برمیگردونه.
درضمن اون return $results هم که نوشتید، بود یا نبودش فرقی نداره در این تابع.
برای بدست آوردن لیست دایرکتوریهایی که در سطح اول دایرکتوری مورد نظر وجود دارند میتونید به صورت ریز عمل کنید:
foreach(glob('*', GLOB_ONLYDIR) as $dir) {
echo $dir;
}
توجه داشته باشید که علامت * به معنی تمام دایرکتوری ها میباشد و اگر دایرکتوری شما home/. میباشد، شما باید آنرا به این صورت بنویسید: */home/.
بله حواسم به return نبود، تابع بالا یک حلقه به تعداد تکرار کل فایل های(نه زیرفایل ها) موجود در مسیر ایجاد میکنه و عملا آدرس فولدر ها رو در نمیاره و فقط آدرس فایل های مسیر رو درمیاره. آیا تابعی برای این کار سراغ دارید؟
حالا اگر بخوایم فقط اسم دایرکتوری رو برگردونه(نه با مسیرش) باید دستی مسیر اولش رو حذف کنیم؟(آخه لوکال و ریموت فرق میکنه و مقدار لازم برای حذف متغیر میشه)
میتونی از Regular Expression استفاده کنی و عبارت بعد از آخرین slash رو به عنوان نام دایرکتوری بگیری و یا مسیر دایرکتوری ریشه که به تابع میدی رو از نتیجه با preg_replace حذف کنی. اینجوری داینامیک بودن تابع هم حفظ میشه.
از ltrim استفاده کردم ولی چون اسلش لوکال با اسلش ریموت نمیخونه، وقتی کاراکتر آخر قبل از اسلش مسیر لازم برای حذف با کاراکتر اول فولدر برابره؛ یک کاراکتر از ابتدای اسم فولدر کم میکنه ;)
منظور شما از اینکه اسلش لوکال با سرور یکی نیست چیه؟
بهتره از str_replace استفاده کنید،فکر نمیکنم نیاز به چیزه دیگه ای داشته باشید.
str_replace('./home/hamcodi/' ,NULL ,'./home/hamcodi/dir');
و نتیجه میشه
dir
اسلش یکیش / هست و اون یکی برعکسش. روی لوکال یک قسمت از آدرس سپریتورش leftslash هست و یک قسمت دیگه با rightslash سپریت میشه. str_replace جواب داد، ممنونتون
دوست عزیز leftslash و rightslash نداریم. slash و backslash تلفظ میشه.شما در لوکال دارید از ویندوز استفاده میکنید و در سرور از لینوکس. برای برطرف شدن این مشکل میتونید از ثابت(DIRECTORY_SEPARATOR) برای داینامیک کردن این موضوع استفاده کنید.
'home'. DIRECTORY_SEPARATOR .'omid'. DIRECTORY_SEPARATOR .'dir'
بله ولی این دوتا لفظ جدیدن;) (بعدها به گوشتون میخوره) برای DIRECTORY_SEPARATOR هم باید دونه به دونه میون دایرکتوری ها استفاده کرد که خوب پویایی رو کلا از بین میبره مگر اینکه یه حلقه بنویسیم که خودش جایگزین کنه که اون هم تابع زمانی str_replace بهتره و بهینه تر درمیاد. در کل متشکر از راهنماییتون