2017-01-09 51 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