PHP 列出目录中的所有文件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3826963/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
PHP list all files in directory
提问by Mark Lalor
Possible Duplicate:
Get the hierarchy of a directory with PHP
Getting the names of all files in a directory with PHP
I have seen functions to list all file in a directorybut how can I list all the files in sub-directories too, so it returns an arraylike?
我已经看到列出目录中所有文件的函数,但是我如何也列出子目录中的所有文件,所以它返回一个数组?
$files = files("foldername");
So $files
is something similar to
所以$files
是类似的东西
array("file.jpg", "blah.word", "name.fileext")
回答by Matthew
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.')) as $filename)
{
// filter out "." and ".."
if ($filename->isDir()) continue;
echo "$filename\n";
}
PHP documentation:
PHP文档:
回答by Ruel
So you're looking for a recursive directory listing?
所以您正在寻找递归目录列表?
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;
}
回答by Chuck Vose
I think you're looking for php's glob function. You can call glob(**)
to get a recursive file listing.
我认为您正在寻找php 的 glob 函数。您可以调用glob(**)
以获取递归文件列表。
EDIT: I realized that my glob doesn't work reliably on all systems so I submit this much prettier version of the accepted answer.
编辑:我意识到我的 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;
}
from: http://www.phpfreaks.com/forums/index.php?topic=286156.0
来自:http: //www.phpfreaks.com/forums/index.php?topic=286156.0
回答by Chuck Vose
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']));
回答by KiKo
I needed to implement the reading of a given directory, and relying on the function of Chuck Vose, I created this page to read the directories relying on JQuery:
我需要实现对给定目录的读取,依靠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>
The structure used in the tree with JQuery, the site was taken: http://jquery.bassistance.de/treeview/demo/
树中使用的结构与JQuery,取的站点:http: //jquery.bassistance.de/treeview/demo/
I hope it is useful!
我希望它有用!