|
|
|
|
|
для: [CHOL]Scorpion
(01.08.2005 в 08:12)
| | >PS: а учесть уже проиндексированные ссылки это не проблема.
>Просто ещё один массив, а в нём значение - 0 (ссылка не
>проиндексирована) и 1 (проиндекскирована).
Да я тоже про это подумал :) | |
|
|
|
|
|
|
|
для: cheops
(31.07.2005 в 22:55)
| | Может быть ... Попробую рекурсию (хотя хотел от неё уйти :()
PS: а учесть уже проиндексированные ссылки это не проблема. Просто ещё один массив, а в нём значение - 0 (ссылка не проиндексирована) и 1 (проиндекскирована). | |
|
|
|
|
|
|
|
для: [CHOL]Scorpion
(31.07.2005 в 21:40)
| | Вот чего не понятно, ведь функция index_page() вызывается только один раз, и следовательно будет проанализирован только корень - ведь функция не пойдёт по ссылкам, которые добавляются по ходу дела... ссылки это как деревья, здесь нужно что-то рекурсивное, причём с контролем, чтобы не было зацикливаниея... Т.е. он проанализирует ссылки на корневой странице и не пойдёт дальше, так как array_walk() скорее всего не учитывает уже элементы массива добавленные после её вызова. | |
|
|
|
|
|
|
|
для: cheops
(31.07.2005 в 18:22)
| | Спасибо за совет.
Только всё это будет напрасно, елси не понять в чём баг ... По сути, при каждом прохождении в массив дописываются новые уникальные ссылки ... Ну а arry_walk пока не дойдёт до конца массива, не должна прерываться. Проблема в том, что я недощитался ссылок. И дело не в том что глючат регулярки. Скажем он ссылку определяет, но явно не переходит по ней для индексирования ... в то время как по другой ссылке переходит. Вот я и думаю, в чём тут проблема ... | |
|
|
|
|
|
|
|
для: [CHOL]Scorpion
(31.07.2005 в 17:20)
| | Зря конструкции .+ в регулярных выражениях используете - добра от них не дождётесь, лучше заменить на ограничения [^...] где ... - символ ограничения. | |
|
|
|
|
|
|
| Предисловие:
возникла необходимость сделать поиск по сайту. Разуеется делать поиск по каждому разделу вручную как то обламывает.
Написал скриптик, протестил, работает, но как то коряво. Тоесть стартовую страницу сканит, сслки находит все. По второму заходу и так далее недощитался достаточно многих ссылок.
Вот код, елси кто может помочь советом как заставить скрипт работать как надо, поделитесь мнением.
<?php
$links = array("http://".$_SERVER['SERVER_NAME']);
function index_page($links){
$url = $links;
$fd = @fopen($url, "r");
if ($fd) while (!feof ($fd)) $text .= fgets($fd, 4096);
if ($fd){
$text = str_replace("\"","",$text);
$text = str_replace("'","",$text);
preg_match_all("/<a.+href.+>.+<\/a>/i",$text,$matches);
$pli = 0;
if (count($matches) != 0){
for ($i=0; $i<count($matches); $i++){
for ($j=0; $j<count($matches[$i]); $j++){
if (ereg("<a.+href=(.+)>.+</a>",$matches[$i][$j],$regs)){
$regs[1] = str_replace("\"","",$regs[1]);
$regs[1] = eregi_replace("[[:space:]].+","",$regs[1]);
if (eregi("^http://",$regs[1]) && !eregi("^http://".$_SERVER['SERVER_NAME'],$regs[1])){
unset($regs[1]);
}
if (eregi("^www",$regs[1]) && !eregi("^".$_SERVER['SERVER_NAME'],$regs[1])){
unset($regs[1]);
}
if (eregi("mailto",$regs[1])){
unset($regs[1]);
}
if (IsSet($regs[1]) && !Empty($regs[1])){
if (!eregi("^www",$regs[1]) && !eregi("^http",$regs[1])){
$regs[1] = "http://".$_SERVER['SERVER_NAME']."/".$regs[1];
}
if (eregi("^www",$regs[1])){
$regs[1] = "http://".$regs[1];
}
if (!in_array($regs[1],$GLOBALS['links'])){
array_push($GLOBALS['links'],$regs[1]);
echo $regs[1]."<BR>";
}
}
}
}
}
}
}
}
array_walk($links,'index_page');
?>
|
| |
|
|
|
|