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

Форум PHP

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

 

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

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

тема: Как избавиться от функции?

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

 
 автор: BinLaden   (04.02.2009 в 02:39)   письмо автору
 
   для: elenaki   (03.02.2009 в 17:47)
 

Название функции -- IsBot

  Ответить  
 
 автор: elenaki   (03.02.2009 в 17:47)   письмо автору
 
   для: Владимир55   (03.02.2009 в 14:29)
 

как раз наоборот - неопределившийся юзер приравнивается к человеку. функция ведь истину
возвращает, скрипт продолжает работать. а если б к роботу приравнивался, то выдало бы false

  Ответить  
 
 автор: BinLaden   (03.02.2009 в 14:45)   письмо автору
 
   для: Владимир55   (03.02.2009 в 14:29)
 

Так, так

  Ответить  
 
 автор: Владимир55   (03.02.2009 в 14:29)   письмо автору
 
   для: elenaki   (03.02.2009 в 13:54)
 

У них неопределившийся юзер приравнивается к роботу...
Может, это и правильно. А может, и не правильно.

Вероятно, тут нужно какие-то волевое решение, ибо за ним может быть и робот, и посетитель, пожелавший остаться неизвестным и что-то сделавший с броузером. И просто сбой в передаче данх от броузера.

Так?

  Ответить  
 
 автор: elenaki   (03.02.2009 в 13:54)   письмо автору
 
   для: Владимир55   (03.02.2009 в 13:02)
 

if ($user == "") return true; - зачем он был нужен?)

сами же пишите, что если посетитель не бот, работа продолжается. а если он не определился? т.е. $user равен пустой строке? тогда функция вернет true и работа скрипта продолжится.

  Ответить  
 
 автор: Владимир55   (03.02.2009 в 13:02)   письмо автору
 
 

На одном из сервисов я позаимствовал код контроля прихода роботов. Вот такой:
     function IsBot($filename)
     {
             global $_SERVER;
             $user = $_SERVER["HTTP_USER_AGENT"];
             if ($user == "")
             return true;
             if (file_exists($filename))
             {
                     $f = file($filename);
                     foreach ($f as $v)
                     {
                             $v = preg_quote(trim(preg_replace("/[\r\n]+/", "", $v)));
                             if (eregi($v, $user))
                             return true;
                     }
             }
             return false;
     }


     if (!IsBot("user_agents.txt"))        // Это не роботы 
     {
         // Дальнейшая работа скрипта    
     }

Алгоритм его прост: в файле user_agents.txt находится список ботов, и если данный посетитель не относится к этому списку, то работа скрипта продолжается.

Я содержимое файла user_agents.txt перенес в базу и извлекаю его отттуда, превращая в массив $f . При этом мне хочется совсем избавиться от этой функции, заменив ее совокупностью линейных операторов. У меня получился вот такой код:
    // массив $f получен  из базы и содержит ту же информацию, что и файл user_agents.txt 
    $user = $_SERVER["HTTP_USER_AGENT"]; 
    $flag false; // Изначально предполагаем, что это не робот
    
    foreach ($f as $v)
    {
        $v = preg_quote(trim(preg_replace("/[\r\n]+/", "", $v)));
        if (eregi($v, $user)) $flag true;
    }
     

     if (!$flag)        // Это не роботы 
     {
         // Дальнейшая работа скрипта    
     }


Верно ли составлен приведенный код?
(В частности, из него исчез if ($user == "") return true; - зачем он был нужен?)

  Ответить  

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

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

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