طریقه پیمایش پوشه های تو در تو

PHP

توسط mahbobe-prog در 4 سال پیش
0 2k 13 4 سال پیش
mahbobe-progstackoverflowrezamaxreza-irdev
0

سلام من یگ پوشه دارم که داخل آن پوشه و فایل وجود داره میخوام که با php اون رو پیمایش کنه و اینقدر پوشه های تو در تو رو داخل بره تا به فایلا برسه برا این باید چیکار کنم؟

0

درود منظورتون اینه که تمام فایلهای موجود در یک فولدر و زیر فولدرهای اون رو پیدا کنه؟

برای اینکار از این کد استفاده کنید:

function listFolderFiles($dir){
    $ffs = scandir($dir);
    echo '<ol>';
    foreach($ffs as $ff){
        if($ff != '.' && $ff != '..'){
            echo '<li>'.$ff;
            if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
            echo '</li>';
        }
    }
    echo '</ol>';
}

listFolderFiles('MyDir');
0

واسه چی نتیجه اجرای تابع scandir این ارور رو میگیره

function listFolderFiles($dir= "ver1"){
    $ffs = scandir($dir);
	var_dump($ffs) ;}

> Warning: scandir(ver1,ver1) [function.scandir]: The system cannot find the file specified. (code: 2) in C:\xampp\htdocs\cms\CMSclass.php on line 58 Warning: scandir(ver1) [function.scandir]: failed to open dir: No such file or directory in C:\xampp\htdocs\cms\CMSclass.php on line 58 Warning: scandir() [function.scandir]: (errno 2): No such file or directory in C:\xampp\htdocs\cms\CMSclass.php on line 58 bool(false)
0

سلام چون مسیری که دادید وجود نداره

0

> سلام چون مسیری که دادید وجود نداره
سلام بله درسته ولی منظورم اینه که چجوری باید ادرس بدم
0

سلام خیلی سادست٬ آدرس فولدر رو نسبت به محل فایل php باید تعیین کنید. پس وقتی('listFolderFiles('MyDir یعنی فولدر MyDir در کنار فایلتون هست. توجه کنید که به حروف بزرگ و کوچک حساسه.

0

ممنون یه سوال دیگه من وقتی این کد رو اجرا میکنم فقط نتیجه اجرای اول حلقه foreach رو میاره در حالی که من همه مسیرا رو میخام باید چیکار کنم؟

function listFolderFiles($dir)
{
    $ffs = scandir($dir);
	var_dump($ffs) ;
	$files = array() ;
    foreach($ffs as $ff){
        if($ff != '.' && $ff != '..')
		{
            if(is_dir($dir.'/'.$ff))
			$files[] = $this -> listFolderFiles($dir.'/'.$ff);
        }
		return $files ; 
		
}
0

اینو دانلود کنید: [url]http://www.s1.softafzar.net/uploads/20140925-186-dirlist.zip[/url] dir.php رو اجرا کنید.

0

> اینو دانلود کنید: [url]http://www.s1.softafzar.net/uploads/20140925-186-dirlist.zip[/url] dir.php رو اجرا کنید.
ممنون ولی این کد رو داخل همین تاپیک بهم داده بودین . لطفا برا سوالم منو راهنمایی کنین
0

کدی که من کذاشتم لیست همه فایلها و فولدرها رو میاره کدی که شما دستکاری کردید رو ندیدم تو حلقه foreach بررسی میکنه در صورتی که تو لیست فولدر باشه باز زیر فولدر ها رو با فراخوانی تابع بصورت بازگشتی لیست میکنه پس اگر منظورتون نتیجه scandir هست باید هم اینطور باشه.

0

ممنون از پاسختون . حرفتون درسته اگه لطف کنین کدایی که گذاشتم رو نگاهی بکنین من منظورم اینه وقتی نتیجه رو return میکنم فقط نتیجه اجرای مرحله اول حلقه foreach رو میده در حالی که من همه مسیر ها رو میخام باید چیکار کنم؟

0

این کدتون مشکل داره یه براکت رو نبستید البته مشکل به این خاطر نیست. احتمالا return $files; رو داخل foreach گذاشتید؟ باید بیرون باشه!

0

سلام کد شما 2 مشکل دیگه هم داره :smilingsmiley:

  1. هنگام فراخوانی تابع مقدار آرایه files رو خالی کردید این باعث میشه تا شما نتایج قبلی رو نداشته باشید٬ از static استفاده کنید.
  2. تو تابع listFolderFiles هیچوقت نام فایل و فولدرها رو تو متغیر نریختید! $files[] = $ff

کد کامل:

<?php
function listFolderFiles($dir){
	static $files = array();
    $ffs = scandir($dir);
    foreach($ffs as $ff){
        if($ff != '.' && $ff != '..')
        {
			$files[] = $ff;
            if(is_dir($dir.'/'.$ff))
				listFolderFiles($dir.'/'.$ff);
        } 
	}
	return $files; 
}

$list = listFolderFiles('myDir');
var_dump($list);
0

از هر دوی شما بزرگوار ممنونم :rolleyessmileyanim:

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید