Рекурсивная функция для проверки всех ссылок на странице

Я пишу скребковые ссылки со всего сайта, включая подстраницы, и обнаружил небольшую проблему. Мне пришла в голову идея использовать рекурсивную функцию, потому что страница, которую я хочу сканировать, имеет несколько уровней. Его структура выглядит примерно так:

Level 1 reference
- Second level reference
-- Third level reference
-- Third level reference
- Second level reference
-- Third level reference
-- Third level reference
-- Third level reference
--- Level four reference

Никогда не бывает до конца ясно, есть ли более или менее скрытые под проверенной ссылкой, поэтому я пришел к идее рекурсивной функции.

Он берет ссылку на главную страницу, берет первую, и если количество ссылок на ней больше единицы, это относится к той же функции.

К сожалению, что-то пошло не так, и у меня пустая доска, как это исправить?

function scanWebsite($url) {

        $html = file_get_contents($url);
        $dom = new DOMDocument();
        @$dom->loadHTML($html);

        $xpath = new DOMXpath($dom);
        $nodes = $xpath->query("/html/body//a");

        $output = [];

        foreach($nodes as $node) {

            $url = $node->getAttribute("href");

            if (count($nodes) > 1) {

                scanWebsite("http://samplewebsite.com" .$url);

            } else {

                if (preg_match("//title/.*//", $url)) {

                    array_push($output, $url);

                }

                continue;

            }

        }

        return $output;

    }

    echo '<pre>';
    print_r(scanWebsite("http://samplewebsite.com"));
    echo '</pre>';

Я не читал его подробно, но на первый взгляд кажется, что рекурсивный вызов, который ничего не возвращает, может быть проблемой.

Don't Panic 05.07.2018 17:02

Вы не используете возвращаемое значение `scanWebsite (" samplewebsite.com ". $ Url); `

Adder 05.07.2018 17:05

Хорошо. Если код внутри цикла foreach выполняется, то count($nodes) > 1 всегда будет истинным. Вызов scanWebsite в блоке if теоретически возвращает массив, но вы его ничему не назначаете. Код в блоке else никогда не будет выполнен. После устранения этих проблем необходимо рассмотреть возможность циклических ссылок. Если у вас есть ссылки на страницы, которые вы уже просканировали, вы получите бесконечную рекурсию.

Don't Panic 05.07.2018 17:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
31
0

Другие вопросы по теме