Проверка сайтов на noffolow и noindex средствами пхп

Тема в разделе "PHP", создана пользователем BIZON, 6 янв 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. BIZON

    BIZON Перезагрузка...

    Moderator
    • Супермодератор
    Регистр.:
    31 окт 2006
    Сообщения:
    562
    Симпатии:
    1.527
    В общем нашел вот такой код:
    PHP:
    <?php 

      
    //Искомый URL страницы 
      
    $url "http://45.ru/forum/";   

      
    //Текст в котором мы ищем ссылку 
      
    $str 'Т.е. ссылка на должна находится на странице ввиде:<noindex> TEXT TEXT<a href="http://45.ru/forum/" title="45.ru - юмор и развлечения" rel="nofollow">юмор и развлечения</a> TEXT TEXT</noindex>'
       
      
    $noindex_pattern "|<noindex>.+?<a[\s]+href=\"".preg_quote($url)."\"[^>]+>.+?</a>.+?</noindex>|is"
      
    $nofollow_pattern "|<a[^>]+href=\"".preg_quote($url)."\"[^>]+>.+?</a>|is"
       
      
    //Проверка на закл. в тегах noindex 
      
    if(preg_match($noindex_pattern$str$out)) 
      { 
        
    $error .= "Недопустимая ссылка: ссылка находится в тегах noindex.\n"
      }   
       
      
    //Проверка на атрибут nofollow 
      
    if(preg_match($nofollow_pattern$str$out)) 
      { 
        
    // Проверяем нет ли атрибута nofollow 
        
    if(strpos($out[0], "nofollow") !== false
          
    $error .= "Недопустимая ссылка: ссылка имеет параметр rel=nofollow.\n"
      }  
       
      
    //Если существует ошибка, выводим её 
      
    if($error) exit("<pre>".$error."</pre>"); 
       
    ?>
    Как бы сделать, что б скрипт мог проверять и сортировать большие партии сайтов на наличие "noffolow и noindex"? (от 10к)
    Но не конкретной страницы которая изначально к примеру импортируется, а нескольких..

    пс
    Если бесплатно никто не поможет, придется платить.. :D
     
  2. Karlasan

    Karlasan Постоялец

    Регистр.:
    7 дек 2007
    Сообщения:
    77
    Симпатии:
    156
    чтото вроде этого:

    PHP:
    <?php
      
    //Искомый URL страницы  
      
    $url=file("./url.txt"); //url.txt содержит по урлу на строку
      
      
    $sites=file("./sites.txt"); //sites.txt содержит урлы проверяемых сайтов
      
      
    $log=fopen("./log.txt","w"); //log.txt - сюда пишем ошибки

      
    for($i=0;$i<sizeof($sites);$i++)
      {
        
    //Текст в котором мы ищем ссылку  
        
    $str =file_get_contents($sites[$i]); 
        
    $error=''
        for(
    $j=0;$j<sizeof($url);$j++)
        {
            
    $noindex_pattern "|<noindex>.+?<a[\s]+href=\"".preg_quote($url[$j])."\"[^>]+>.+?</a>.+?</noindex>|is";  
            
    $nofollow_pattern "|<a[^>]+href=\"".preg_quote($url[$j])."\"[^>]+>.+?</a>|is";  
            
    //Проверка на закл. в тегах noindex  
            
    if(preg_match($noindex_pattern$str$out))  
            {  
                
    $error .= $sites[$i]." : ".$url[$j]." в noindex\r\n";
            }    
        
            
    //Проверка на атрибут nofollow  
            
    if(preg_match($nofollow_pattern$str$out))  
            {  
                
    // Проверяем нет ли атрибута nofollow  
                
    if(strpos($out[0], "nofollow") !== false)  
                
    $error .=$sites[$i]." : ".$url[$j]." в nofollow\r\n";
            }   
        }    
        
    //Если существует ошибка, выводим её  
        
    if($error!=''fwrite($log,$error);
      }
      
    fclose($log);
        
    ?>
     
    BIZON нравится это.
  3. Brevis

    Brevis Создатель

    Регистр.:
    6 окт 2007
    Сообщения:
    16
    Симпатии:
    7
    Если есть какие-либо ограничения на сервере, например время выполнения скрипта, объем занимаемой памяти итд, стоит воспользоваться другим методом, основанным на очереди.
    Пример: есть скрипт, запускающийся кроном каждую минуту. За один запуск он проверяет не все сайты, а фиксированное число, скажем 100. Берет сайты из очереди -- базы или файла. И есть другой скрипт, который управляет очередью.
     
  4. Karlasan

    Karlasan Постоялец

    Регистр.:
    7 дек 2007
    Сообщения:
    77
    Симпатии:
    156
    кстати про это я забыл :)
    на случай ограничения времени работы скрипта надо в самое начало написать
    PHP:
    <?
    @
    ignore_user_abort(1);
    @
    ini_set('max_execution_time',0);
    @
    set_time_limit(0);
    ?>
    на подавляющем большинстве хостингов скрипт отработает до конца, даже если юзер закроет браузер.
     
    BIZON нравится это.
  5. Flock

    Flock Постоялец

    Регистр.:
    16 июн 2007
    Сообщения:
    142
    Симпатии:
    44
    Для больших объемов, лучше переписать этот код на perl и задействовать многопоточность.
     
Статус темы:
Закрыта.