代码之家  ›  专栏  ›  技术社区  ›  Mark Lalor

PHP列出目录[duplicate]中的所有文件

  •  44
  • Mark Lalor  · 技术社区  · 14 年前


    Get the hierarchy of a directory with PHP
    Getting the names of all files in a directory with PHP

    我见过 列出目录中的所有文件 但是我怎样才能把所有的文件都列出来呢 ,就是这样 返回一个数组 比如说?

    $files = files("foldername");
    

    所以呢 $files

    array("file.jpg", "blah.word", "name.fileext")
    
    5 回复  |  直到 7 年前
        1
  •  101
  •   Gras Double    9 年前
    foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.')) as $filename)
    {
        // filter out "." and ".."
        if ($filename->isDir()) continue;
    
        echo "$filename\n";
    }
    


    PHP文档:

        2
  •  21
  •   Mike Cluck    9 年前

    function directoryToArray($directory, $recursive) {
        $array_items = array();
        if ($handle = opendir($directory)) {
            while (false !== ($file = readdir($handle))) {
                if ($file != "." && $file != "..") {
                    if (is_dir($directory. "/" . $file)) {
                        if($recursive) {
                            $array_items = array_merge($array_items, directoryToArray($directory. "/" . $file, $recursive));
                        }
                        $file = $directory . "/" . $file;
                        $array_items[] = preg_replace("/\/\//si", "/", $file);
                    } else {
                        $file = $directory . "/" . $file;
                        $array_items[] = preg_replace("/\/\//si", "/", $file);
                    }
                }
            }
            closedir($handle);
        }
        return $array_items;
    }
    
        3
  •  4
  •   Chuck Vose    14 年前

    我想你在找 php's glob function . 你可以打电话 glob(**) 获取递归文件列表。

    编辑:我意识到我的glob并不能在所有系统上都可靠地工作,所以我提交了这个更漂亮的版本。

    function rglob($pattern='*', $flags = 0, $path='')
    {
        $paths=glob($path.'*', GLOB_MARK|GLOB_ONLYDIR|GLOB_NOSORT);
        $files=glob($path.$pattern, $flags);
        foreach ($paths as $path) { $files=array_merge($files,rglob($pattern, $flags, $path)); }
        return $files;
    }
    

    发件人: http://www.phpfreaks.com/forums/index.php?topic=286156.0

        4
  •  2
  •   user669677 user669677    12 年前
    function files($path,&$files = array())
    {
        $dir = opendir($path."/.");
        while($item = readdir($dir))
            if(is_file($sub = $path."/".$item))
                $files[] = $item;else
                if($item != "." and $item != "..")
                    files($sub,$files); 
        return($files);
    }
    print_r(files($_SERVER['DOCUMENT_ROOT']));
    
        5
  •  0
  •   Community datashaman    7 年前

    我需要实现对给定目录的读取,并依赖 Chuck Vose ,我创建此页面是为了读取依赖JQuery的目录:

    <?php
    
    /**
     * Recovers folder structure and files of a certain path
     * 
     * @param string $path Folder where files are located
     * @param string $pattern Filter by extension
     * @param string $flags Flags to be passed to the glob
     * @return array Folder structure
     */
    function getFolderTree($path)
    {
        //Recovers files and directories
        $paths = glob($path . "*", GLOB_MARK | GLOB_ONLYDIR | GLOB_NOSORT);
        $files = glob($path . "*");
    
        //Traverses the directories found
        foreach ($paths as $key => $path)
        {
            //Create directory if exists
            $directory = explode("\\", $path);
            unset($directory[count($directory) - 1]);
            $directories[end($directory)] = getFolderTree($path);
    
            //Verify if exists files
            foreach ($files as $file)
            {
                if (strpos(substr($file, 2), ".") !== false)
                    $directories[] = substr($file, (strrpos($file, "\\") + 1));
            }
        }
    
        //Return the directories
        if (isset($directories))
        {
            return $directories;
        }
        //Returns the last level of folder
        else
        {
            $files2return = Array();
            foreach ($files as $key => $file)
                $files2return[] = substr($file, (strrpos($file, "\\") + 1));
            return $files2return;
        }
    }
    
    /**
     * Creates the HTML for the tree
     * 
     * @param array $directory Array containing the folder structure
     * @return string HTML
     */
    function createTree($directory)
    {
        $html = "<ul>";
        foreach($directory as $keyDirectory => $eachDirectory)
        {
            if(is_array($eachDirectory))
            {
                $html .= "<li class='closed'><span class='folder'>" . $keyDirectory . "</span>";
                $html .= createTree($eachDirectory);
                $html .=  "</li>";
            }
            else
            {
                $html .= "<li><span class='file'>" . $eachDirectory . "</span></li>";
            }
        }
        $html .= "</ul>";
    
        return $html;
    }
    
    //Create output
    $directory = getFolderTree('..\videos');
    $htmlTree = createTree($directory["videos"]);
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
            <title>PHP Directories</title>
    
            <link rel="stylesheet" href="http://jquery.bassistance.de/treeview/jquery.treeview.css" />
            <link rel="stylesheet" href="http://jquery.bassistance.de/treeview/demo/screen.css" />
    
            <script src="http://jquery.bassistance.de/treeview/lib/jquery.js" type="text/javascript"></script>
            <script src="http://jquery.bassistance.de/treeview/lib/jquery.cookie.js" type="text/javascript"></script>
            <script src="http://jquery.bassistance.de/treeview/jquery.treeview.js" type="text/javascript"></script>
    
            <script type="text/javascript" src="http://jquery.bassistance.de/treeview/demo/demo.js"></script>
    
        </head>
        <body>
            <div id="main">
                <ul id="browser" class="filetree">
                    <?php echo $htmlTree;?>
                </ul>
            </div>
        </body>
    </html>
    

    使用JQuery的树中使用的结构,该站点被取为: http://jquery.bassistance.de/treeview/demo/