ftp_nlist -- 返回给定目录的文件列表
array ftp_nlist ( resource ftp_stream, string directory)
如果成功则返回给定目录下的文件名组成的数组,否则返回 FALSE
Here comes an example. Make sure you have the ftp connection. $dir=ftp_pwd($connid); 
$list=Array(); 
$list=ftp_nlist($connid, "$dir"); 
$i=0; do{ 
   echo $list[$i], "
"; $i++; 
}while($list[$i]);

解决方案 »

  1.   

    不行啊
    ftp_nlist只能列出文件列表
    但是不能列出目录~!!
      

  2.   

    ftp_nlist不单单返回文件列表,返回值中还包含目录列表,下面代码可以验证是否是子目录
            $dir=ftp_pwd($this->conn_id); 
            @ftp_chdir($this->conn_id, $dir);
            $dir = ftp_pwd($this->conn_id);
            $list=Array(); 
            $list=ftp_nlist($this->conn_id, "$dir"); 
            $files = Array();
            $folders = Array();
            for($i = 0; $i != sizeof($list); $i++)
            {
                $entry = str_replace("//", "", $list[$i]);
                if(@ftp_chdir($this->conn_id, $entry))
                {//目录
                    $folders[] = $entry;
                    ftp_chdir($this->conn_id, $dir);
                }
                else
                {
                    $files[] = $entry;
                }
            }
      

  3.   

    $cartella = ftp_pwd($conn_id);
    $list = Array(); 
    $list = ftp_nlist($conn_id, "$cartella");
    while(list($chiave,$valore) = each($list)) {
    $dir = $conn_id."/".$valore;
    if( is_dir($dir) && $dir != "." && $dir != "..") {
     //$dir是目录
    }
    }
      

  4.   

    用ftp_rawlist 
    $dir=ftp_pwd($this->conn_id); 
    $dirlist = ftp_rawlist($conn_id,"$dir"); 
    for($i=0;$i<count($dirlist);$i++) { 
            $$dirline=$dirlist[$i]; $dirline=ereg_replace(" +",' ',$dirline);
    $isdir=0;
    if (ereg('^d',$dirline)) 
    {
    //$dirline是目录
    }
     
    }
      

  5.   

    还是不行
    如果说ftp_nlist不单单返回文件列表,返回值中还包含目录列表
    那么用下面的语句为什么只能列出文件,却没有目录
    $list=ftp_nlist($ftp,ftp_pwd($ftp));
    for($i=0;$i<count($list);$i++)
    {echo $list[$i];}
      

  6.   

    我用了你说的第二种方法也还是不行
    $cartella = ftp_pwd($conn_id);
    $list = Array(); 
    $list = ftp_nlist($conn_id, "$cartella");
    while(list($chiave,$valore) = each($list)) {
    $dir = $conn_id."/".$valore;
    if( is_dir($dir) && $dir != "." && $dir != "..") {
     //$dir是目录
    }
    }
      

  7.   

    if($ftp=ftp_connect("ip",21))
     { ftp_login($ftp, "user", "pwd");
     $sArray= ftp_rawlist($ftp, "./");
     for($i=0;$i<count($sArray);$i++)
       {
         if($sArray[$i][0]=="d") echo "$sArray[$i]";//这时候显示出来的就是文件夹的名字
       }
     }这个方法从原理上来讲是个笨方法:
    把目录下面说得文件和文件夹的名字都写道一个数组sArray里面。PHP获得一个文件或者一个文件夹的信息的时候,放在变量最前头的都是有关于这个文件和文件夹的属性,比如要是文件必然是以d......什么什么开头的。你可以打印出来看看,具体的我忘了。通过这个标志,你就能判断出哪个东西是文件哪个是文件夹了。以前我写过一个用PHP来管理FTP的页面,就是这么判断的
      

  8.   

    to wakefun
    谢谢你,这种方法的确可以判断出哪个是文件夹
    但是我只想列出文件夹的名字改怎么办??
    echo "$sArray[$i]";
    这个输出的还包括与文件夹有关的一些信息
    怎么把这些没用得去掉??
      

  9.   

    用ftp_rawlist 
    $dir=ftp_pwd($this->conn_id); 
    $dirlist = ftp_rawlist($conn_id,"$dir"); 
    for($i=0;$i<count($dirlist);$i++) { 
            $$dirline=$dirlist[$i]; $dirline=ereg_replace(" +",' ',$dirline);
    $isdir=0;
    if (ereg('^d',$dirline)) 
    {
    //$dirline是目录
    }
     
    }
      

  10.   

    <?
    /////////////////////////////////////////////////////////////////////////////////////////
    // Directory list Class                                                                //
    // Written by Robert Boone                                                             //
    /////////////////////////////////////////////////////////////////////////////////////////
    //                                                                                     //
    // This is a basic class to list the content of directories.                           //
    // This class is written for UNIX file systems but could work in                       //
    // DOS with a few changes.                                                             //
    //                                                                                     //
    //                                                                                     //
    //                                                                                     //
    // Method SetDir($path) - Path of directory: Returns nothing                           //
    // Method GetAll() - Gets list of folders and files in set directory: Returns Array    //
    // Method GetFolders() - Gets list of all folders in set directory: Returns Array      //
    // Method GetFiles() - Gets list of all files in set directory: Returns Array          //
    // Method GetFiles($ext) - Gets list of files with .$ext: Returns Array                //
    //                                                                                     //
    /////////////////////////////////////////////////////////////////////////////////////////
    class Dir {
    // private
    var $FOLDERS = array();
    var $FILES = array();
    var $ALL = array();
    var $DIR;

    // public
    function SetDir($dir) {
    $this->DIR = escapeshellcmd($dir);
    } function GetAll() {

    unset($this->ALL);
    exec("ls ".$this->DIR,$filename); for ($count = 0; $count <= (sizeof($filename)-1); $count++) {
    $this->ALL[] = $filename[$count];

    }
    return $this->ALL;
    }

    function GetFolders() {
    unset($this->FOLDERS);
    exec("ls ".$this->DIR,$filename); for ($count = 0; $count <= (sizeof($filename)-1); $count++) {
    if (is_dir($this->DIR."/".$filename[$count])) {
    $this->FOLDERS[] = $filename[$count];

    }
    }
    return $this->FOLDERS;
    } function GetFiles() {
    unset($this->FILES);
    exec("ls ".$this->DIR,$filename); for ($count = 0; $count <= (sizeof($filename)-1); $count++) {
    if (is_file($this->DIR."/".$filename[$count])) {
    $this->FILES[] = $filename[$count];

    }
    }
    return $this->FILES;
    }        function GetFiles($include) {
            unset($this->FILES);
    exec("ls ".$this->DIR,$filename);
                    for ($count = 0; $count <= (sizeof($filename)-1); $count++) {
                    if (is_file($this->DIR."/".$filename[$count]) AND eregi($include, $filename[$count])) {
    $this->FILES[] = $filename[$count];
    }
      }
    return $this->FILES;
            }}
    ?>
      

  11.   

    to allen830826(allen) 剩下的信息判断很容了啊。每段信息中间都是有空格的,正则表达式啊。
      

  12.   

    更正一下不是正则,应该是用
    $Arr = split(" ", $sArray[$i]);来切开每段信息获得文件名称
      

  13.   

    to wakefun(睡不着)
    如果文件夹的名字中间有空格改怎么办??
    $Arr = split(" ", $sArray[$i]);
    岂不是把文件夹名字也给分开了??