2011-07-02 65 views
2

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

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

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

有没有办法获得2个独立的数组,1只包含文件和其他只是目录。

+0

没有,ftp_nlist只返回名称的一个列表,你不能说,如果那些目录或文件。您可能需要查看FTP网址封装器:http://php.net/manual/en/wrappers.ftp。例如,它支持'is_dir()'。另见http://www.php.net/manual/en/function.ftp-rawlist.php。 – hakre

回答

2

你可以遍历数组,并检查wheter该项目是一个目录使用函数像

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()。

3

the documentation

directory

的目录中列出。 该参数还可以包含参数,例如。 ftp_nlist($ conn_id,“-la/your/dir”);请注意,此参数不会转义,因此可能会出现包含空格和其他字符的文件名问题。

因此执行ftp_nlist两次:一次提供只给出文件的参数,然后提供只给出目录的参数。 这将依靠系统所在的FTP服务器站点

或者,您可以使用使用ftp_chdirthis more verbose solution或使用ftp_sizethis one

2

你试过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之类的内容。

1

可以对您需要的文件进行图案匹配。如果您能够依赖具有扩展名和目录的文件,而不使用“。”在,你可以得到所有的文件名,而只是像这样:

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

相关问题