PHP список всех файлов в каталоге

Возможный дубликат:
Получить иерархию каталога с PHP
Получение имен всех файлов в каталоге с PHP

Я видел функции для перечисления всего файла в каталоге, но как я могу также перечислить все файлы в подкаталогах , чтобы он возвращал массив ?

$files = files("foldername"); 

Таким образом, $files – это нечто похожее на

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

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

Документация PHP:

  • RecursiveDirectoryIterator
  • RecursiveIteratorIterator

Итак, вы ищете список рекурсивных каталогов?

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

Я думаю, что вы ищете функцию glob php . Вы можете вызвать glob(**) чтобы получить список рекурсивных файлов.

EDIT: Я понял, что мой 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

 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'])); 

Мне нужно было выполнить чтение данного каталога и, опираясь на функцию Чак Восе , я создал эту страницу для чтения каталогов, основанных на 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/

Надеюсь, это полезно!