Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Местонахождение по IP
 
 автор: hin   (06.06.2007 в 14:45)   письмо автору
 
 

В продолжение темы:
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=24700&page=1
Наконец можно нормально определять IP.
Вот

При поддержке компании RU-CENTER стартовал новый проект
 География российских IP-адресов IpGeoBase, разработанный
 специалистами статистико-аналитического проекта Stat.nic.ru.

Цель проекта - создать общедоступный ресурс географической 
привязки российских IP-адресов. Кроме того, создается общедоступная
 бесплатная база данных такой географической привязки, которую мог
 бы использовать для географического таргетинга любой вебмастер на
 любом сайте как в Рунете, так и за его пределами.

А вот и ссылка на базу
http://ipgeobase.ru/cgi-bin/Software.cgi
http://ipgeo-base.ru/cgi-bin/Archive.cgi

P.S. Малоли кому пригодится.

   
 
 автор: Unkind   (06.06.2007 в 14:48)   письмо автору
 
   для: hin   (06.06.2007 в 14:45)
 

-

   
 
 автор: Proger   (06.06.2007 в 20:36)   письмо автору
 
   для: hin   (06.06.2007 в 14:45)
 

Такой бы скриптик для этой же базы, да на php бы....
Может возьммся написать - НАРОД?

   
 
 автор: Director_Of_Zoo   (07.06.2007 в 08:53)   письмо автору
 
   для: Proger   (06.06.2007 в 20:36)
 

Ну на первый взгляд - это просто текстовая бд с разделением полей \t и разделением записей \n.
как я понял IP преобразуется путём не сложных вычислений в цифровой вид.

   
 
 автор: Proger   (07.06.2007 в 09:14)   письмо автору
 
   для: Director_Of_Zoo   (07.06.2007 в 08:53)
 

я не знаком с Perl, но посмотрев тоже понял что он проверяет ай пи введённый по базе, но и ещё и в диапозоне, навпример ай пи 127.0.0.1 127.255.255.0 - это урупинкс ;)
Если бы знать хорошо Perl, то я бы сам бы сделал эту прогу, но к сожалению нема :( Люди давайте кооперироваться!!!

   
 
 автор: Loki   (07.06.2007 в 12:41)   письмо автору
 
   для: Proger   (07.06.2007 в 09:14)
 

Базу не смотрел, но думаю что вопрос решается одним sql запросом... над чем тут кооперироваться?

   
 
 автор: Proger   (07.06.2007 в 13:54)   письмо автору
 
   для: Loki   (07.06.2007 в 12:41)
 

База ФАЙЛОВАЯ, там 2 файлика!
А кооперировать над тем, что нужно скрипт в полной функциональности перевести с Perl на PHP =)

   
 
 автор: hin   (07.06.2007 в 16:21)   письмо автору
 
   для: Proger   (07.06.2007 в 13:54)
 

И желательно базу занести MySQL или ещё лучше написать скрипт переводящий базу из файлов в MySQL. Как идея??

   
 
 автор: Unkind   (07.06.2007 в 16:22)   письмо автору
 
   для: hin   (07.06.2007 в 16:21)
 

Как идея??
Обалденная.

   
 
 автор: Proger   (07.06.2007 в 17:14)   письмо автору
 
   для: hin   (07.06.2007 в 16:21)
 

Впринципе верно, потому как скорость обработки таких больших файлов мала :( От 1 до 10 секунд будет если не более ....

   
 
 автор: Loki   (07.06.2007 в 18:13)   письмо автору
 
   для: hin   (07.06.2007 в 16:21)
 

вот вам задачка для раздела "задачи":)

   
 
 автор: mr Bin   (07.06.2007 в 19:33)   письмо автору
 
   для: Loki   (07.06.2007 в 18:13)
 

Такие базы существуют для мускула, правда платные, но нет ничего платного, что есть в интернете..
А также есть толковые зарубежные сервисы, с помощью кеоторых можно узнавать всю эту инфу, но базу они не предоставляют, можно только написать скриптик, чтобы через них эту инфу выбирать всякими "грабберами"..

   
 
 автор: Loki   (08.06.2007 в 11:11)   письмо автору
 
   для: mr Bin   (07.06.2007 в 19:33)
 

Вот вам база:

CREATE TABLE `ip_city` (
  `city_id` int(11) NOT NULL auto_increment,
  `city` varchar(255) NOT NULL,
  `region_id` int(11) NOT NULL,
  PRIMARY KEY  (`city_id`),
  UNIQUE KEY `city` (`city`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE `ip_intervals` (
  `interval_id` int(11) NOT NULL auto_increment,
  `start` bigint(20) NOT NULL,
  `end` bigint(20) NOT NULL,
  `city_id` int(11) NOT NULL,
  PRIMARY KEY  (`interval_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE `ip_okrug` (
  `okrug_id` int(11) NOT NULL auto_increment,
  `okrug` varchar(255) NOT NULL,
  PRIMARY KEY  (`okrug_id`),
  UNIQUE KEY `okrug` (`okrug`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE `ip_region` (
  `region_id` int(11) NOT NULL auto_increment,
  `region` varchar(255) NOT NULL,
  `okrug_id` int(11) NOT NULL,
  PRIMARY KEY  (`region_id`),
  UNIQUE KEY `region` (`region`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;


вот вам парсер:

<?
include("config.php");
function 
sql($sql)
{
$result=mysql_query($sql);
if (!
$result)
{
echo 
mysql_error();
echo 
"<br />".$sql;
exit;
}
return 
$result;
}

$fp=fopen("cidr_ru_master_index.db""r");
while ((
$string fgets($fp)) !== false ) {
preg_match('/(\d+)\t(\d+)\t[^\t]+\tRU\t([^\t]+)\t([^\t]+)\t([^\t]+)\t/'$string$arr);
$result=sql("INSERT IGNORE INTO ip_okrug VALUES(NULL, '".mysql_escape_string($arr[5])."')");
if (!
$okrug_id=mysql_insert_id())
{
$result=sql("SELECT okrug_id FROM ip_okrug WHERE okrug='".mysql_escape_string($arr[5])."'");
$okrug_id=mysql_result($result0);
}

$result=sql("INSERT IGNORE INTO ip_region VALUES(NULL, '".mysql_escape_string($arr[4])."', $okrug_id)");
if (!
$region_id=mysql_insert_id())
{
$result=sql("SELECT region_id FROM ip_region WHERE region='".mysql_escape_string($arr[4])."'");
$region_id=mysql_result($result0);
}

$result=sql("INSERT IGNORE INTO ip_city VALUES(NULL, '".mysql_escape_string($arr[3])."', $region_id)");
if (!
$city_id=mysql_insert_id())
{
$result=sql("SELECT city_id FROM ip_city WHERE city='".mysql_escape_string($arr[3])."'");
$city_id=mysql_result($result0);
}

sql("INSERT INTO ip_intervals VALUES(NULL, ".$arr[1].", ".$arr[2].", $city_id)");
}
echo 
"ok";
?>

Вот вам пример работы:

<?
include("config.php");
$ip="80.81.208.35";
$result=mysql_query("SELECT city, region, okrug FROM ip_intervals i 
JOIN ip_city c ON i.city_id=c.city_id 
JOIN ip_region r ON c.region_id=r.region_id 
JOIN ip_okrug o ON r.okrug_id=o.okrug_id 
WHERE INET_ATON('
$ip') BETWEEN start AND end");
$data=mysql_fetch_assoc($result);
print_r($data);
?>


Теперь можете начинать кооперироваться.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования