Код для виявлення роботів - повідомлення на

sasha12342

Тут наведені рядки User-agent з розшифровкою, що це: http://www.user-agents.org/

Є бібліотека для PHP: http://user-agent-string.info/download/UASparser-for-PHP Повертає хеш, в якому елемент "typ" містить "browser","robot" та ін.

sasha12342

SetCacheDir ($ cacheDirectory); if ($updateInterval) $this -> updateInterval = $updateInterval; >

/** * Parse the useragent string if given otherwise parse the current user agent * @param string user agent string */ public function Parse ( $useragent = null ) < // intialize деякі variables $browser_id = $os_id = null ; $result = array ( ) ;

// initialize the return value $result [ 'typ' ] = 'unknown' ; $result ['ua_family'] = 'unknown'; $result ['ua_name'] = 'unknown'; $result ['ua_version'] = 'unknown'; $result ['ua_url'] = 'unknown'; $result ['ua_company'] = 'unknown'; $result ['ua_company_url'] = 'unknown'; $result ['ua_icon'] = 'unknown.png'; $result ["ua_info_url"] = 'unknown'; $result ["os_family"] = 'unknown'; $result ["os_name"] = 'unknown'; $result ["os_url"] = 'unknown'; $result ["os_company"] = 'unknown'; $result ["os_company_url"] = 'unknown'; $result ["os_icon"] = 'unknown.png';

// if we haven't loaded the data yet, do it now if (! $this ->_data ) < $this ->_data = $this ->_loadData ( ) ; >

// we have no data or no valid user agent, just return the default data if ( ! $this ->_data ! isset ( $useragent ) ) < return $result; >

// crawler foreach ( $this ->_data [ 'robots' ] as $test ) < if ($ test [0]== $useragent ) < $result [ 'typ' ] = 'Робот'; if ($test [1]) $result ['ua_family'] = $test [1]; if ( $test [ 2 ] ) $result [ 'ua_name' ] = $test [ 2 ] ; if ($test [3]) $result ['ua_url'] = $test [3]; if ($test [4]) $result ['ua_company'] = $test [4]; if ( $test [ 5 ] ) $result [ 'ua_company_url' ] = $test [ 5 ] ; if ($test [6]) $result ['ua_icon'] = $test [6]; якщо ( $test [ 7 ] ) < // Набір ОС $os_data = $this ->_data [ 'os' ] [ $test [ 7 ] ] ; if ($os_data [0]) $result ['os_family'] = $os_data [0]; if ( $os_data [ 1 ] ) $result [ 'os_name' ] = $os_data [ 1 ] ; if ($os_data [2]) $result ['os_url'] = $os_data [2]; if ( $os_data [ 3 ] ) $result [ 'os_company' ] = $os_data [ 3 ] ; if ($os_data [4]) $result ['os_company_url'] = $os_data [4]; if ($os_data [5]) $result ['os_icon'] = $os_data [5]; > if ( $test [ 8 ] ) $result [ 'ua_info_url' ] = self:: $_info_url . $test [8]; повернути $результат; > >

// знайдено дійсний браузер if ( $browser_id ) < // деталі браузера $browser_data = $this ->_data [ 'браузер'] [ $browser_id] ; if ( $this ->_data [ 'browser_type' ] [ $browser_data [ 0 ] ] [ 0 ] ) $result [ 'typ' ] = $this ->_data [ 'browser_type' ] [ $browser_data [ 0]] [0]; if ( isset ( $info [ 1 ] ) ) $result [ 'ua_version' ] = $info [ 1 ] ; if ( $browser_data [ 1 ] ) $result [ 'ua_family' ] = $browser_data [ 1 ] ; if ( $browser_data [ 1 ] ) $result [ 'ua_name' ] = $browser_data [ 1 ] . ( isset ( $info [ 1 ] ) ? ' ' . $info [ 1 ] : '' ) ; if ( $browser_data [ 2 ] ) $result [ 'ua_url' ] = $browser_data [ 2 ] ; if ( $browser_data [ 3 ] ) $result [ 'ua_company' ] = $browser_data [ 3 ]; if ( $browser_data [ 4 ] ) $result [ 'ua_company_url' ] = $browser_data [ 4 ] ; if ( $browser_data [ 5 ] ) $result [ 'ua_icon' ] = $browser_data [ 5 ] ; if ( $browser_data [ 6 ] ) $result [ 'ua_info_url' ] = self:: $_info_url . $browser_data [6]; >

// ОС браузера, чи цей браузер містить посилання на ОС? if ( isset ( $this ->_data [ 'browser_os' ] [ $browser_id ] ) ) < // деталі ОС $os_id = $this ->_data [ 'browser_os' ] [ $browser_id ] [ 0 ] ; // Отримати ідентифікатор ОС $os_data = $this ->_data [ 'os' ] [ $os_id ] ; if ($os_data [0]) $result ['os_family'] = $os_data [0]; if ( $os_data [ 1 ] ) $result [ 'os_name' ] = $os_data [ 1 ] ; if ($os_data [2]) $result ['os_url'] = $os_data [2]; if ( $os_data [ 3 ] ) $result [ 'os_company' ] = $os_data [ 3 ] ; if ($os_data [4]) $result ['os_company_url'] = $os_data [4]; if ($os_data [5]) $result ['os_icon'] = $os_data [5]; повернути $результат; >

