獲取所有子目錄列表以及php中給定目錄下所有文件的另一個列表的最佳方式是什麼?只要我可以在PHP中使用它(例如,c/java/python/...程序),我就可以使用非純php代碼。東西比純recursion
快,一些內置的一些語言php獲取所有子目錄和所有文件的列表
回答
如果你不喜歡OOing的東西,你可以通過find的結果運行一個opendir()循環。
if (exec('find /startdir -type d -print', $outputarray)) {
foreach ($outputarray as $onepath) {
// do stuff in $onepath
}
}
您確實指定了「不純PHP」作爲選項,對吧? :-)
對......... :) – prongs
公頃。我喜歡這個答案:) –
使用PHP的內置RecursiveDirectoryIterator
編輯
喜歡的東西(因爲這些東西往往是快的。):
$dirs = array();
$files = array();
$dir = __DIR__ . '/foo';
$iterator = new RecursiveDirectoryIterator(new DirectoryIterator($dir));
foreach ($iterator as $dirElement) {
if ($dirElement->isDir()) {
$dirs[] $dirElement->getPathname();
}
if ($dirElement->isFile()) {
$files[] = $dirElement->getPathname();
}
}
就像'NikiC'一樣,這是純粹的遞歸,OP想避免什麼。 'RecursiveDirectoryIterator'只是讓程序員不用編寫自己的遞歸函數。 – Jon
採取了點。我認爲OP意味着他想避免手動遞歸實現。猜猜我讀錯了。我們可以要求OP澄清我的想法。無論如何,感謝downvote。 –
foreach (new RecursiveDirectoryIterator('yourDir') as $file) {
// you don't want the . and .. dirs, do you?
if ($file->isDot()) {
continue;
}
if ($file->isDir()) {
// dir
} else {
// file
}
}
從php.net
的文檔採取glob():
$path[] = 'starting_place/*';
while(count($path) != 0) {
$v = array_shift($path);
foreach(glob($v) as $item) {
if(is_dir($item))
$path[] = $item . '/*';
else if (is_file($item)) {
//do something
}
}
}
class Dir_helper{
public function __construct(){
}
public function getWebdirAsArray($rootPath){
$l1 = scandir($rootPath);
foreach ($this->getFileList($rootPath) as $r1){
if ($r1['type'] == 'dir'){
if (preg_match("/\./", $r1['name'])){
$toplevel[] = $r1['name'];
} else {
if (preg_match("/\d/",$r1['name'])){
$seclevel[] = $this->getFileList($r1['name']);
}
}
}
}
foreach ($seclevel as $sl){
foreach ($sl as $cur){
$sub[] = $cur['name'];
}
}
return $result = array_merge((array)$toplevel, (array)$sub);
}
public function getFileList($dir){
$retval = array();
if(substr($dir, -1) != "/") $dir .= "/";
$d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading");
while(false !== ($entry = $d->read())) {
if($entry[0] == ".") continue;
if(is_dir("$dir$entry")) {
$retval[] = array(
"name" => "$dir$entry/",
"type" => filetype("$dir$entry"),
"size" => 0,
"lastmod" => filemtime("$dir$entry")
);
} elseif(is_readable("$dir$entry")) {
$retval[] = array(
"name" => "$dir$entry",
"type" => mime_content_type("$dir$entry"),
"size" => filesize("$dir$entry"),
"lastmod" => filemtime("$dir$entry")
);
}
}
$d->close();
return $retval;
}
}
- 1. 獲取目錄中的所有文件和所有文件的所有子目錄下
- 2. 文件列表文件夾和所有孫子的子目錄
- 3. PHP - 從FTP中的所有目錄中獲取所有文件
- 4. 獲取目錄中的所有文件夾和子文件夾
- 5. PHP刪除的目錄都是空的所有文件和所有子目錄
- 6. 列出目錄+子目錄中的所有文件和目錄
- 7. Linux命令從所有目錄和子目錄中獲取文件的所有文件,大小和路徑
- 8. 從目錄和子目錄中獲取所有文件,大小,路徑php
- 9. Visual Studio 2015和Gulp:獲取所有子目錄中的所有文件
- 10. 獲取所有Outlook文件夾和子文件夾的列表
- 11. 列出目錄中的文件和所有子目錄
- 12. 列出目錄和子目錄中的所有jpg文件
- 13. 列出目錄中的所有文件和子目錄C#
- 14. 列出目錄中的所有子目錄和文件
- 15. 列出目錄中的所有子目錄和文件
- 16. 獲取目錄中所有文件的列表
- 17. 獲取資產內目錄中所有文件的列表
- 18. 獲取目錄中所有文件的列表(遞歸)
- 19. 獲取vb.net目錄中的所有文件列表
- 20. 獲取目錄中所有圖像文件的列表
- 21. 獲取當前目錄中的所有文件和目錄python
- 22. 從目錄獲取所有文件名
- 23. 使用Scala獲取計算機上所有目錄的列表和所有文件的列表。
- 24. 獲得從目錄中的所有文件和所有子目錄除了一個子目錄
- 25. 列表從文檔根目錄之外的所有子目錄和文件
- 26. 獲取目錄和子目錄中的所有.gz文件的大小 - python
- 27. 如何獲取CMake中所有添加的子目錄列表
- 28. 獲取所有文件夾和文件的目錄
- 29. 如何獲取包含所有子目錄文件的目錄中的文件?
- 30. CoffeeScript - 編譯當前目錄和所有子目錄中的所有.coffee文件
什麼是你想要的輸出?數組?一個很好格式化的字符串? UNIX'''''''''命令爲顯示目錄提供了一個漂亮的字符串。 '''find'''列出了相關的路徑,這些路徑可以被PHP解析。 – FakeRainBrigand