سلام
من یگ پوشه دارم که داخل آن پوشه و فایل وجود داره میخوام که با php اون رو پیمایش کنه و اینقدر پوشه های تو در تو رو داخل بره تا به فایلا برسه برا این باید چیکار کنم؟
درود
منظورتون اینه که تمام فایلهای موجود در یک فولدر و زیر فولدرهای اون رو پیدا کنه؟
برای اینکار از این کد استفاده کنید:
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');
واسه چی نتیجه اجرای تابع scandir این ارور رو میگیره
function listFolderFiles($dir= "ver1"){
$ffs = scandir($dir);
var_dump($ffs) ;}
<br>
> 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)
<br> سلام چون مسیری که دادید وجود نداره
سلام
خیلی سادست٬ آدرس فولدر رو نسبت به محل فایل php باید تعیین کنید. پس وقتی('listFolderFiles('MyDir یعنی فولدر MyDir در کنار فایلتون هست.
توجه کنید که به حروف بزرگ و کوچک حساسه.
ممنون یه سوال دیگه
من وقتی این کد رو اجرا میکنم فقط نتیجه اجرای اول حلقه 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 ;
}
اینو دانلود کنید: [url]http://www.s1.softafzar.net/uploads/20140925-186-dirlist.zip[/url]
dir.php رو اجرا کنید.
کدی که من کذاشتم لیست همه فایلها و فولدرها رو میاره کدی که شما دستکاری کردید رو ندیدم
تو حلقه foreach بررسی میکنه در صورتی که تو لیست فولدر باشه باز زیر فولدر ها رو با فراخوانی تابع بصورت بازگشتی لیست میکنه
پس اگر منظورتون نتیجه scandir هست باید هم اینطور باشه.
ممنون از پاسختون . حرفتون درسته
اگه لطف کنین کدایی که گذاشتم رو نگاهی بکنین
من منظورم اینه وقتی نتیجه رو return میکنم فقط نتیجه اجرای مرحله اول حلقه foreach رو میده در حالی که من همه مسیر ها رو میخام باید چیکار کنم؟
این کدتون مشکل داره یه براکت رو نبستید البته مشکل به این خاطر نیست.
احتمالا return $files; رو داخل foreach گذاشتید؟ باید بیرون باشه!
سلام
کد شما 2 مشکل دیگه هم داره :smilingsmiley:
- هنگام فراخوانی تابع مقدار آرایه files رو خالی کردید این باعث میشه تا شما نتایج قبلی رو نداشته باشید٬ از static استفاده کنید.
- تو تابع 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);
از هر دوی شما بزرگوار ممنونم :rolleyessmileyanim:
سوال برنامه نویسی دارید؟
ندونستن عیب نیست، نپرسیدن چرا!