代码之家  ›  专栏  ›  技术社区  ›  soulmerge

如何区分FTP服务器上的文件和文件夹

  •  2
  • soulmerge  · 技术社区  · 15 年前

    我想使用PHP列出FTP服务器上的所有文件。根据 RFC 959 FTP命令 LIST 允许在文件/文件夹上打印任意人类可读的信息,这似乎使得无法正确确定文件类型。但是其他FTP客户机如何区分文件和文件夹呢?有没有不成文的标准?

    4 回复  |  直到 15 年前
        1
  •  1
  •   soulmerge    15 年前

    我最后找到了实现所需行为的ftp协议的扩展:该命令称为mlsd,可以在 page 23 of RFC 3659 . 我将使用它作为默认值,并尝试分析 LIST 好像它是由 ls -l 作为后退。

        2
  •  0
  •   0fnt    15 年前

    我认为很大程度上取决于ftp服务器。我学院的FTP服务器以以下格式向“ls”命令提供输出:

    drwxr-xr-x    2 5609     1510         1896 Oct 31  2007 practice
    -rw-r--r--    1 5609     1510          646 Feb 08  2009 prgrm1.c
    

    这清楚地表明实践是一个目录,而prgrm1.c是一个文件。

        3
  •  0
  •   ghostdog74    15 年前

    你可以使用 ftp_rawlist() . 获取以“d”(表示目录)开头的项,例如

    $ftp_server="someserver";
    $ftp_user_name="someuser";
    $ftp_user_pass="somepassword";
    $conn_id = ftp_connect($ftp_server);
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    if ((!$conn_id) || (!$login_result)) {
        echo "FTP connection has failed!";
        echo "Attempted to connect to $ftp_server for user $ftp_user_name";
        exit;
    } else {
        echo "Connected to $ftp_server, for user $ftp_user_name";
        $buff = ftp_rawlist($conn_id, '/');
        $dirs = preg_grep("/^d/",$buff);
        print_r($dirs);
    
    }
    
        4
  •  -1
  •   bcosca    15 年前

    为什么不做 CD 在文件/路径上?如果发生错误,它是一个文件。