2011-07-02 62 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, '*.*');

相關問題