请注意,不要盲目相信这句话:
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返回的好像不适用。
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返回的好像不适用。
如果 $result中有 .
那么,不可避免地会出现死循环!
(你没有在自己的机器上调试过?)
$tmp[13]应该是分得的块数目(这个东西只在st_blksize上适用,具体是什么我也不大清楚),然后判断$tmp[2]信息节点以次来判断它是否是文件。我这两点不大明白,能否示下?
回楼上的大虾darkwing,因为我的这个 . 目录是我的FTP站点的目录,所以是不可能出现死循环这个问题的。不过经您这么一说,我在执行的时候好象是有点死循环的意思。是不是这个递归本身的错啊?忘大虾示下!!
谢了先
文件系统的编写。
. 指向的是当前目录,
.. 指向的是上一级目录
如果$result数组中含有 . 那么
将陷入 happy($ftpsteam,'.')的调用循环中。
这跟使用的站点无关……
因此要加入判断,剔除 . 和 ..时的递归调用。
<?
$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";
}
}
?>
<?
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>";}
}
但是上传以后什么也显示不出来啊
{if ($result[$i]!='.' || $result[$i]!='..') happy($ftp_stream,$result[$i]); }
<?
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>";}
?>
目前已经都能返回了,但是还有一个问题,就是每次返回的文件的数目都不同。呵呵~~,又给各位添麻烦了。真的很感谢各位大虾的帮忙。