【问题标题】:ftp_nlist ... how to know if it's a file or a folder?ftp_nlist ...如何知道它是文件还是文件夹?
【发布时间】:2016-07-11 19:19:08
【问题描述】:

我正在编写一个从 FTP 下载的脚本.. 在表格中我需要显示文件和文件夹.. 使用 ftp_nlist,他们走到了一起,但我想知道谁是谁 .. 我找不到一个简单的方法来做到这一点:

$contents = ftp_nlist($connection, $rep);
$dossiers =array();
$fichiers = array();
foreach($contents as $content){
    //if folder
    if (is_folder($content)) $dossiers[] = $content;
    //si file
    if(is_filex($content)) $fichiers[] = $content;
}

当然 is_file 和 is_dir 不适用于远程文件...

我找到了一些 ftp_rawlist 和每个结果的大小.. 像这样:

  if($result['size']== 0){ //is dir }

但万一是空文件???

那么通过什么 id 可以知道什么是文件夹,什么是文件? 谢谢!

【问题讨论】:

    标签: php ftp


    【解决方案1】:

    我遇到了同样的问题,这是我的解决方案:

    $conn = ftp_connect('my_ftp_host');
    ftp_login($conn,  'my_user', 'my_password');
    
    $path       = '/';
    
    // Get lists
    $nlist  = ftp_nlist($conn, $path);
    $rawlist    = ftp_rawlist($conn, $path);
    
    $ftp_dirs   = array();
    
    for ($i = 0; $i < count($nlist) - 1; $i++) 
    { 
        if($rawlist[$i][0] == 'd')
        {
            $ftp_dirs[] = $nlist[$i];
        }
    }
    

    我知道上面的代码可以进行优化,只做一个 FTP 请求而不是两个,但为了我的目的,这确实有效。

    对于任何寻求更清洁解决方案的人,我在 LINK 中找到了解析 ftp_rawlist 的脚本:

    功能

    function parse_ftp_rawlist($List, $Win = FALSE)
    {
      $Output = array();
      $i = 0;
      if ($Win) {
        foreach ($List as $Current) {
          ereg('([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|) +(.+)', $Current, $Split);
          if (is_array($Split)) {
            if ($Split[3] < 70) {
              $Split[3] += 2000;
            }
            else {
              $Split[3] += 1900;
            }
            $Output[$i]['isdir']     = ($Split[7] == '');
            $Output[$i]['size']      = $Split[7];
            $Output[$i]['month']     = $Split[1];
            $Output[$i]['day']       = $Split[2];
            $Output[$i]['time/year'] = $Split[3];
            $Output[$i]['name']      = $Split[8];
            $i++;
          }
        }
        return !empty($Output) ? $Output : false;
      }
      else {
        foreach ($List as $Current) {
          $Split = preg_split('[ ]', $Current, 9, PREG_SPLIT_NO_EMPTY);
          if ($Split[0] != 'total') {
            $Output[$i]['isdir']     = ($Split[0] {0} === 'd');
            $Output[$i]['perms']     = $Split[0];
            $Output[$i]['number']    = $Split[1];
            $Output[$i]['owner']     = $Split[2];
            $Output[$i]['group']     = $Split[3];
            $Output[$i]['size']      = $Split[4];
            $Output[$i]['month']     = $Split[5];
            $Output[$i]['day']       = $Split[6];
            $Output[$i]['time/year'] = $Split[7];
            $Output[$i]['name']      = $Split[8];
            $i++;
          }
        }
        return !empty($Output) ? $Output : FALSE;
      }
    }
    

    用法

    // connect to ftp server
    $res_ftp_stream = ftp_connect('my_server_ip');
    
    // login with username/password
    $login_result = ftp_login($res_ftp_stream, 'my_user_name', 'my_password');
    
    // get the file list for curent directory
    $buff = ftp_rawlist($res_ftp_stream, '/');
    
    // parse ftp_rawlist output
    $result = parse_ftp_rawlist($buff, false);
    
    // dump result
    var_dump($result);
    
    // close ftp connection
    ftp_close($res_ftp_stream);
    

    【讨论】:

      猜你喜欢
      • 2013-01-05
      • 2012-05-28
      • 2015-10-09
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 2011-10-01
      相关资源
      最近更新 更多