[讨论]一个目录遍历问题,请大家讨论一下。顺便散点分

1   
2function dirtree($path=".") {   
3echo "

<dl>";
$d = dir($path);
while($v = $d-&gt;read()) {
if($v == "." ¦ ¦ $v == "..")
continue;
$file = $d-&gt;path."/".$v;
echo "<dt>$v";
if(is_dir($file))
dirtree($file);
}
$d-&gt;close();
echo "</dt></dl>

1";   
2}   
3  
4dirtree();   

这个函数可以正常显示树状的目录。
现在的问题是:若某子目录或文件名为“0”时,则不会显示。请问如何解决?
例:./a/0/xxx.txt
则不会输出xxx.txt
---------------------------------------------------------------

是否应该把0赋给一个变量来代替呢?
---------------------------------------------------------------

1   
2  
3function dirtree($path="./test") {   
4echo "

<dl>";
$d = dir($path);
while(false !== ($v = $d-&gt;read())) {
if($v == "." ¦ ¦ $v == "..")
continue;
$file = $d-&gt;path."/".$v;
echo "<dt>$v";
if(is_dir($file))
dirtree($file);
}
$d-&gt;close();
echo "</dt></dl>

1";   
2}   
3  
4dirtree();   

---------------------------------------------------------------

又是0==false的原因

:(

谢谢唠叨和鸟的代码,真是精益求精...拜服一哈
---------------------------------------------------------------

问题解决了 :)
---------------------------------------------------------------

这个问题以前一直忽略了,没想到真的是没想到。问题有趣,解得干净,good.
---------------------------------------------------------------

学习
---------------------------------------------------------------

记下
---------------------------------------------------------------

现在明白为什么手册上的例子要写成while(false!==($entry = $d->read()))了,原来就是防止0==false的出现呀。
---------------------------------------------------------------

嗯!非常同意!
===是值和类型都相等才等,否则2.3=="2.3abc"就会为真了,而===才为假
---------------------------------------------------------------

这个东东太经典了,我修改了一下就可以用作影视总目录了

1   
2  
3function dirtree($path=".") {   
4echo "

<dl>";
$d = dir($path);
while(false !== ($v = $d-&gt;read())) {
if($v == "." ¦ ¦ $v == "..")
continue;
$file = $d-&gt;path."/".$v;

if(is_dir($file))
{
echo "<dt><a href="$file" target='"_blank"'>$v</a>";
dirtree($file);
}
else
echo "<dt>$v";

}
$d-&gt;close();
echo "</dt></dt></dl>

1";   
2}   
3  
4dirtree("f:\video");   

但是$path 如果是ftp的地址,这个东东就不好用了,是不是我的ftp server 没设置好啊?
---------------------------------------------------------------

知识最终要,分也不能丢。
---------------------------------------------------------------

这个问题好得很,有趣。
---------------------------------------------------------------

to ustcfrank(阿卡波糖)

可能不能用于远程连接。
---------------------------------------------------------------

呵呵,这样就ok 了,真笨

if(is_dir($file))
{
echo "

 1<dt><a "$file="" .="" href='\"ftp://10.0.168.14\""' target='\"_blank\"'>$v</a>";   
 2dirtree($file);   
 3}   
 4else   
 5echo "<dt>$v";   
 6\---------------------------------------------------------------   
 7  
 8这个问题以前我也遇到过   
 9经典!收了!   
10\---------------------------------------------------------------   
11  
12收藏 学习   
13遍历目录如此简洁   
14\---------------------------------------------------------------   
15  
16好象还是有问题,我现在改成   
17if(is_dir($file))   
18{   
19$p=substr($file,strlen($path));   
20echo "<dt><a $v<="" a="" href='\"ftp://10.0.168.14$p'>";   
21dirtree($file);   
22}   
23else   
24echo "<dt>$v";   
25  
26用dirtree("f:\video");调用,第一级子目录没问题,但多级子目录就有问题了,是因为递归的原因   
27\---------------------------------------------------------------   
28  
29good   
30\---------------------------------------------------------------   
31  
32我水平还不够,不过要散分倒是最好的对象。   
33\---------------------------------------------------------------   
34  
35收藏   
36\---------------------------------------------------------------   
37  
38又学着了,呵呵   
39\---------------------------------------------------------------   
40  
41我修改的显示ftp上总目录的版本,这回好用了   
42  

