Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Ищу помощи с ботами и пауками!
Форумы портала PHP.SU » » Вопросы новичков » Ищу помощи с ботами и пауками!

Страниц (1): [1]
 

1. riv - 16 Декабря, 2011 - 15:06:09 - перейти к сообщению
Доброго времени суток!

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $bot = $_SERVER['HTTP_USER_AGENT'];
  3.  
  4. $namebot = 'bot';
  5.  
  6. $post = stripos($bot, $namebot);
  7.  
  8. if ($post !== false) {
  9.     echo "Статья";
  10. } else {
  11.     echo "Регайся";
  12. }
  13. ?>


Интересует возможность реализации переменной "$namebot" не только одного значения а нескольких, как это реализовать?
У меня мысль такая но я не знаю правильно ли это если нет подскажите как сделать.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $bot = $_SERVER['HTTP_USER_AGENT'];
  4.  
  5. $findme = 'mozilla';
  6.  
  7. $pos2 = stripos($bot, $findme);
  8.  
  9. if ($pos2 !== false) {
  10.     echo "Статья";
  11. } else {
  12.  
  13. $findme = 'chrom';
  14.  
  15. $pos2 = stripos($bot, $findme);
  16.  
  17. if ($pos2 !== false) {
  18.     echo "Статья";
  19. } else {
  20.     echo "Регайся";
  21. }}
  22.  
  23. ?>
2. EuGen - 16 Декабря, 2011 - 15:10:11 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $sBot = $_SERVER['HTTP_USER_AGENT'];
  2. $rgNames=array('mozilla', 'chrom');
  3. foreach($rgNames as $sName)
  4. {
  5.    if(stripos($sBot, $sName)!==false)
  6.    {
  7.       echo("Статья");  
  8.    }
  9.    else
  10.    {
  11.       echo("Регайся");
  12.    }
  13. }
3. riv - 16 Декабря, 2011 - 15:17:10 - перейти к сообщению
EuGen Благодарю!
(Добавление)
упс потаропился с благодарю чет в Мозилле выдает
"СтатьяРегайся"
а в хроме
"СтатьяСтатья"
(Добавление)
Мне нужно если я открываю страницу мозилой или хромом выдавал "статья"
4. dmitry - 17 Декабря, 2011 - 08:19:56 - перейти к сообщению
У меня пока опыта мало, сам функции не пишу. Но в сети подбираю интересные куски кода. Этот код работает на моих сайтах очень исправно. Получает ОС, браузер и т.д.

Посмотрите, вдруг Вам будет полезен.

PHP:
скопировать код в буфер обмена
  1.  
  2. function getBrowser()
  3. {
  4.     $u_agent = $_SERVER['HTTP_USER_AGENT'];
  5.     $bname = 'Unknown';
  6.     $platform = 'Unknown';
  7.     $version= "";
  8.  
  9.     //First get the platform?
  10.     if (preg_match('/linux/i', $u_agent)) {
  11.         $platform = 'linux';
  12.     }
  13.     elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
  14.         $platform = 'mac';
  15.     }
  16.     elseif (preg_match('/windows|win32/i', $u_agent)) {
  17.         $platform = 'windows';
  18.     }
  19.    
  20.     // Next get the name of the useragent yes seperately and for good reason
  21.     if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
  22.     {
  23.         $bname = 'Internet Explorer';
  24.         $ub = "MSIE";
  25.     }
  26.     elseif(preg_match('/Firefox/i',$u_agent))
  27.     {
  28.         $bname = 'Mozilla Firefox';
  29.         $ub = "Firefox";
  30.     }
  31.     elseif(preg_match('/Chrome/i',$u_agent))
  32.     {
  33.         $bname = 'Google Chrome';
  34.         $ub = "Chrome";
  35.     }
  36.     elseif(preg_match('/Safari/i',$u_agent))
  37.     {
  38.         $bname = 'Apple Safari';
  39.         $ub = "Safari";
  40.     }
  41.     elseif(preg_match('/Opera/i',$u_agent))
  42.     {
  43.         $bname = 'Opera';
  44.         $ub = "Opera";
  45.     }
  46.     elseif(preg_match('/Netscape/i',$u_agent))
  47.     {
  48.         $bname = 'Netscape';
  49.         $ub = "Netscape";
  50.     }
  51.    
  52.     // finally get the correct version number
  53.     $known = array('Version', $ub, 'other');
  54.     $pattern = '#(?<browser>' . join('|', $known) .
  55.     ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
  56.     if (!preg_match_all($pattern, $u_agent, $matches)) {
  57.         // we have no matching number just continue
  58.     }
  59.    
  60.     // see how many we have
  61.     $i = count($matches['browser']);
  62.     if ($i != 1) {
  63.         //we will have two since we are not using 'other' argument yet
  64.         //see if version is before or after the name
  65.         if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
  66.             $version= $matches['version'][0];
  67.         }
  68.         else {
  69.             $version= $matches['version'][1];
  70.         }
  71.     }
  72.     else {
  73.         $version= $matches['version'][0];
  74.     }
  75.    
  76.     // check if we have a number
  77.     if ($version==null || $version=="") {$version="?";}
  78.    
  79.     return array(
  80.         'userAgent' => $u_agent,
  81.         'name'      => $bname,
  82.         'version'   => $version,
  83.         'platform'  => $platform,
  84.         'pattern'    => $pattern
  85.     );
  86. }
  87.  
  88.  
