> 呵呵,小邪最近对操作文件比较感兴趣的说,所以咱们来把文件夹给遍历了,顺便生成个树。
> 我们要使用的函数有 Scandir,它的作用是列出指定路径中的文件和目录,就像 Dir 一样。

> 与更强力的 Glob() 函数,作用是以数组的形式返回与指定模式相匹配的文件名或目录。
> 友情提醒,千万别像小邪那样在电脑前面呆太长时间,否则就会像小邪一样得见鬼的高血糖。
一. 遍历单层文件夹:
> 在扫描单层文件夹的问题是,两个函数的结果虽有不同,不过表现是相差不大的。
> Scandir 函数会提供额外两行,分别是 “.” 和 “..” ,而 Glob 则是没有的。
function get_dir_scandir(){
$tree = array();
foreach(scandir('./') as $single){
echo $single."<br/>\r\n";
}
}
get_dir_scandir();
function get_dir_glob(){
$tree = array();
foreach(glob('./*') as $single){
echo $single."<br/>\r\n";
}
}
get_dir_glob();
二. 递归遍历文件树:
> 在递归扫描文件夹树的问题上,还是 Glob 函数的表现好一点,很准确的说。
> Scandir 函数会莫名其妙扫描两次 ../ 处的文件,也就是说如果小邪有俩文件。
> ../b.php 和 ../a.php,结果就会在扫描报告上面出现两次,很是奇怪。
//Update at 2010.07.25 - 以下代码作废
$path = '..';
function get_filetree_scandir($path){
$tree = array();
foreach(scandir($path) as $single){
if(is_dir('../'.$single)){
$tree = array_merge($tree,get_filetree($single));
}
else{
$tree[] = '../'.$single;
}
}
return $tree;
}
print_r(get_filetree_scandir($path));
//Update at 2010.07.25 - 以下为新代码
$path = './';
function get_filetree_scandir($path){
$result = array();
$temp = array();
if (!is_dir($path)||!is_readable($path)) return null; //检测目录有效性
$allfiles = scandir($path); //获取目录下所有文件与文件夹
foreach ($allfiles as $filename) { //遍历一遍目录下的文件与文件夹
if (in_array($filename,array('.','..'))) continue; //无视 . 与 ..
$fullname = $path.'/'.$filename; //得到完整文件路径
if (is_dir($fullname)) { //是目录的话继续递归
$result[$filename] = get_filetree_scandir($fullname); //递归开始
}
else {
$temp[] = $filename; //如果是文件,就存入数组
}
}
foreach ($temp as $tmp) { //把临时数组的内容存入保存结果的数组
$result[] = $tmp; //这样可以让文件夹排前面,文件在后面
}
return $result;
}
print_r(get_filetree_scandir($path));
> Glob 函数扫描灰常准确,并且会自动按照字母排好顺序,貌似是最佳方案。
$path = '..';
function get_filetree($path){
$tree = array();
foreach(glob($path.'/*') as $single){
if(is_dir($single)){
$tree = array_merge($tree,get_filetree($single));
}
else{
$tree[] = $single;
}
}
return $tree;
}
print_r(get_filetree($path));
三. 附言:
> 嘻嘻,小邪这里开始不和谐了,欢迎来墙。今天服务器很是不稳定呐,不知道怎么回事。
> 据戈戈说貌似是线路不稳定,难道 G.fw 又开始乱搞了?!小邪是翻墙才写好文章的。
> 额,小邪今天去了下医院,无语,血糖指数竟然到正常人的三倍鸟,貌似快挂鸟,阿门。
> 所以上午去了做饭前检查,下午又去做了饭后检查,结果昨天就没来得及写一下文章。
我是意在抢沙发的
@江流 , 呵呵,又大又软很舒服爽呆呆外加春哥躺过的沙发,被你抢咯 ~
小邪高血压 哈哈
@江流,
是高血糖...
@Auston Jary , 正解,嘎嘎 ~ ╮(╯▽╰)╭
@江流 , = =,囧,小邪是高血糖 ~
这次胸小,不够放一个“邪”字的。哇咔咔,美国线路在抽风,我翻墙来看小邪。
话说,我也只能通过翻墙更新我的博客了,杯具正在进行中
@第三眼 , 被你发现了,胸太小,水印都打不上去,小邪只好干瞪眼 ~
话说,美国线路突然抽风,不知道发生了什么诡异的事情 ~ ╮(=_-)╭
还要翻墙更新博客???
同一IP的我貌似没什么问题啊
@Auston Jary,
不翻墙很慢,也凑合能用,翻墙后快多了。可能和线路有关吧,单位的线路和家的不一样,速度也不一样。
@Auston Jary , 传说中的RP问题?囧,小邪和第三眼都这个样子 ~
如果坐在电脑前的时间和血糖成正比,那我的血糖指数绝对比小邪的高!!!
PS,还是没看懂关于PHP的那些,太囧了
@万戈 , 呵呵,万兄要注意身体,小邪最近也要注意作息时间鸟 ~
没事,呵呵,万兄的潜力无限,相信小邪淫荡的眼光 ~
Dropbox我上次外链了四首歌,几天后就放不了...
@Auston Jary , = =,杯具,那还是不要用好了 ~
丫是对啥都感兴趣,而且一日一趣儿 :biggrin:
@619 , 嘿嘿,裸奔帝国威武 ~!
@邪 罗刹,
霍霍,春哥曾哥万岁~!
@619 , 春哥曾哥是你裸奔帝国的图腾啊 ~
PHP的代码也是非常优雅啊!我更爱Python,递归遍历某个路径下的所有文件只要短短几句,这里把它打印出来。
for root, dirs, files in os.walk(path):
for file in files:
filepath = os.path.join(root, file)
print filepath
优雅吧!
@Kada,
啊。没有缩进了。。。。
@Kada , 嘎嘎,以后你在评论框贴代码也可以这个样子 ~
《pre lang="python" line="1"》
代码代码代码代码 ~
《/pre》
@Kada , 恩,有机会的话小邪一定要学这个的 ~
因为谷歌Appengine免费的强大平台放在那里 ~
看着 (¯﹃¯)口水 ~
dropbox貌似每月有流量限制的,得注意下!
@林木木 , 收到,多谢提醒,嘎嘎 ~ :biggrin:
只为那YD的黑白图片~
@北街 , 嘿嘿,同好,握手握手 ~
又是一篇我看不懂的
@胡余丰 , 没事儿,看图吧 ~ 哈哈 ~
俺是来学习的
@风舞清扬 , 呵呵,对你有同是对小邪最大的支持 ~ :biggrin:
@Revolution , = =,小邪发现您老特纯洁 ~ :exclaim:
咦,小邪也上19楼
@路人假 , 信了春哥,上19楼,腰不酸腿不疼,还能在上九十九 ~
幸好懂点递归~不然都看不懂~~
YD的图能看·~~
@fatkun , 能看懂就好,哈哈 ~
嘎嘎,灰常好的图床,不过听说有流量限制 ╮(╯▽╰)╭ ~
前面的技术文章我看不懂。
Dropbox是个不错的东西,但是当年我用的时候给wpg论坛造成了不太好的影响,貌似被chrome报危险网站了,顿时我囧了很久呢~
现在都不怎么用了~
@exia , = =,小邪也囧了,DBox也太可怕了 ~ 远离Dbox 珍惜生命 ~
还是用你的空间作图床吧,安心,我一开始没在意,用flickr,后悔鸟。。
Upadte:这次看到美图了。。
@ShuaiGe.Me , 晕,空间流量不够呐,杯具 ~ 所以小邪才那么奋力地找图床来着 ~
已然变成一不和谐之物 呵呵
@17doit , 恩,拦都拦不住 ~ ╮(╯▽╰)╭
高血糖?
难道小邪很胖?
@Hailo , 囧,没有特别胖,有是有一点儿 ~
额. 貌似我没翻墙额
@漠岚 , 恩,今天好了 ~
血糖高了啊,要注意身体,身体是革命的本钱~
@疾风 , 呵呵,谢谢,小邪会注意一点的 ~
咱俩是病了,我也病了好几天了,不过我没大碍。
@九站 , 杯具 ~ ╮(╯_╰)╭,咱们都要坚挺一点儿 ~
看来你的PHP很历害,要向你学习.
@国外网页设计教程 , 呵呵,大家各有所长,互相学习嘛 ~
嗯,还是看不懂。纯支持。。
@Nox,
呵呵,相信你迟早会轻松看懂的呐 ~ :biggrin:
看完了这篇文章,我也学会了用不和谐的图片吸引眼球的说!
@Revolution , 嘻嘻,那小邪就期待着革命之道里的不和谐了喔 ~
恩 可以想象你在DIY的时候是多么的热血沸腾~ :exclaim:
@TONY , 囧,DIY?小邪可是很纯洁的 ~
身体是革命的本钱啊。。。
@freetao , 恩恩,小邪以后可一定会注意的呢 ~
小邪,八卦一下,你很胖吗?
@g , 你丫今天蛋疼 ~
@邪 罗刹 , ╮(╯▽╰)╭ 感觉自己特杯具 ~
进来看小MM的咯
@alswl , 呵呵,欢迎咯,精选的MM喔 ~