单独的文件&;目录


Separate file & directories in PHP

用于列出文件和目录的PHP代码。

$buff = ftp_nlist($conn_id,$dir );

$buff是两个文件的数组&目录。

有没有办法得到2个单独的数组,1只包含文件,其他只包含目录。

来自文档:

directory

要列出的目录此参数还可以包括参数,例如ftp_nlist($conn_id,"-la/your/dir"(;请注意,此参数没有转义,因此包含空格和其他字符的文件名可能存在一些问题。

因此,执行ftp_nlist两次:一次是提供只提供文件的参数,另一次是只提供目录的参数这将依赖于FTP服务器所在的系统

或者,您可以使用这个使用ftp_chdir的更详细的解决方案,或者使用ftp_size的解决方案。

您可以循环遍历数组,并使用类似的函数检查该项是否为目录

function ftp_is_dir($conn_id, $dir) {
  if (ftp_chdir($conn_id, $dir)) {
    ftp_chdir($conn_id, '..');
    return true;
  } else {
    return false;
  }
}

编辑:

另一种可能性是

<?php
function is_ftp_dir($file, $conn_id){
if(ftp_size($conn_id, $file) == '-1'){
    return true;
}else{
    return false;
}
}
?>

请注意,并不是每个ftp服务器都支持ftp_size((。

您尝试过ftp_rawlist()吗?此函数返回一个包含行的数组,如:

06-21-11  01:49PM       <DIR>          01
06-21-11  02:20PM       <DIR>          02
06-21-11  03:33AM                  456 default.html
06-21-11  04:59PM                  123 robots.txt

或者:

drwxr-xr-x   12 ftp      ftp          4096 Mar 25  1999 ACS
drwxr-xr-x   14 ftp      ftp          4096 Mar 18  2001 ATHENA
drwxr-xr-x    2 ftp      ftp          4096 Jul 10  1998 XNeXT
drwxr-xr-x    3 ftp      ftp          4096 Jul 10  1998 elib
drwxrwxr-x  349 ftp      ftp         98304 Jul 02 06:30 gnu
drwxr-xr-x    3 ftp      ftp          4096 Jul 10  1998 lpf
-rw-r--r--    1 ftp      ftp       3448992 Oct 16  2003 ls-lR
drwxr-xr-x    2 ftp      ftp          4096 Jul 10  1998 palladium
drwxr-xr-x    2 ftp      ftp          4096 Jul 10  1998 palladium2
drwxr-xr-x    2 ftp      ftp          4096 Jul 10  1998 virus

从这一点开始,您可以使用ftp_systype()函数来确定如何解释上述响应。

或者使用启发式方法,例如在Windows上,目录将包含字符串<DIR>,在Linux上,您应该找到每个目录以d开头,然后是类似rwxrwxrwx的内容。

可以对所需的文件进行模式匹配。如果你能够依赖于扩展名和目录中没有"."的文件,你可以简单地获得所有文件名:

$filenames = ftp_nlist( $conn_id, '*.*' );