Очень прошу не игнорировать данное сообщение и помочь!
Суть в том чтобы сформировать массив ссылок типа
[страница-1 ] = /*ссылается на*/ 2, 3, 4;
[страница-2 ] = 1, 3, 4;
...
[страница-4 ] = 1, 2, 3;
следующим способом:
$url = 'http://www.site.ru';
$links = get_links($url);
а дальше зайти на каждую найденную ссылку и сделать тоже самое!!
Очень важно! Уже 2 недели не могу сделать!
Примечание:
Maelstorm, спасибо за ответ!
для анализа ссыки я использую функцию parse_url($url)
для получения контента страницы и использую функцию file_get_contents($url)
для ищу ссылки в тексте по регулярному выражению
$pattern = '#<a\s+href\s*=\s*["\']?([^\s>]+?)["\']?[.]*?>(.*?)</a>#i';
preg_match_all($pattern2, $content, $matches);
Проблема в том чтобы делать все эти операции рекурсивно, при этом не парситьодни и те же страницы два раза.
Заранее спасибо!
Примечание:
Сделал как сказали, неиче не выходит((((
$this->all[$this->url] = array();
$ok = $this->cycle();
if($ok){
header('Content-Type: text/plain');
print_r($this->links);
}
function cycle(){
foreach($this->all as $key => $val){
if(!isset($this->complete[$key])){
$tmp = $this->get_links($key);
$this->links[$key] = $tmp[$key];
foreach($this->links[$key] as $l_key => $l_val){
if(!isset($this->all[$l_val])){
$this->all[$l_val] = array();
}
}
$this->complete[$key] = array();
}
}
foreach($this->all as $key => $val){
if(!isset($this->complete[$key])){
$this->cycle();
}else{
return true;
}
}
}
function get_links($link){
$content = file_get_contents($link);
// ссылка, href, анкор
$pattern = '#<a\s+href\s*=\s*["\']?([^\s>]+?)["\']?[.]*?>(.*?)</a>#i';
// ссылка, href
$pattern2 = '#<a[^>]*href=["\'\s]*([^>"\'\s]+)["\'\s]*[^>]*>#i';
$count = preg_match_all($pattern2, $content, $matches);
$pages[$link] = $matches[1];
return $pages;
}
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.