Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Скрипт индексации страниц домена. Затруднение.

Сообщения:  [1-6] 

 
 автор: cheops   (01.08.2005 в 11:30)   письмо автору
 
   для: [CHOL]Scorpion   (01.08.2005 в 08:12)
 

>PS: а учесть уже проиндексированные ссылки это не проблема.
>Просто ещё один массив, а в нём значение - 0 (ссылка не
>проиндексирована) и 1 (проиндекскирована).
Да я тоже про это подумал :)

   
 
 автор: [CHOL]Scorpion   (01.08.2005 в 08:12)   письмо автору
 
   для: cheops   (31.07.2005 в 22:55)
 

Может быть ... Попробую рекурсию (хотя хотел от неё уйти :()

PS: а учесть уже проиндексированные ссылки это не проблема. Просто ещё один массив, а в нём значение - 0 (ссылка не проиндексирована) и 1 (проиндекскирована).

   
 
 автор: cheops   (31.07.2005 в 22:55)   письмо автору
 
   для: [CHOL]Scorpion   (31.07.2005 в 21:40)
 

Вот чего не понятно, ведь функция index_page() вызывается только один раз, и следовательно будет проанализирован только корень - ведь функция не пойдёт по ссылкам, которые добавляются по ходу дела... ссылки это как деревья, здесь нужно что-то рекурсивное, причём с контролем, чтобы не было зацикливаниея... Т.е. он проанализирует ссылки на корневой странице и не пойдёт дальше, так как array_walk() скорее всего не учитывает уже элементы массива добавленные после её вызова.

   
 
 автор: [CHOL]Scorpion   (31.07.2005 в 21:40)   письмо автору
 
   для: cheops   (31.07.2005 в 18:22)
 

Спасибо за совет.

Только всё это будет напрасно, елси не понять в чём баг ... По сути, при каждом прохождении в массив дописываются новые уникальные ссылки ... Ну а arry_walk пока не дойдёт до конца массива, не должна прерываться. Проблема в том, что я недощитался ссылок. И дело не в том что глючат регулярки. Скажем он ссылку определяет, но явно не переходит по ней для индексирования ... в то время как по другой ссылке переходит. Вот я и думаю, в чём тут проблема ...

   
 
 автор: cheops   (31.07.2005 в 18:22)   письмо автору
 
   для: [CHOL]Scorpion   (31.07.2005 в 17:20)
 

Зря конструкции .+ в регулярных выражениях используете - добра от них не дождётесь, лучше заменить на ограничения [^...] где ... - символ ограничения.

   
 
 автор: [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($fd4096); 

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');


?>

   

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования