Возможно ли проанализировать список каталогов веб-страницы, которая является внешней, если веб-страница доступна, и она отображает список файлов, когда я обращаюсь к нему. Я только хочу знать, можно ли динамически анализировать файлы в PHP и как? -Спасибо
Извините за непонятность. Я имею в виду список каталогов, такой как: http://www.ibiblio.org/pub/ (Index of / ..) и способность читать содержимое как массив или что-то легкое в управлении в моем скрипте
Вы можете использовать preg_match
или DomDocument
Для вашего случая:
$contents = file_get_contents("http://www.ibiblio.org/pub/"); preg_match_All("|href=[\"'](.*?)[\"']|", $contents, $hrefs); var_dump($hrefs);
Если вы хотите взглянуть на рабочую демонстрацию .
Если вы возвращаете список каталогов, полный ссылок в соответствующем документе XHTML, вы можете использовать DOMDocument
и код, например следующий, чтобы вернуть список файлов:
$doc = new DOMDocument(); $doc->preserveWhitespace = false; $doc->load('directorylisting.html'); $files = $doc->getElementsByTagName('a');
$files
теперь представляет собой список DOMElement
s, с которым вы можете выполнить итерацию и получить атрибут 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
прежнему будут соответствовать элементам, всего лишь набор массивов.
UPDATE, я проверил ваш URL ( http://www.ibiblio.org/pub/
), и он отлично работает (метод preg_match_all
).
Да, это очень возможно. Я не совсем понимаю, что вы подразумеваете под каталогом, но вы должны исследовать искатели веб-сайтов. Это, по сути, то, о чем вы просите, но написано на PHP.
PHP file_get_content сделает трюк для вас.
(Предполагая, что ваш запрос HTTP для этой страницы возвращает список файлов, как вы уже упоминали)