45 votes

PHP liste de tous les fichiers dans le répertoire

Double Possible:
Obtenir la hiérarchie d'un répertoire avec PHP
Obtenir les noms de tous les fichiers dans un répertoire avec PHP

J'ai vu des fonctions de la liste de tous les fichiers dans un répertoire , mais comment puis-je liste tous les fichiers dans les sous-répertoires, de sorte qu'il renvoie un tableau comme?

$files = files("foldername");

Donc, $files est quelque chose de semblable à

array("file.jpg", "blah.word", "name.fileext")

100voto

Matthew Points 25748
<?php
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.')) as $filename)
{
        echo "$filename\n";
}
?>

21voto

Ruel Points 6140

Si vous êtes à la recherche pour récursive inscription à l'annuaire?

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;
}

http://snippets.dzone.com/posts/show/155

4voto

Chuck Vose Points 3235

Je pense que vous êtes à la recherche pour le php de la fonction glob. Vous pouvez appeler glob(**) pour obtenir une récursif de la liste des fichiers.

EDIT: j'ai réalisé que mon glob ne fonctionne pas de manière fiable, sur tous les systèmes, donc je soumet cette bien jolie version de la accepté de répondre.

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;
}

de: http://www.phpfreaks.com/forums/index.php?topic=286156.0

2voto

2astalavista Points 7092
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']));

0voto

KiKo Points 9

J'avais besoin de mettre en œuvre la lecture d'un répertoire donné, et en s'appuyant sur la fonction de Chuck Vose, j'ai créé cette page pour lire les répertoires en s'appuyant sur 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>

La structure utilisée dans l'arbre avec JQuery, le site a été pris: http://jquery.bassistance.de/treeview/demo/

J'espère que c'est utile!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X