// пошук ОС foreach ( $this ->_data [ 'os_reg' ] ​​as $test ) < if ( @ preg_match ( $test [ 0 ] , $useragent ) ) < $os_id = $test [1]; перерва ; > >

// знайдено дійсну ОС if ( $os_id ) < // деталі ОС $os_data = $this ->_data [ 'os' ] [ $os_id ] ; if ($os_data [0]) $result ['os_family'] = $os_data [0]; if ( $os_data [ 1 ] ) $result [ 'os_name' ] = $os_data [ 1 ] ; if ($os_data [2]) $result ['os_url'] = $os_data [2]; if ( $os_data [ 3 ] ) $result [ 'os_company' ] = $os_data [ 3 ] ; if ($os_data [4]) $result ['os_company_url'] = $os_data [4]; if ($os_data [5]) $result ['os_icon'] = $os_data [5]; > повернути $результат; >

/** * Завантажити даніз файлів */ приватна функція _loadData ( ) < if ( ! file_exists ( $this ->_cache_dir ) ) return ;

if ( file_exists ( $this ->_cache_dir. '/cache.ini' ) ) < $cacheIni = parse_ini_file ( $this ->_cache_dir. '/cache.ini' ) ;

// ми повинні перезавантажувати дані, оскільки вони вже старі? if ( $cacheIni [ 'lastupdate' ] updateInterval $cacheIni [ 'lastupdatestatus' ] != "0" ) < $this ->_downloadData ( ) ; > > інакше < $this ->_downloadData ( ) ; >

// за замовчуванням статус не вдалося $status = 1 ; if ( file_exists ( $this ->_cache_dir. '/cache.ini' ) ) < $cacheIni = parse_ini_file ( $this ->_cache_dir. '/cache.ini' ) ; > інше

// Отримати версію для сервера $ver = $this -> get_contents ( self:: $_ver_url ) ; якщо ( strlen ( $ver ) != 11 ) < if ( $cacheIni [ 'localversion' ] ) < $ver = $cacheIni [ 'localversion'] ; > інакше < $ver = 'немає' ; > >

// Завантажте файл ini if ( $ini = $this -> get_contents ( self:: $_ini_url ) ) < // завантажити файл has $md5hash = $this -> get_contents ( self:: $_md5_url ) ; // перевірити хеш, якщо добре, зберегти новий файл ini if ( md5 ( $ini ) == $md5hash ) < @file_put_contents ( $this ->_cache_dir. '/uasdata.ini' , $ini ) ; $status = 0 ; > >

// створити новий файл кешу та зберегти його $cacheIni = "; інформація про кеш для класу UASparser - http://user-agent-string.info/download/UASparser \n " ; $cacheIni .= "[основний] \n " ; $cacheIni .= "localversion = \" $ver \" \n " ; $cacheIni .= 'lastupdate = "' . час ( ). " \" \n " ; $cacheIni .= "lastupdatestatus = \" $status \" \n " ; @file_put_contents ( $this->_cache_dir. '/cache.ini' , $cacheIni ) ; >

/** * Отримати вміст певної URL-адреси з визначеним часом очікування * @param string $url * @param string $timeout */ приватна функція get_contents ( $url , $timeout = 5 ) < // використовуйте file_get_contents if ( ini_get ( 'allow_url_fopen' ) ) < $ctx = stream_context_create ( array ( 'http' => array ( 'timeout' => $timeout ) ) ) ; повернути file_get_contents ( $url , false , $ctx ) ; > // повернутися до curl elseif ( function_exists ( 'curl_init' ) ) < $ch = curl_init ( $url ) ; curl_setopt ( $ch , CURLOPT_TIMEOUT, $timeout ) ; curl_setopt ( $ch , CURLOPT_CONNECTTIMEOUT, $timeout ) ; curl_setopt ( $ch , CURLOPT_RETURNTRANSFER, істина ) ; $data = curl_exec ( $ch ); curl_close ( $ch ); повернути $дані; >

// варіантів не залишилося return '' ; >

/** * Встановити каталог кешу * @param string */ відкрита функція SetCacheDir ( $cache_dir )

// Каталог на даний момент не існує, спробуйте зробити його if ( ! file_exists ( $cache_dir ) ) @ mkdir ( $cache_dir , 0777 , true ) ;

// виконати деякі додаткові перевірки if ( ! is_writable ( $cache_dir ) ! is_dir ( $cache_dir ) ) < trigger_error ( 'ПОМИЛКА: Cache dir(' . $cache_dir . ') не є каталогом або недоступним для запису' ) ; повернення ; >

// зберігати каталог кешу $cache_dir = realpath ( $cache_dir ) ; $this ->_cache_dir = $cache_dir ; > >