用于列出文件和目录的PHP代码。PHP中的单独文件和目录
$buff = ftp_nlist($conn_id,$dir);
$ buff是两个文件&目录的数组。
有没有办法获得2个独立的数组,1只包含文件和其他只是目录。
用于列出文件和目录的PHP代码。PHP中的单独文件和目录
$buff = ftp_nlist($conn_id,$dir);
$ buff是两个文件&目录的数组。
有没有办法获得2个独立的数组,1只包含文件和其他只是目录。
你可以遍历数组,并检查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()。
directory
的目录中列出。 该参数还可以包含参数,例如。 ftp_nlist($ conn_id,“-la/your/dir”);请注意,此参数不会转义,因此可能会出现包含空格和其他字符的文件名问题。
因此执行ftp_nlist
两次:一次提供只给出文件的参数,然后提供只给出目录的参数。 这将依靠系统所在的FTP服务器站点。
或者,您可以使用使用ftp_chdir
的this more verbose solution或使用ftp_size
的this one。
你试过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, '*.*');
没有,ftp_nlist只返回名称的一个列表,你不能说,如果那些目录或文件。您可能需要查看FTP网址封装器:http://php.net/manual/en/wrappers.ftp。例如,它支持'is_dir()'。另见http://www.php.net/manual/en/function.ftp-rawlist.php。 – hakre