Помимо некоторых небольших корректировок, которые я сделал во время тестирования, вам нужно только сделать $pages
модифицируемым (через &$pages
в объявлении функции) и передавать массив $pages
при каждом рекурсивном вызове.
public $domain_name = 'https://www.example.html';
public function dynamic_url2($url, &$pages = []){
//echo "<div>Crawling $url</div>";
$dom = new DOMDocument;
libxml_use_internal_errors(true); // for malformed html warning suppression
$dom->loadHTML(file_get_contents($url)); // this doesn't account for relative urls
$xpath = new DOMXPath($dom);
foreach ($xpath->query("//a") as $a) {
$href = $a->getAttribute('href');
//echo "<div>Found $href @ $url</div>";
if (valid_url($href)) {
$parsed = parse_url($href);
if ($parsed['host'] == $this->domain_name && !in_array($href, $pages)) {
$pages[] = $href;
//echo "<div>$href is " , (array_key_exists('query', $parsed) ? '' : 'not ') , 'dynamic</div>';
$this->dynamic_url2($href, $pages);
} else {
//echo "<div>Ignored url: $href</div>";
}
} else {
//echo "<div>Invalid url: $href</div>";
}
}
return $pages;
}
var_export($this->dynamic_url2($this->domain_name));