چطور می تونم یه اسکریپت خوب برای خوندم محتویات پوشه ها بنویسم

phpweb

Active Member
من می خوام یه اسکریپت بنویسم که بتونه محتویات درون پوشه های مختلف رو بخونه و نمایش بده.

من اسکریپت رو توی مسیر http://localhost/admin/file/ قرار دادم و می خوام محتویات پوشه all که در مسیر http://localhost/admin/file/all/ قرار داره رو بخونم و به کاربر نشون بدم.


من هر کاری کردم نتونستم یه سیستم خوب طراحی کنم و مدام با توابع، is_file و is_dir به مشکل برخورد می کنم.

حدس می زنم که این مشکل بخاطر عدم آدرس دهی مناسب بوجود می یاد.


کدی که خودم نوشتم رو در ادامه قرار دادم. این کد کار نمی کنه. لطفا این کد رو اصلاح کنید تا بتونم بخوبی ازش استفاده کنم یا اینکه یکی از کدهای خودتون رو برام ارسال کنید.

PHP:
$path1 = dirname($_SERVER[SCRIPT_NAME]);
$path='../..'."$path1".'/all/';
$opendir = opendir($path);
while ($readdir = readdir($opendir))
{
        if(is_file($readdir))
        {
            echo '<div class="show_file">';
            echo "$readdir".'<br />';
            $size=filesize( $readdir)/1024;
            $round = round($size,1);
            echo "$round".'KB'.'<br />';
            echo "<a href=\"$url\">URL</a>";
            echo '</div>';
        }
        elseif(is_dir($readdir))
        {
            echo '<div class="show_file">';
            $url="$path"."$readdir";
            echo "<a href=\"$url\">URL</a>";
            echo '</div>';
        }
}
 
آخرین ویرایش:

ziXet

مدیر انجمن PHP/MYSQL
شما باید یه تابع به صورت بازگشتی برای این کار بنویسی
PHP:
<?php
function get_dirs($dir){
    global $dirs;
    if (!isset($dirs)){$dirs = '';}
    if(substr($dir,-1) !== '\\'){$dir .= '\\';}
    if ($handle = opendir($dir)){
        while (false !== ($file = readdir($handle))){
            if ($file != "." && $file != ".."){
                clearstatcache();
                $dirs .= $file . "\n";
        if(filetype($dir.$file) === 'dir')
            get_dirs($dir . $file);
            }
        }
        closedir($handle);
    }
    return $dirs;
}
?>
 

phpweb

Active Member
شما باید یه تابع به صورت بازگشتی برای این کار بنویسی
PHP:
<?php
function get_dirs($dir){
    global $dirs;
    if (!isset($dirs)){$dirs = '';}
    if(substr($dir,-1) !== '\\'){$dir .= '\\';}
    if ($handle = opendir($dir)){
        while (false !== ($file = readdir($handle))){
            if ($file != "." && $file != ".."){
                clearstatcache();
                $dirs .= $file . "\n";
        if(filetype($dir.$file) === 'dir')
            get_dirs($dir . $file);
            }
        }
        closedir($handle);
    }
    return $dirs;
}
?>


من تابع شما رو به صورت زیر استفاده کردم و با هشدار مواجه شدم.

من اسکریپت رو توی مسیر http://localhost/admin/file/ قرار دادم و می خوام محتویات پوشه all که در مسیر http://localhost/admin/file/all/ قرار داره رو بخونم و به کاربر نشون بدم.

فکر کنم توی آدرس دهی مشکل داشته باشم. لطفا راهنمایی کنید.


PHP:
function get_dirs($dir){
    global $dirs;
    if (!isset($dirs)){$dirs = '';}
    if(substr($dir,-1) !== '\\'){$dir .= '\\';}
    if ($handle = opendir($dir)){
        while (false !== ($file = readdir($handle))){
            if ($file != "." && $file != ".."){
                clearstatcache();
                $dirs .= $file . "\n";
        if(filetype($dir.$file) === 'dir')
            get_dirs($dir . $file);
            }
        }
        closedir($handle);
    }
    return $dirs;
}

$path1 = dirname($_SERVER[SCRIPT_NAME]);
$path='../..'."$path1".'/all/';
$opendir = opendir($path);
while ($readdir = readdir($opendir))
{
$file  =  get_dirs($readdir);    
echo "$file";

}
هشدار:

PHP:
Warning:  opendir(news\) [function.opendir]: failed to open dir: No such file or directory in C:\xampp\htdocs\admin\file\file.php on line 25
 
