簡體   English   中英

列出所有使用PHP的子目錄和文件

[英]List all sub-directories and files with PHP

我正在嘗試構造一個函數,該函數將從URL中回顯所有子目錄和文件的無序列表。

我知道這里有很多例子,但是我正在努力尋找合適的東西。

這是我到目前為止的內容:

$dir = "an/example/directory";

echo "<ul id='folderList'>";
$dirArr = dirToArray($dir);
listDir($dirArr);
echo "</ul>";

第一個函數以遞歸方式搜索文件和文件夾,並將它們排序為多維數組:

function dirToArray($dir)
{
    $result = array();
    $cdir = scandir($dir);
    foreach($cdir as $key => $value) {
        if (!in_array($value, array(".", ".."))) {
            if(is_dir($dir . DIRECTORY_SEPARATOR . $value)) {
                $result[$dir . DIRECTORY_SEPARATOR . $value] = $this->dirToArray($dir . DIRECTORY_SEPARATOR . $value);
            } else {
                $result[$dir . DIRECTORY_SEPARATOR . $value] = $dir . DIRECTORY_SEPARATOR . $value;
            }
          }
    }

    return $result;
}

現在,這是我遇到的問題。 第二個函數應該遍歷多數組並相應地回顯其內容。

function listDir($multiArr) 
{
    foreach ($multiArr as $key => $value) {
        if (is_array($value)) {
            echo '<li class="sub-directory"><span>'.basename($key).'</span>';
            echo '<ul>';
            listDir($multiArr[$key]);
            echo '</ul>';
        } else {
            echo '<li class="file"><span>'.basename($value).'</span>';
        }
          echo '</li>';
    }
}

但是,第二個功能似乎沒有按預期工作。 我不確定為什么,但是遞歸循環似乎有麻煩。

無論如何,想法是,一旦運行了兩個函數,輸出應如下所示:

<ul id='folderList'>
    <li class="sub-directory"><span>sub-directory-name</span>
        <ul>
            <li class="file><span>fileName1</span></li>
            <li class="file><span>fileName2</span></li>
        </ul>
    </li>
    <li class="file><span>fileName3</span></li>
</ul>

這是獲取主目錄和子目錄的簡單功能

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

listdir('Main Dir');

您可以使用bekow函數以表格格式列出...

function dirToArray($dir)
        {
            $cdir = scandir($dir);
            echo "<table>";
            foreach ($cdir as $key => $value)
            {
                echo "<tr>";
                if (!in_array($value, array(".")))
                {
                    if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
                    {
                            $path = $dir . DIRECTORY_SEPARATOR . $value;
                            echo "<td><a href='file_name.php?dir=$path' >" . $value . "</a></td>";

                    }
                    else
                    {
                        $path = $dir . DIRECTORY_SEPARATOR . $value;
                        echo "<td></td><td><a>". $value . "</a></td>";
                    }
                }
                echo "</tr>";
            }
            echo "</table>";

        }

dirToArray($dir);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM