用于列出文件和目录的PHP代码。
$buff = ftp_nlist($conn_id,$dir );
$ buff是两个文件和数组的数组。目录。
有没有办法获得2个单独的数组,1个只包含文件和其他只是目录。
答案 0 :(得分:3)
directory
要列出的目录。 此参数还可以包含参数,例如。 ftp_nlist($ conn_id,“ - la / your / dir”);请注意,此参数未进行转义,因此文件名可能存在一些问题,其中包含空格和其他字符。
所以执行ftp_nlist
两次:一次提供只给你文件的参数,然后提供只给你目录的参数。 这将依赖于FTP服务器站点的系统。
或者,您可以使用使用ftp_chdir
的{{3}}或使用ftp_size
的{{3}}。
答案 1 :(得分:2)
您可以循环遍历数组并使用类似
的函数检查项目是否为目录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()。
答案 2 :(得分: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
之类的内容。
答案 3 :(得分:1)
可以模式匹配您需要的文件。如果您能够依赖具有扩展名和目录而没有“。”的文件。在,您可以获得所有文件名,而不是像这样:
$filenames = ftp_nlist( $conn_id, '*.*' );