Код за изображения на роботи - съобщение на
саша12342
Ето редовете на потребителския агент с разбивка на това какво представлява: http://www.user-agents.org/
Има библиотека за PHP: http://user-agent-string.info/download/UASparser-for-PHP Връща хеш, в който елементът "type" съдържа "browser", "robot" и т.н.
саша12342
SetCacheDir ($cacheDirectory); ако ( $updateInterval ) $this -> updateInterval = $updateInterval; >
/** * Анализирайте низа на потребителски агент, ако е даден, в противен случай анализирайте текущия потребителски агент * @param низ низ на потребителски агент */ публична функция Анализирайте ( $useragent = null ) < // инициализира някои променливи $browser_id = $os_id = null ; $резултат = масив ( ) ;
// инициализиране на върнатата стойност $result [ 'typ' ] = 'unknown' ; $result [ 'ua_family' ] = 'неизвестно'; $result [ 'ua_name' ] = 'неизвестно'; $result [ 'ua_version' ] = 'неизвестно'; $result [ 'ua_url' ] = 'неизвестно'; $result [ 'ua_company' ] = 'неизвестно'; $result [ 'ua_company_url' ] = 'неизвестен' ; $result [ 'ua_icon' ] = 'unknown.png' ; $result [ "ua_info_url" ] = 'неизвестен' ; $result [ "os_family" ] = 'неизвестно'; $result [ "os_name" ] = 'неизвестно'; $result [ "os_url" ] = 'неизвестен'; $result [ "os_company" ] = 'неизвестно'; $result [ "os_company_url" ] = 'неизвестен' ; $result [ "os_icon" ] = 'unknown.png' ;
// ако все още не сме заредили данните, направете го сега if ( ! $this ->_data ) < $this ->_data = $this ->_loadData ( ) ; >
// нямаме данни или нямаме валиден потребителски агент, просто връщаме данните по подразбиране if ( ! $this ->_data ! isset ( $useragent ) ) < върни $резултат; >
// робот foreach ( $this ->_data [ 'robots' ] as $test ) < ако ( $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 set $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 $os_id = $this ->_data [ 'browser_os' ] [ $browser_id ] [ 0 ] ; // Вземете идентификатора на OS $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 ] ; върни $резултат; >
// търсене на os foreach ( $this ->_data [ 'os_reg' ] като $test ) < if ( @ preg_match ( $test [ 0 ] , $useragent ) ) < $os_id = $test [ 1 ] ; почивка ; > >
// беше намерена валидна операционна система if ( $os_id ) < // os подробности $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 ; ако ( 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 ) ; $статус = 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 низ $url * @param низ $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, true); $data = curl_exec ( $ch ); curl_close ($ch); върни $данни; >
// няма останали опции връщане '' ; >
/** * Задайте директорията на кеша * @param низ */ публична функция 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 ; > >