用于列出文件和目录的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, '*.*' );