5. EuGen - 17 Декабря, 2011 - 12:35:33 - перейти к сообщению
riv
Ну не сказали об этом раньше. Ну да дело не за большим:
PHP:
скопировать код в буфер обмена
  1.     $sBot = $_SERVER['HTTP_USER_AGENT'];
  2.     $rgNames=array('mozilla', 'chrom');
  3.     $bFound=false;
  4.     foreach($rgNames as $sName)
  5.     {
  6.        if(stripos($sBot, $sName)!==false)
  7.        {
  8.           echo("Статья");
  9.           $bFound=true;
  10.           break;  
  11.        }
  12.     }
  13.     if(!$bFound)
  14.     {
  15.        echo("Регайся");
  16.     }
6. riv - 17 Декабря, 2011 - 14:38:42 - перейти к сообщению
EuGen Во терь то что нужно биг спс.
7. snikers987 - 17 Декабря, 2011 - 16:31:56 - перейти к сообщению
user_agent легко подменить
8. riv - 17 Декабря, 2011 - 22:24:31 - перейти к сообщению
snikers987 Ваши предложения? Улыбка
Мне нужно закрыть юзерам раздел если юзер не залогинин а боты чтоб могли индексировать.
(Добавление)
Я пропишу названия ботов в принципе и все....
9. DeepVarvar - 17 Декабря, 2011 - 22:57:11 - перейти к сообщению
Тогда лучше запишите айпишники ботов. Они статические и их не так много. Так проверка будет по тому же принципу перебора массива как показал EuGen, только с айпишниками.
10. snikers987 - 17 Декабря, 2011 - 23:31:05 - перейти к сообщению
Каких ботов ? Если поисковых то есть решение проще - robots.txt
11. riv - 18 Декабря, 2011 - 00:43:02 - перейти к сообщению
snikers987 пишет:
Каких ботов ?

Поисковых.

snikers987 пишет:
Если поисковых то есть решение проще - robots.txt

Если я на странице закрываю часть контента от не авторизованных пользователей соответственно роботы тоже не смогут проиндексировать этот контент, а мне нужно чтобы роботы индексировали. На сколько я в курсе с помощью robots.txt мне не реализовать это.
Так как я можно сказать любитель... и сильно не разбираюсь в программировании.
Я решил обратиться к Вам (спецам), чтобы Вы мне ткнули, подсказали, помогли, ну или на крайняк послали куда нибудь... (почитать). Радость
12. snikers987 - 18 Декабря, 2011 - 01:28:19 - перейти к сообщению
Цитата:

Если я на странице закрываю часть контента от не авторизованных пользователей соответственно роботы тоже не смогут проиндексировать этот контент, а мне нужно чтобы роботы индексировали. На сколько я в курсе с помощью robots.txt мне не реализовать это.

Не внимательно прочитал, верно. Тогда лучше читай совет DeepVarvar'a.
13. DeepVarvar - 18 Декабря, 2011 - 01:31:05 - перейти к сообщению
robots.txt ничего не даст. Боты не всегда первым в него заглядывают.
Так что вместо юзерагентов составляйте список айпишников.
14. riv - 18 Декабря, 2011 - 09:26:35 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.         $sBot = $_SERVER['REMOTE_ADDR'];
  2.         $rgNames=array(тут перечесление ip);
  3.         $bFound=false;
  4.         foreach($rgNames as $sName)
  5.         {
  6.            if(stripos($sBot, $sName)!==false)
  7.            {
  8.               echo("Статья");
  9.               $bFound=true;
  10.               break;  
  11.            }
  12.         }
  13.         if(!$bFound)
  14.         {
  15.            echo("Регайся");
  16.         }

Я так понимаю мне таким образом делать.
Да и подскажите где можно поискать ip ботов или вылавливать?
15. antobra - 18 Декабря, 2011 - 12:34:51 - перейти к сообщению
Есть отличный сайт Google. Там можно найти все ip.

Вылавливать трудно будет и долго. Я как то ip адресов гугла насчитал не менее 100...

 

Powered by ExBB FM 1.0 RC1