请注意,不要盲目相信这句话:
if (is_dir($directory))
有时他并不是正确返回,你不妨试一下。
建议用一下:(这是用于dir()函数的)
    $tmp=stat($tbase.$entry);  //$tbase.$entry:your_directory;
    $tmp[13]=$entry;
    if($tmp[2]<16900)  ////!!!!
      $dirs[$dir++]=$tmp;
    else
      $files[$file++]=$tmp;
stat()对ftp返回的好像不适用。

解决方案 »

  1.   

    请注意一下  . 跟 .. 这两个系统默认子目录。
    如果 $result中有 .
    那么,不可避免地会出现死循环!
    (你没有在自己的机器上调试过?)
      

  2.   

    回楼上的大虾Reve,我有几个不明白的地方,
    $tmp[13]应该是分得的块数目(这个东西只在st_blksize上适用,具体是什么我也不大清楚),然后判断$tmp[2]信息节点以次来判断它是否是文件。我这两点不大明白,能否示下?
    回楼上的大虾darkwing,因为我的这个 . 目录是我的FTP站点的目录,所以是不可能出现死循环这个问题的。不过经您这么一说,我在执行的时候好象是有点死循环的意思。是不是这个递归本身的错啊?忘大虾示下!!
    谢了先
      

  3.   

    Linux下的文件系统跟Windows的有区别,要注意点。
      

  4.   

    linux跟windows一样,都是用使用相对地址 . 和 .. 的,这样利于
    文件系统的编写。
     .  指向的是当前目录,
     .. 指向的是上一级目录
    如果$result数组中含有 . 那么
    将陷入 happy($ftpsteam,'.')的调用循环中。
    这跟使用的站点无关……
    因此要加入判断,剔除 . 和 ..时的递归调用。
      

  5.   

    它意思是说要先把.和..剔除掉啊
    <?
    $dir=opendir("./news/");
    $total=0;
    while($news=readdir($dir)) 
    {$check=strtolower($news);
    $total++;}
    if( $total>2 )
    {
    rewinddir($dir);
    for($i=0;$i<=$total;$i++) 
    {$news=readdir($dir);
    if( $news=="."||$news==".." ) continue;
    print "<TD align=center><A href=\"news.php?cata=$news\">$news</A></TD>\n";
    }
    }
    ?>
      

  6.   

    我按照两位的意思,这样改动了一下,(判断是否重名),但是还是不能执行啊
    <?
    function happy($ftp_stream,$directory)
    {
     if(is_dir($directory))
     {                      $result=ftp_nlist($stream,$directory);
      for ($i=0;$i<=count($result);$i++){
                                           if($direcoty==$result[$i])
                                           {$i=$i+1;}
                                           happy($ftp_stream,$result[$i]);
                                        }
     }
     else {echo $direcoty."<br>";}
    }
      

  7.   

    上面的$stream应该是$ftp_stream,我已经改过来了
    但是上传以后什么也显示不出来啊
      

  8.   

    faintfor($i=0;$i<count($result);$i++)
       {if ($result[$i]!='.' || $result[$i]!='..') happy($ftp_stream,$result[$i]);  }
      

  9.   

    谢谢各位这么关心,我的问题基本上已经解决了。
    <?
    function happy($ftp_stream,$directory,$i,$link)
    {
     if(is_dir($directory))
     {  $result=ftp_nlist($ftp_stream,$directory);
      for ($j=0;$j<=count($result);$j++){                                       happy($ftp_stream,$result[$j],$i,$link);
                                        }
     }
     else { echo $directory."<br>";}
    }
    ?>
    <?
    include ("./class.php");
    $ftp_server="ftp.math.sdu.edu.cn";
    $username="***";
    $password="*********";
    $ftp_stream=ftp_connect($ftp_server,21);
    $login=ftp_login($ftp_stream,$username,$password);
    if(!$login||!$ftp_stream){
                             echo "cannot connect to $ftp_server";
                             echo "try again";
                             }
    else
                             {
                             echo "connect to $ftp_server<br>";
                             }$this=ftp_pwd($ftp_stream);
    $result=ftp_nlist($ftp_stream,$this);
    for ($i=0;$i<=count($result);$i++)
    {if (is_dir($result[$i]))
     {happy($ftp_stream,$result[$i],$i,$link);}
     else {echo $result[$i]."<br>";}
    ?>
    目前已经都能返回了,但是还有一个问题,就是每次返回的文件的数目都不同。呵呵~~,又给各位添麻烦了。真的很感谢各位大虾的帮忙。