|
|
|
| На одном из сервисов я позаимствовал код контроля прихода роботов. Вот такой:
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; - зачем он был нужен?) | |
|
|
|
|
|
|
|
для: Владимир55
(03.02.2009 в 13:02)
| | if ($user == "") return true; - зачем он был нужен?)
сами же пишите, что если посетитель не бот, работа продолжается. а если он не определился? т.е. $user равен пустой строке? тогда функция вернет true и работа скрипта продолжится. | |
|
|
|
|
|
|
|
для: elenaki
(03.02.2009 в 13:54)
| | У них неопределившийся юзер приравнивается к роботу...
Может, это и правильно. А может, и не правильно.
Вероятно, тут нужно какие-то волевое решение, ибо за ним может быть и робот, и посетитель, пожелавший остаться неизвестным и что-то сделавший с броузером. И просто сбой в передаче данх от броузера.
Так? | |
|
|
|
|
|
|
|
для: Владимир55
(03.02.2009 в 14:29)
| | Так, так | |
|
|
|
|
|
|
|
для: Владимир55
(03.02.2009 в 14:29)
| | как раз наоборот - неопределившийся юзер приравнивается к человеку. функция ведь истину
возвращает, скрипт продолжает работать. а если б к роботу приравнивался, то выдало бы false | |
|
|
|
|
|
|
|
для: elenaki
(03.02.2009 в 17:47)
| | Название функции -- IsBot | |
|
|
|