2017-01-09 52 views
2

這將打印一個目錄內容的列表。但是,該目錄包含圖像和子目錄,我無法區分它們。可以捲曲DIRLISTONLY區分文件和目錄嗎?

header('Content-Type: text/plain'); 

$c = curl_init(); 
curl_setopt($c, CURLOPT_URL, 'ftp://username:[email protected]/Images/'); 
curl_setopt($c, CURLOPT_DIRLISTONLY, TRUE); 
$r = curl_exec($c); 
echo $r; 

搜索在cURL郵件列表中顯示someone else asking the same question,但我找不到答案。

理想情況下,我想接收內容列表作爲PHP對象或數組,而不是作爲我需要再次解析的文本。文件名是不太可能包含換行符,所以我可能會分裂那些,但感覺脆弱。

我實際上想要要做的就是下載整個目錄及其所有內容。

+0

所以如果'$ r'包含目錄和文件列表,而不是檢查項目是否具有擴展名。如果擴展不夠,你需要檢查每個文件的MIME類型 – Justinas

+0

*我真的想要下載整個目錄及其所有內容* ...如果可能的話使用ssh壓縮目錄並通過zip下載捲曲......如果不是......使用fpt_ *函數並編寫包裝器......但你爲什麼要這樣做? – donald123

+0

我只有FTP訪問遠程服務器@ donald123。有時我會想要下載它的一切,有時我只想讀取文件列表並下載其中的一部分。 – TRiG

回答

1

方法1

使用FTP Functions相反。您可以從ftp_nlist從ftp獲取列表,並檢查文件或文件夾是否與ftp_chdir。這是例子形式php.net:

function ftp_is_dir($conn_id, $dir) 
{ 
    if(@ftp_chdir($conn_id, $dir)) { 
     ftp_chdir($conn_id, '/../'); 
     return true; 
    } else { 
     return false; 
    } 
} 

方法2

,說的文件夾列表和文件中所要求的目錄列表中,你在服務器上創建的PHP文件。例如獲取domain.com/get-list.php?folder=something/another-folder的列表,並使用json_encode對列表進行編碼,然後在json_decode的服務器上對其進行解碼。

此方法可以在沒有FTP的情況下工作。

方法3

您可以使用is_dir — Tells whether the filename is a directory

自PHP 5.0.0,這個功能也可以用一些URL 包裝使用。請參閱支持的協議和包裝以確定哪些包裝支持stat()系列功能。

+1

奇怪的是,標準的lib還沒有創建一個類包裝這些功能呢... – Rafael

+1

我有這個系統(我應該在問題中澄清)的只讀訪問,所以方法2已經出來,但另一個兩個看起來很有希我會嘗試看看。 – TRiG