Heim  >  Artikel  >  Backend-Entwicklung  >  目录遍历优化,该如何处理

目录遍历优化,该如何处理

WBOY
WBOYOriginal
2016-06-13 12:27:19963Durchsuche

目录遍历优化
我写了一段代码,实现了遍历目录以及该目录下的所有文件,功能是实现了,但是总觉得代码有优化的余地,希望各位大神帮忙瞧瞧。 //指定页面编码方式
header('Content-type:text/html;charset=utf-8');

$dir='f:/dir';

//方法调用
search_all_dir($dir);

//遍历目录的方法
function 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 $filel)
{
echo ' '.$filel;
}

}
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.'
';

}
}

}
}

return $files;

}
------解决思路----------------------
使用目录函数写,也就是这样了
用目录迭代器简单点

  $ite = new RecursiveDirectoryIterator($dir);<br />  $nbfiles=0;<br />  foreach (new RecursiveIteratorIterator($ite) as $filename=>$cur) {<br />    if(is_dir($filename)) continue;<br />    echo $filename . '<br>';<br />  }<br />
不过目录迭代器是按文件的创建时间遍历的,有时结果比较怪异

我一般使用 glob 函数遍历
$r = glob('images/*');<br />for($i=0; $i<count($r); $i++) {<br />  if(is_dir($r[$i])) $r = array_merge($r, glob($r[$i] . '/*'));<br />}<br />print_r($r);
glob 的结果是按文件名排序的,你可以控制他不排序

glob 另一个用法可以轻松的找到指定的文件
$p = '*/';<br />$f = 'ide_tmp.php';<br />$r = array();<br />for($i=0; $i<3; $i++) {<br />  $t = glob($p.$f);<br />  if($t) $r = array_merge($r, $t);<br />  $p .= '*/';<br />}<br />print_r($r);
这样就可以找到3层目录已内的全部 ide_tmp.php 文件

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn