PHP ディレクトリ イテレータの効率を向上させる方法 RecursiveDirectoryIterator
Iterator メソッド
echo 'プログラム開始時刻:'.time().'
';
$path = ' d:/www';
getRevDir($path);
echo 'プログラム終了時刻:'.time().'
';
exit
echo '< pre> ;';
//現在のパスの下にあるすべてのディレクトリとファイル名を取得します
//この使用法は主に B/S プログラムでリモート サーバー ディレクトリを取得するために使用されます
var_dump(array_keys(iterator_to_array(new RecursiveDirectoryIterator) ($path))));
exit;
//現在のパスの下にあるすべてのディレクトリとファイルを反復的に取得します
function getRevDir($path, $level = 0){
$ dirIterator = new RecursiveDirectoryIterator($path);
$strSplitBar = '';
for($i=0;$i<$level;$i ){
if($i == $level - 1){
$strSplitBar .= '|__';
}else{
$strSplitBar .= ' ';
}
}
foreach ($ dirIterator as $key => $fileInfo){
if($dirIterator->hasChildren()){
$dirName = substr($key,strrpos($key, DIRECTORY_SEPARATOR) 1);
echo $strSplitBar.$dirName.'
';
getRevDir($key, $level 1);
}else{
echo $strSplitBar.basename($key).'
}
}
}
実行結果
プログラム開始時刻: 1402624676
プログラム終了時刻: 1402624682
opendir メソッド
echo 'プログラム開始時刻:'.time().'
';
$path = 'd:/www';
getRevDir($path);
echo ' プログラムend time: '.time().'
';
exit;
echo '
';
// 現在のパスの下にあるすべてのディレクトリ名とファイル名を取得します
//この使用法は、主にリモート サーバー ディレクトリを取得する B/S プログラムで使用されます。
var_dump(array_keys(iterator_to_array(new RecursiveDirectoryIterator($path)))));
exit;
//現在のパスの下にあるすべてのディレクトリとファイルを反復的に取得します
function getRevDir($path, $level = 0){
$dirIterator = new RecursiveDirectoryIterator($path);
$strSplitBar = '';
for($i=0;$i if($i == $level-1){
$strSplitBar .= '|__';
} else{
$strSplitBar .= ' ';
}
}
foreach ($dirIterator as $key => $fileInfo){
if($dirIterator-> ;hasChildren ()){
$dirName = substr($key,strrpos($key, DIRECTORY_SEPARATOR) 1);
echo $strSplitBar.$dirName.'
';
getRevDir($ key, $level 1);
}else{
echo $strSplitBar.basename($key).'
';
}
}
}
実行結果
プログラム開始時刻: 1402624679
プログラム終了時刻: 1402624682
時差がすごいです。
-----解決策---------- -- --------
Web サイトのディレクトリ全体を走査するのにかかる時間はわずか 3 秒で、十分な速度です
------解決策------ ----------------
トラバースの効率はこんな感じです。
Linux コマンドを使用してディレクトリ ツリーを取得し、それを処理しますか?