ftp_nlist ...如何知道它是文件还是文件夹?

时间:2016-07-02 15:17:01

标签: php ftp

我正在写一个脚本供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 }

但是如果是空文件???

那么知道什么是文件夹以及什么是文件的方式是什么? 谢谢!

1 个答案:

答案 0 :(得分:0)

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

$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);