是否可以解析外部网页的目录列表,因为网页是可访问的,并且在我访问它时会显示文件列表。我只想知道是否有可能在PHP中动态解析文件以及如何? - 谢谢你
很抱歉不清楚。我的意思是目录列表,例如: http://www.ibiblio.org/pub/(索引/ ..)以及将内容作为数组或易于在我的脚本中操作的内容的能力
答案 0 :(得分:4)
您可以使用preg_match
或DomDocument
对于你的情况:
$contents = file_get_contents("http://www.ibiblio.org/pub/");
preg_match_All("|href=[\"'](.*?)[\"']|", $contents, $hrefs);
var_dump($hrefs);
如果你想看看working demo。
答案 1 :(得分:2)
如果您在正确的XHTML文档中获得了一个充满链接的目录列表,您可以使用DOMDocument
,并使用以下代码来获取文件列表:
$doc = new DOMDocument();
$doc->preserveWhitespace = false;
$doc->load('directorylisting.html');
$files = $doc->getElementsByTagName('a');
$files
现在是DOMElement
的列表,您可以迭代并获取href
属性以获取列表中文件的完整路径。
请注意,此方法需要从服务器返回的正确格式的目录列表。例如,您不能在stackoverflow.com
上执行请求并获取文件的目录列表。
如果这不起作用(可能是格式错误的HTML),您可以使用正则表达式(例如preg_match_all
)来查找<a
标记,例如:
preg_match_all('@<a href\="([a-zA-Z\.\-\_\/ ]*)">(.*)</a>@', file_get_contents('http://www.ibiblio.org/pub/'), $files);
var_dump($files);
$files
仍然是匹配的元素,只是一组数组。
更新,我使用您的网址(http://www.ibiblio.org/pub/
进行了测试)并且工作正常(preg_match_all
方法)。
答案 2 :(得分:0)
是的,这是非常可能的。我不太清楚您的目录列表是什么意思,但您应该研究网站抓取工具。这基本上就是你所要求的,但用PHP编写。
答案 3 :(得分:0)
PHP file_get_content将为您解决问题。
(假设您对此页面的http请求返回文件列表,正如您所提到的那样)