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

解决方案 »

  1.   

    又是0==false的原因:(谢谢唠叨和鸟的代码,真是精益求精...拜服一哈
      

  2.   

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

  3.   

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

  4.   

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

  5.   

    这个东东太经典了,我修改了一下就可以用作影视总目录了<?phpfunction dirtree($path=".") {
      echo "<dl>";
      $d = dir($path);
      while(false !== ($v = $d->read())) {
        if($v == "." || $v == "..")
          continue;
        $file = $d->path."/".$v;

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

      }
      $d->close();
      echo "</dl>";
    }dirtree("f:\video");
    ?>但是$path 如果是ftp的地址,这个东东就不好用了,是不是我的ftp server 没设置好啊?
      

  6.   

    错误提示:Warning: dir(ftp://10.0.168.14): failed to open dir: not implemented in E:\home\test\movie.php on line 9Fatal error: Call to a member function on a non-object in E:\home\test\movie.php on line 10
      

  7.   

    to  ustcfrank(阿卡波糖)可能不能用于远程连接。
      

  8.   

    呵呵,这样就ok 了,真笨if(is_dir($file))
      {
    echo "<dt><a href=\"ftp://10.0.168.14\"" . "$file target=\"_blank\">$v</a>";
            dirtree($file);
      }
    else
    echo "<dt>$v";
      

  9.   

    好象还是有问题,我现在改成
     if(is_dir($file))
      {
     $p=substr($file,strlen($path));
    echo "<dt><a href=\"ftp://10.0.168.14$p $v</a>";
            dirtree($file);
      }
    else
    echo "<dt>$v";用dirtree("f:\video");调用,第一级子目录没问题,但多级子目录就有问题了,是因为递归的原因
      

  10.   

    我修改的显示ftp上总目录的版本,这回好用了<?php
    function dirtree($path=".") {
      echo "<dl>";
     
      $d = dir($path);
      while(false !== ($v = $d->read())) {
        
    if($v == "." || $v == "..")
          continue;
        $file = $d->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->close();
      echo "</dl>";
    }dirtree("f:\video");?>
      

  11.   

    呵呵,谁再加个js变成个类似资源管理器的东东吧?偶js很差,有心无力
      

  12.   

    TO: okdw(零零发财) 
      支持你的说法!哪位给个JS出来啊!关注中!
      

  13.   

    大家注意,我又发现了错误我修改代码的目标是:如果$file是dir的话,就加个链接,可是我的代码中又发现错误:如果文件夹的名字有空格的话,链接就不能正确显示,比如有个文件夹的名字是"for test"则echo "<dt><a href=$file target=\"_blank\">$v</a>";
    产生的输出是<a href=f:\video/for test target="_blank">for test</a>这时点击链接,只能链到f:/video/for   ,而test丢掉了,自然连不上修改这个错误的方法是把echo "<dt><a href=$file target=\"_blank\">$v</a>";改为echo "<dt><a href=\"$file\" target=\"_blank\">$v</a>";就好了
      

  14.   

    呵呵,0和false的关系
    <?php
    $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>";
    }?>
      

  15.   

    上面的结果:)when test is 0.......
    if (test=0) return false 
    if(test==0) return true 
    if(test==false) return true 
    if(test===0) return true 
    if(test===false) return false 
    if(test=1) return true 
    if(false!==(test=0)) return true if (test=0){}就意味着恒为伪false,记得以前看到文章里说
    IF($var=0) {} 可以当做/*  */来用^_^