آخرین ویرایش:

ziXet

مدیر انجمن PHP/MYSQL
این تابع فقط نام یک دایرکتوری رو میگیره و تمام پوشه ها و فایلهای درونش رو استخراج میکنه
فقط کافیه اسم دایرکتوری رو بهش بدی
PHP:
<?
function get_dirs($dir){
    global $dirs;
    if (!isset($dirs)){$dirs = '';}
    if(substr($dir,-1) !== '\\'){$dir .= '\\';}
    if ($handle = opendir($dir)){
        while (false !== ($file = readdir($handle))){
            if ($file != "." && $file != ".."){
                clearstatcache();
                $dirs .= $file . "<br/>";
                if(filetype($dir.$file) === 'dir')
                    get_dirs($dir . $file);
            }
        }
        closedir($handle);
    }
    return $dirs;
}
echo get_dirs("directory1");

?>
 

phpweb

Active Member
این تابع فقط نام یک دایرکتوری رو میگیره و تمام پوشه ها و فایلهای درونش رو استخراج میکنه
فقط کافیه اسم دایرکتوری رو بهش بدی
PHP:
<?
function get_dirs($dir){
    global $dirs;
    if (!isset($dirs)){$dirs = '';}
    if(substr($dir,-1) !== '\\'){$dir .= '\\';}
    if ($handle = opendir($dir)){
        while (false !== ($file = readdir($handle))){
            if ($file != "." && $file != ".."){
                clearstatcache();
                $dirs .= $file . "<br/>";
                if(filetype($dir.$file) === 'dir')
                    get_dirs($dir . $file);
            }
        }
        closedir($handle);
    }
    return $dirs;
}
echo get_dirs("directory1");

?>

من یکی دو روزه که درگیر این تابع شدم تا بتونم محتویات یه پوشه رو نمایش بدم.

تابعی که ارسال کردید تست شده هست؟ چون این تابع کار نمی کنه. ارور هم نمی ده.

تابع شما رو به این صورت استفاده کردم.
یبار ادرس ./all یبار آدرس ./all/ یبار آدرس all و یبار هم ادرس http://localhost/admin/file/all رو به تابع شما دادم ولی هیچ نتیجه ای نگرفتم. اینبار حتی ارور یا هشدار هم نشون نمی داد.

بنظرتون مشکل کار کجاست؟

PHP:
$path='http://localhost/admin/file/all';
function get_dirs($path){
    global $dirs;
    if (!isset($dirs)){$dirs = '';}
    if(substr($dir,-1) !== '\\'){$dir .= '\\';}
    if ($handle = opendir($dir)){
        while (false !== ($file = readdir($handle))){
            if ($file != "." && $file != ".."){
                clearstatcache();
                $dirs .= $file . "<br/>";
                if(filetype($dir.$file) === 'dir')
                    get_dirs($dir . $file);
            }
        }
        closedir($handle);
    }
    return $dirs;
}
echo get_dirs("directory1");
 

ziXet

مدیر انجمن PHP/MYSQL
شما مطمئنی php کار میکنی؟!!
وقتی یه تابع درست شده باید تابع رو فراخونی کنید!!
تازه باید آدرس local فولدر رو بدید نه آدرس به صورت :
PHP:
http://.....

تو اون مثالی که من نوشتم فولدر به نام directory1 که در کنار فایل اصلی هست جستجو میشه
 

MMSHFE

Active Member
با سلام، كد زير رو امتحان كنيد.
روش استفاده از اون رو هم توي همون فايل گذاشتم.
موفق و مؤِيد باشيد.
 

پیوست ها

  • printdir.zip
    593 بایت · بازدیدها: 3

lepi

Member
شما باید یه تابع به صورت بازگشتی برای این کار بنویسی
PHP:
<?php
function get_dirs($dir){
    global $dirs;
    if (!isset($dirs)){$dirs = '';}
    if(substr($dir,-1) !== '\\'){$dir .= '\\';}
    if ($handle = opendir($dir)){
        while (false !== ($file = readdir($handle))){
            if ($file != "." && $file != ".."){
                clearstatcache();
                $dirs .= $file . "\n";
        if(filetype($dir.$file) === 'dir')
            get_dirs($dir . $file);
            }
        }
        closedir($handle);
    }
    return $dirs;
}
?>

تشکر مجدد از ziXet . فکر نکنم برای همچین درخواستی، فرمانی خلاصه تر از این نوشت:rose:
 

جدیدترین ارسال ها

بالا