ディレクトリトラバーサルの最適化

WBOY
リリース: 2016-06-20 12:44:43
オリジナル
1066 人が閲覧しました

ディレクトリとそのディレクトリ内のすべてのファイルを走査するコードを作成しましたが、コードには最適化の余地があると常に感じています。ご協力いただければ幸いです。 //ページのエンコード方式を指定
header('Content-type:text/html;charset=utf-8')

$dir='f:/dir ' ;

//メソッド call
search_all_dir($dir);

//ディレクトリを走査するメソッド
関数 search_all_dir($dir)
{
if( is_dir($dir))
{
$handle=opendir($dir)

$piarr=array('.','..'); > while ($file=readdir($handle))
{
if(in_array($file,$piarr)==FALSE)
{
if(is_dir($dir.'/' .$ file))
{
echo 'ディレクトリ名: '.$file.'
'
$files=search_all_file($dir.'/'.$file); > if (isset($files[0]))
{
echo 'このディレクトリ内のすべてのファイル:'.'
';
foreach($files as $file)
{
echo ' '.$file;
}

}
search_all_dir($dir.'/'.$file);

}
}
else
{
echo $dir.'正当なディレクトリではないか、強制的に終了します';
}

}

//特定のディレクトリ内のすべてのファイルをスキャンします
function search_all_file($dir)
{
$files=array();
if(is_dir($dir))
{
$handle=opendir($dir);

$piarr=array('.','..');

while($file=readdir($handle))
{
if(in_array($file,$piarr)==FALSE)
{
if(is_dir($dir.'/'.$file)==FALSE)
{
$files[]=' '.$file.'
'

}
}

}
}

; $files;

}




ディスカッションに返信 (解決策) ディレクトリ関数を使用して書き込むだけです。 ディレクトリ イテレータを使用する方が簡単です。

ただし、ディレクトリ イテレータはファイルの作成時間に従ってトラバースするため、結果が次のようになります。奇妙な

私は通常
glob をトラバースするために glob 関数を使用します。結果はファイル名でソートされないように制御できます。別の使用方法で簡単に見つけることができます。指定されたファイル
この方法で、3 層ディレクトリ内のすべての ide_tmp.php ファイルを検索します

  $ite = new RecursiveDirectoryIterator($dir);  $nbfiles=0;  foreach (new RecursiveIteratorIterator($ite) as $filename=>$cur) {    if(is_dir($filename)) continue;    echo $filename . '<br>';  }
ログイン後にコピー

辛抱強く回答していただき、ありがとうございます。私の目的は、関数を変更せずにコードを最適化して改善することです。 。ありがとうございます
$r = glob('images/*');for($i=0; $i<count($r); $i++) {  if(is_dir($r[$i])) $r = array_merge($r, glob($r[$i] . '/*'));}print_r($r);
ログイン後にコピー

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート