たとえば、コードを使用して現在のディレクトリ内のファイルとディレクトリを一覧表示することしかできません。
bak
1.php
1.txt
123
......
しかし、ファイルは bak フォルダーにあることが必要であることがわかりました。 (bak ディレクトリの絶対パスと相対パスの両方がわかります。)
コードの書き方がわかりません
function get_files($dir){ $files = array(); if(is_dir($dir)){ if($dh = opendir($dir)){ while (($file = readdir($dh)) !== false) { if(!($file == '.' || $file == '..')){ $file = $dir.'/'.$file; if(is_dir($file) && $file != './.' && $file != './..'){ $files = array_merge($files, get_files($file)); } else if(is_file($file)){ $fullpath = $_SERVER['HTTP_REFERER']; $fullpath = str_replace(basename($fullpath),"",$fullpath); $fullpath .= substr($file,2); $files[] = $fullpath; } } } } } return $files;}
使用方法
$path = '../bak';
foreach(get_files($path) as $allfile){
echo $allfile.'< hr />';
}
$path = '目录名';$ite = new RecursiveDirectoryIterator($path);foreach (new RecursiveIteratorIterator($ite) as $filename=>$cur) { $fn = $cur->getBasename(); if($cur->isDir() || ($fn == '.' || $fn == '..')) continue; echo $filename, '<br />';}
イテレータを使用するので、デフォルトはリーフのみです
$items = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));foreach($items as $itemName => $item) echo (string)$itemName, '<br />', PHP_EOL;
勉強しに来ました
イテレーターを使っているので、isdir の判定を気にする必要はありません。デフォルトでは、リーフのみです
$path = '目录名';$ite = new RecursiveDirectoryIterator($path);foreach (new RecursiveIteratorIterator($ite) as $filename=>$cur) { $fn = $cur->getBasename(); if($cur->isDir() || ($fn == '.' || $fn == '..')) continue; echo $filename, '<br />';}
$items = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));foreach($items as $itemName => $item) echo (string)$itemName, '<br />', PHP_EOL;
app/Admin/.. なども出力されないでしょうか?
isDir() を判定するだけでファイル名を出力することができます
イテレータを使用するので、デフォルトはリーフのみです
$path = '目录名';$ite = new RecursiveDirectoryIterator($path);foreach (new RecursiveIteratorIterator($ite) as $filename=>$cur) { $fn = $cur->getBasename(); if($cur->isDir() || ($fn == '.' || $fn == '..')) continue; echo $filename, '<br />';}
$items = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));foreach($items as $itemName => $item) echo (string)$itemName, '<br />', PHP_EOL;
PHP ドキュメントで言及されているリカーサーは、ノードを出力するにはパラメータを変換する必要がありますが、それが不完全なバグであるかどうかは不明です
です。そうですか?
app/Admin/.. なども出力されないでしょうか?
ただし、isDir() を判定してファイル名を出力することしかできません
とても奇妙です!
上記のコードは役に立たないと言っているのでしょうか?