appdir . '/lib/maxmind/geoip/geoip.inc.php'); require_once realpath($this->appdir . '/lib/maxmind/geoip/geoipcity.inc.php'); $gi = geoip_open(realpath($this->appdir . '/lib/maxmind/geoip/GeoLiteCityv6.dat'), GEOIP_STANDARD); $infile = fopen($infile, 'r'); $outfile = fopen($outfile, 'w'); while (!feof($infile)) { $s = fgets($infile); $s = trim($s); if ($s == '') continue; $s = explode(' ', $s); $ip = $s[0]; // NOTE (rda) dates are local time, not UTC here. // FIXME (rda) change dates to UTC // that involves getting logs of the day before, and filtering _after_ conversion. $sdate = str_replace(array('[', ']'), '', $s[3] . ' ' . $s[4]); $sdate2 = explode(':', $sdate); $date = $sdate2[0]; $date2 = date('Y-m-d', strtotime($sdate)); // N for week day, or Y-m-d $time = date('H', strtotime($sdate)); $date = $date2; $query = $s[6]; $url = parse_url($query); parse_str($url['query'], $query); $arch = end(explode('/', $url['path'])); $vers = $query['version']; if ($vers == '') continue; if (strpos($ip, ':') === false) $ip = '::' . $ip; $record = geoip_record_by_addr_v6($gi, $ip); //global $GEOIP_REGION_NAME; $rec = array( 'country' => $record->country_code, 'region' => $GEOIP_REGION_NAME[$record->country_code][$record->region], 'city' => $record->city, 'code' => $record->postal_code, 'area' => $record->area_code, 'continent' => $record->continent_code ); $data = array( $date, $time, $vers, $arch, $rec['continent'], $rec['country'], mb_convert_encoding($rec['region'], 'ASCII'), mb_convert_encoding($rec['city'], 'ASCII') ); $ret = implode(" ", $data) . "\n"; fputs($outfile, $ret, mb_strlen($ret, 'utf-8')); } fclose($outfile); fclose($infile); geoip_close($gi); } }