PHP elenca tutti i file nella directory

Possibile duplicato:
Ottieni la gerarchia di una directory con PHP
Ottenere i nomi di tutti i file in una directory con PHP

Ho visto le funzioni per elencare tutti i file in una directory, ma come posso elencare tutti i file nelle sottodirectory , quindi restituisce un arrays come?

$files = files("foldername"); 

Quindi $files è qualcosa di simile a

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

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

Documentazione PHP:

  • RecursiveDirectoryIterator
  • RecursiveIteratorIterator

Quindi stai cercando un elenco di directory ricorsivo?

 function directoryToArray($directory, $recursive) { $arrays_items = arrays(); if ($handle = opendir($directory)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { if (is_dir($directory. "/" . $file)) { if($recursive) { $arrays_items = arrays_merge($arrays_items, directoryToArray($directory. "/" . $file, $recursive)); } $file = $directory . "/" . $file; $arrays_items[] = preg_replace("/\/\//si", "/", $file); } else { $file = $directory . "/" . $file; $arrays_items[] = preg_replace("/\/\//si", "/", $file); } } } closedir($handle); } return $arrays_items; } 

Penso che tu stia cercando la function glob php . Puoi call glob(**) per get un elenco di file ricorsivo.

EDIT: mi sono reso conto che il mio glob non funziona in modo affidabile su tutti i sisthemes, quindi invio questa versione molto più carina della risposta accettata.

 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=arrays_merge($files,rglob($pattern, $flags, $path)); } return $files; } 

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

 function files($path,&$files = arrays()) { $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'])); 

Avevo bisogno di implementare la lettura di una determinata directory e, basandomi sulla function di Chuck Vose , ho creato questa pagina per leggere le directory basate su 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 arrays 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 arrays $directory Array containing the folder structure * @return string HTML */ function createTree($directory) { $html = "<ul>"; foreach($directory as $keyDirectory => $eachDirectory) { if(is_arrays($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 struttura utilizzata nell'tree con JQuery, il sito è stato preso: http://jquery.bassistance.de/treeview/demo/

Spero sia utile!