PHP listet alle Dateien im Verzeichnis auf [duplicate]

Lesezeit: 5 Minuten

PHP listet alle Dateien im Verzeichnis auf duplicate
Markus Lalor

Mögliches Duplikat:

Holen Sie sich die Hierarchie eines Verzeichnisses mit PHP
Abrufen der Namen aller Dateien in einem Verzeichnis mit PHP

Funktionen dazu habe ich gesehen listet alle Dateien in einem Verzeichnis auf Aber wie kann ich alle Dateien in auflisten? Unterverzeichnisse auchso dass es gibt ein Array zurück wie?

$files = files("foldername");

Damit $files ist etwas ähnliches

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

1646261645 520 PHP listet alle Dateien im Verzeichnis auf duplicate
Matthew

foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.')) as $filename)
{
    // filter out "." and ".."
    if ($filename->isDir()) continue;

    echo "$filename\n";
}

PHP-Dokumentation:

  • +1 für SPL. Meiner Meinung nach ist es (schon seit einiger Zeit) an der Zeit, SPL anstelle dieser riesigen, langsamen prozeduralen Blöcke zu verwenden.

    – Superultranova

    16. Februar 2011 um 23:11 Uhr

  • Vollständiger Code (Ordnernamen ändern) – <?php $path = realpath('yourfolder/examplefolder'); foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename) { echo "$filename\n"; } ?>

    – T. Todua

    28. März 2013 um 10:58 Uhr


  • Oh wow … Vergleichen Sie dies mit dem Giganten oben. Tolle.

    – Kloar

    15. Mai 2013 um 12:51 Uhr

  • Es enthält . und .. spezielle Verzeichnisse. Hoffentlich können Sie sie herausfiltern, indem Sie a hinzufügen !$filename->isDir() Test (es gibt keine isDot()sehen SplFileInfo).

    – Grasdoppelt

    6. Mai 2015 um 23:40 Uhr


  • Außerdem nützliche Links zum PHP-Dokument: RecursiveDirectoryIteratorRekursiverIteratorIterator

    – Grasdoppelt

    6. Mai 2015 um 23:52 Uhr

PHP listet alle Dateien im Verzeichnis auf duplicate
Ruel

Sie suchen also nach einer rekursiven Verzeichnisliste?

function directoryToArray($directory, $recursive) {
    $array_items = array();
    if ($handle = opendir($directory)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                if (is_dir($directory. "https://stackoverflow.com/" . $file)) {
                    if($recursive) {
                        $array_items = array_merge($array_items, directoryToArray($directory. "https://stackoverflow.com/" . $file, $recursive));
                    }
                    $file = $directory . "https://stackoverflow.com/" . $file;
                    $array_items[] = preg_replace("/\/\//si", "https://stackoverflow.com/", $file);
                } else {
                    $file = $directory . "https://stackoverflow.com/" . $file;
                    $array_items[] = preg_replace("/\/\//si", "https://stackoverflow.com/", $file);
                }
            }
        }
        closedir($handle);
    }
    return $array_items;
}

  • Verwenden Sie keine regulären Ausdrücke in Rekursion, sie neigen dazu, sehr langsam zu sein! Verwenden Sie in Ihrem Fall die Funktion rtrim.

    – Maschinensüchtig

    31. Oktober 2013 um 8:27 Uhr


  • Ich habe dies als Kern umgeschrieben, um effizienter zu sein und nur Dateien zurückzugeben: gist.github.com/brucekirkpatrick/8528710

    – Bruce Kirkpatrick

    20. Januar 2014 um 20:43 Uhr

1646261646 835 PHP listet alle Dateien im Verzeichnis auf duplicate
Chuck Vose

Ich denke du suchst glob-Funktion von php. Du kannst anrufen glob(**) um eine rekursive Dateiliste zu erhalten.

BEARBEITEN: Ich habe festgestellt, dass mein Glob nicht auf allen Systemen zuverlässig funktioniert, also sende ich diese viel hübschere Version der akzeptierten Antwort.

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

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

function files($path,&$files = array())
{
    $dir = opendir($path."/.");
    while($item = readdir($dir))
        if(is_file($sub = $path."https://stackoverflow.com/".$item))
            $files[] = $item;else
            if($item != "." and $item != "..")
                files($sub,$files); 
    return($files);
}
print_r(files($_SERVER['DOCUMENT_ROOT']));

1646261646 819 PHP listet alle Dateien im Verzeichnis auf duplicate
KiKo

Ich musste das Lesen eines bestimmten Verzeichnisses implementieren, und basierend auf der Funktion von Chuck Vose habe ich diese Seite erstellt, um die Verzeichnisse zu lesen, die auf JQuery basieren:

<?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>

Die Struktur, die im Baum mit JQuery verwendet wurde, wurde der Website entnommen:
http://jquery.bassistance.de/treeview/demo/

Ich hoffe, es ist nützlich!

916980cookie-checkPHP listet alle Dateien im Verzeichnis auf [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy