2010-02-05 73 views
1

目录我是相当新的卷曲和我能够获取单个文件是这样的:PHP卷曲:获取目录列表并下载连接到HTTP

$c_session = curl_init(); 

curl_setopt ($c_session, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($c_session, CURLOPT_URL, $uri); 
curl_setopt ($c_session, CURLOPT_TIMEOUT, '12'); 

$content = curl_exec($c_session); 
curl_close ($c_session); 

现在我需要能够列出目录并使用CURL下载它们。问题是我需要连接到HTTP服务器而不是FTP服务器。

回答

3

您将不得不解析由服务器生成的列表,无论这是由上面的DirectoryListing还是另一个生成链接列表的服务器端脚本。

然后解析HTML并拉出所有的href标签。

如果您依赖于另一个脚本(Director列表)的输出,您可能需要通过整齐运行HTML来生成XHTML,然后将其传递到simplexml。然后,您可以编写一个xpath查询,如'// a'并检索所有属性。

$list = array(); 
$x = new SimpleXMLElement($stringfromcurl); 
foreach ($x->xpath('//a') as $node) { 
    curl_fetch_href($x['href']); 
} 

或者...自己生成列表有点容易解析,然后做同样的处理。

这相当于做类似wget -r -l1

3

我不认为HTTP中有本地目录列表功能。最接近的是DirectoryListing,当访问文件夹URL时,Apache和其他Web服务器可能产生。但那是HTML,你必须先解析它。

更好地使用FTP或者如果可以的话,有一个服务器端脚本生成一个简单的列表,您可以下载,解析和处理。

+0

无法使用FTP。服务器端脚本的想法听起来很有希望。 – HyderA 2010-02-05 22:13:51

1

当你去一个主机/路径/如果没有index.html许多服务器将列出文件的名称和链接。并非所有服务器都配置为显示空目录。如果您要连接的服务器是,您需要屏幕抓取生成的目录列表。

查看simple_html_dom解析库。

0

服务器是否使用WebDAV?如果是这样,你可能会发现a library for PHP,可以让你这样做。然而,机会很渺茫,特别是如果你想从面向公众的网络服务器获取内容。