function dirtree($path=".") {
echo "<dl>";

$d = dir($path);
while(false !== ($v = $d-&gt;read())) {

if($v == "." ¦ ¦ $v == "..")
continue;
$file = $d-&gt;path."/".$v;

if(is_dir($file))
{
$fileshow=$file;
$fileshow=EscapeShellCmd($file);
$fileshow=substr($file,8); //"8"是"f:\video"的长度。
echo "<dt><a href="ftp://10.0.168.14$fileshow" target='"_blank"'>$v</a>";
dirtree($file);
}
else
echo "<dt>$v";

}
$d-&gt;close();
echo "</dt></dt></dl>";
}

dirtree("f:\video");

 1  
 2  
 3\---------------------------------------------------------------   
 4  
 5呵呵,谁再加个js变成个类似资源管理器的东东吧?偶js很差,有心无力   
 6\---------------------------------------------------------------   
 7  
 8不错!   
 9\---------------------------------------------------------------   
10  
11经典,值得收藏!   
12\---------------------------------------------------------------   
13  
14TO: okdw(零零发财)   
15支持你的说法!哪位给个JS出来啊!关注中!   
16\---------------------------------------------------------------   
17  
18大家注意,我又发现了错误   
19  
20我修改代码的目标是:如果$file是dir的话,就加个链接,可是我的代码中又发现错误:   
21  
22如果文件夹的名字有空格的话,链接就不能正确显示,比如有个文件夹的名字是"for test"   
23  
24则echo "<dt><a href="$file" target='\"_blank\"'>$v</a>";   
25产生的输出是<a href="f:\video/for" target="_blank" test="">for test</a>   
26  
27这时点击链接,只能链到f:/video/for ,而test丢掉了,自然连不上   
28  
29修改这个错误的方法是把   
30  
31echo "<dt><a href="$file" target='\"_blank\"'>$v</a>";   
32  
33改为   
34  
35echo "<dt><a href='\"$file\"' target='\"_blank\"'>$v</a>";   
36  
37就好了   
38  
39  
40\---------------------------------------------------------------   
41  
42呵呵,0和false的关系   

$test=0;
echo "when test is 0.......<br/>";
if ($test=0)
{
echo "if (test=0) return true <br/>";
}else
{
echo "if (test=0) return false <br/>";
}

if ($test==0)
{
echo "if(test==0) return true <br/>";
}else
{
echo "if(test==0) return false <br/>";
}

if ($test==false)
{
echo "if(test==false) return true <br/>";
}else
{
echo "if(test==false) return false <br/>";
}

if ($test===0)
{
echo "if(test===0) return true <br/>";
}else
{
echo "if(test===0) return false <br/>";
}

if ($test===false)
{
echo "if(test===false) return true <br/>";
}else
{
echo "if(test===false) return false <br/>";
}

if ($test=1)
{
echo "if(test=1) return true <br/>";
}else
{
echo "if(test=1) return false <br/>";
}

if (false!==($test=0))
{
echo "if(false!==(test=0)) return true <br/>";
}else
{
echo "if(false!==(test=0)) return false <br/>";
}

 1\---------------------------------------------------------------   
 2  
 3上面的结果:)   
 4  
 5when test is 0.......   
 6if (test=0) return false   
 7if(test==0) return true   
 8if(test==false) return true   
 9if(test===0) return true   
10if(test===false) return false   
11if(test=1) return true   
12if(false!==(test=0)) return true   
13  
14if (test=0){}就意味着恒为伪false,记得以前看到文章里说   
15IF($var=0) {} 可以当做/* */来用^_^   
16  
17\---------------------------------------------------------------   
18  
19偶不懂PHP,接点分吧!   
20\---------------------------------------------------------------   
21  
22up一下   
23\---------------------------------------------------------------   
24  
25精品原来是这样炼出来的。   
26\---------------------------------------------------------------   
27  
28up   
29\---------------------------------------------------------------   
30  
31mark   
32\---------------------------------------------------------------   
33  
34我一直都对递归函数有一种恐惧心理,老弄不明白到底是哪个调用哪个.郁闷!   
35\---------------------------------------------------------------   
36  
37接分   
38\---------------------------------------------------------------   
39  
40up   
41\---------------------------------------------------------------   
42  
43ding   
44\---------------------------------------------------------------   
45  
46UP</dt></dt></dt></dt></a></dt></dt></dt>
Published At
Categories with Web编程
comments powered by Disqus