geo.php
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 646 行 · 第 1/2 页
PHP
646 行
<?php/* vim: set expandtab tabstop=4 shiftwidth=4: */// +----------------------------------------------------------------------+// | PHP version 4.0 |// +----------------------------------------------------------------------+// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group |// +----------------------------------------------------------------------+// | This source file is subject to version 2.0 of the PHP license, |// | that is bundled with this package in the file LICENSE, and is |// | available at through the world-wide-web at |// | http://www.php.net/license/2_02.txt. |// | If you did not receive a copy of the PHP license and are unable to |// | obtain it through the world-wide-web, please send a note to |// | license@php.net so we can mail you a copy immediately. |// +----------------------------------------------------------------------+// | Authors: Graeme Merrall <graeme@inetix.com.au> |// | |// +----------------------------------------------------------------------+//// $Id: Geo.php,v 1.5 2002/04/25 23:49:47 graeme Exp $require_once 'PEAR.php';require_once 'Cache/Function.php';/** * NetGeo - determine geographic information on an internet address * * Can accept input of an AS number, an IP address or a host name * Input can be individual or an array of addresses * * $geo = new NetGeo(); * $geo->getRecord("php.net"); * $geo->getRecord(array("php.net", "google.com")); * * Results returned are a single array of results if a string is passed in * or in the case of an array, a multi-dim array with the as the key * * Query service type (CAIDA or localizer) is not available as a constructer * to retain compatibility with existing CAIDA NetGeo classes (perl + java) * * @version 1.0 * @package NetGeo * @author Graeme Merrall <graeme@inetix.com.au> */define('NETGEO_INPUT_ERROR', 'INPUT_ERROR');define('NETGEO_HTTP_ERROR', 'HTTP_ERROR');define('NETGEO_NO_MATCH', 'NO MATCH');define('NETGEO_NO_COUNTRY', 'NO_COUNTRY');define('NETGEO_LIMIT_EXCEEDED', 'NETGEO_LIMIT_EXCEEDED');class Net_Geo{ /** * Path to local cache file. * Caching is compulsory to reduce load on CAIDA server * * @var string * @access public */ var $cache_path = "/tmp/"; /** * How long to wait befire rechecking cached entries in *days* * This should be comething nice and high * * @var in * @access public */ var $cache_ttl = 30; /** * CAIDA only * * Maximum length of time, in seconds, which will be allowed during a whois * lookup by the NetGeo server. * The actual default value is maintained by the server. * * @var int * @access public */ var $default_timeout = 60; /** * CAIDA only * * Location of the default netgeo server * If port not speicifed, defaults to 80 * * @var string * @access public */ var $default_server = "http://netgeo.caida.org/perl/netgeo.cgi"; /** * localizer only * * Location of the localizer data file * * @var string * @access public */ var $localizer_data = "./demo.csv"; /** * Type of service to use. May be either 'caida' or 'localizer' * Default is 'caida' * * @var string @ @access private */ var $service; /** * Cache filename prefix * * @var string * @access private */ var $cache_prefix = "netgeo"; /** * CAIDA only * * User Agent string. * * @var string * @access private */ var $useragent = "PHP/NetGeo"; /** * CAIDA only * * Class version * * @var string * @access private */ var $useragent_version = "1.0"; /** * CAIDA only * * How many targets can be read in at once * Should be enough for most everyone * * @var string * @access private */ var $array_limit = 100; /** * Function cache object * * @var object * @access private */ var $cache; /** * Name of global var for copying $this when calling function cache * This is needed for the cache function to operate correctly * * @var string * @access private */ var $netgeo_global = "netgeo_global"; /** * Constructor * Both $applicationName and $alternateServerUrl are for compatibility * with the perl and java netgeo classes. * I don't guarantee to use these variables * * @param string $applicationName Application using the NetGeo class. * @param string $alternateServerUrl Alternate NetGeo server url * @return bool * @access public */ function Net_Geo($applicationName="", $alternateServerUrl="") { $this->applicationName = $applicationName; $this->alternateServerUrl = $alternateServerUrl; // init cache object $this->cache = new Cache_Function('file', array('cache_dir' => $this->cache_path, 'filename_prefix' => $this->cache_prefix ), $this->cache_ttl * 86400 ); return true; } function setService($service = "caida") { if ($service == "localizer") { if (@localizer_read($this->localizer_data, FALSE) == FALSE) { PEAR::raiseError("Can't read localizer data file ".$this->localizer_data); return false; } } elseif ($service == "caida") { // check to see if an alternate server URL is used if (!empty($alternateServerUrl)) { $this->default_server = $this->alternateServerUrl; } $this->useragent = sprintf("%s %s", $this->useragent, $this->useragent_version ); // set the custom user agent if (!empty($applicationName)) { // trim whitespace $applicationName = trim($applicationName); // also set the agent name $this->useragent = sprintf("%s/%s", $this->applicationName, $this->useragent ); } } else { // return error return new PEAR_Error("No service specified"); } $this->service = $service; return true; } /** * Gets a complete record for an address * Returns either a single or multidimentional arrray * if input is a string or an array respectively * * @param mixed $target Single or list of addresses * @return array * @access public */ function getRecord($target) { return $this->_execute("getRecord", $target); } /** * Returns the 2-letter ISO 3166 country code * Returns NO_MATCH if the AS number has been looked up * but nothing was found in the whois lookups. * Returns NO_COUNTRY if the lookup returned a record * but no country could be found. * Returns an empty string if nothing was found in the database * * @param string $target single address * @return array * @access public */ function getCountry($target) { $result = $this->_execute("getCountry", $target); if (is_array($result)) { return $result["COUNTRY"]; } return $result; } /** * Returns an array with keys LAT, LONG, LAT_LONG_GRAN, and STATUS. * Lat/Long will be (0,0) if the target has been looked up but there was no * match in the whois lookups, or if no address could be parsed from the * whois record, or if the lat/long for the address is unknown. * Returns an empty string if nothing was found in the database * * @param string $target single address * @return array * @access public */ function getLatLong($target) { return $this->_execute("getLatLong", $target); } /** * Included here to make the NetGeo class as similar as possible to * the NetGeoClient.java interface. * It's probably just as easy for the user to extract lat and long directly * from the array. * * @param string $target single address * @return double * @access public */ function getLat($latLongRef) { if (is_array($latLongRef)) { $lat = $latLongRef["LAT"]; } else { $lat = 0; } return sprintf("%.2f", $lat); } /** * Included here to make the NetGeo class as similar as possible to * the NetGeoClient.java interface. * It's probably just as easy for the user to extract lat and long directly * from the array * * @param string $target single address * @return double
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?