2010-04-19 160 views
3

我无法弄清楚如何使用卷曲的FTP,特别是如何从我的PHP代码发出FTP命令:从PHP CURL使用FTP

<?php 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, 'ftp://ftp.microsoft.com/'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    curl_setopt($ch,CURLOPT_POSTQUOTE,array('CWD bussys/','LIST')); /* ?!! */ 

    echo '<hr><pre>'.htmlspecialchars(curl_exec($ch)).'</pre><hr>'; 
?> 

在我上面的例子我想获得一个目录列表的bussys,而是我得到主(FTP根)目录的清单。

顺便说一句,我尝试了以下组合:

  • LIST bussys/
  • CWD bussys, LIST -a
+0

有没有尝试过使用PHP的FTP功能,而不是使用CURL它呢? – 2010-04-20 08:22:08

+0

是的,但它们会造成某些问题。此外,由于多种原因(包括速度和性能),CURL FTP优于内置PHP FTP功能。 – Christian 2010-04-20 09:37:42

+0

试试这个问题的建议:http://stackoverflow.com/questions/1178425/download-a-file-from-ftp-using-curl-and-php – Ezra 2011-06-19 22:09:22

回答

-1

如果你想与卷曲的工作,使用CURLOPT_CUSTOMREQUEST选项。

请参阅下面的示例代码。

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, "ftp://192.168.0.129"); 
curl_setopt($curl, CURLOPT_USERPWD, "sru:sru"); 
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1) ; 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'CWD /a'); // change directory 
curl_exec($curl); 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'MLSD'); // get directory list 
$ftp_result=curl_exec($curl); 
echo $ftp_result; 

它返回

type=dir;modify=20130319024302; test 

测试是一个子目录。

我认为你必须使用ftp_connect。

2

我搜索了一种方法来更改工作目录,但找不到任何东西。

最终为我工作的是在CURLOPT_URL包括文件夹。此外,单独的文件夹还不够,我不得不包含尾随的正斜杠/

因此,如果我的工作适合你,那么设置下面的url结构和CURLOPT_FTPLISTONLY应该会得到你的内容bussys/

curl_setopt($ch, CURLOPT_URL, 'ftp://ftp.microsoft.com/bussys/'); curl_setopt($ch, CURLOPT_FTPLISTONLY, TRUE);

而且我并不需要CURLOPT_POSTQUOTECWD选项获取嵌套目录中的内容。