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

WBOY
Release: 2016-06-13 12:27:19
Original
1008 people have browsed it

目录遍历优化
我写了一段代码,实现了遍历目录以及该目录下的所有文件,功能是实现了,但是总觉得代码有优化的余地,希望各位大神帮忙瞧瞧。 //指定页面编码方式
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 />
Copy after login
不过目录迭代器是按文件的创建时间遍历的,有时结果比较怪异

我一般使用 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);
Copy after login
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);
Copy after login
这样就可以找到3层目录已内的全部 ide_tmp.php 文件

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template