- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
$link = 'http://www.logofon.ru/xml/ips.xml';
$file = win_to_utf(file_get_contents($link));
$file = trim(substr((substr($file,0,strripos($file,'</operators>'))),(stripos($file,'<operators>') + 11)));
#echo substr_count($file,'<operator').'<br />';
#preg_match_all('|\<operator(.*)\>(.*)\<\/operator\>|sUu',$file,$res);
#array_dump($res);
preg_match_all('|\<operator id="([0-9]*)" name="([[:space:]a-zA-Zа-яА-ЯёЁ0-9-(){}_.:]*)" label="([[:space:]a-zA-Z0-9]*)" tld="([a-zA-Z0-9]*)" country="([[:space:]a-zA-Zа-яА-Я0-9-(){}_.]*)" publish="([0-9]*)"\>(.*)\<\/operator\>|Usu',$file,$result);
//-- Количество операторов
$count_oper = count($result[0]);
//-- Массив операторов
$operators = array();
//-- Запускаем цикл
for($i = 0;$i < $count_oper; $i ++)
{
//-- Массив текущего оператора
$operators[$i] = array();
$operators[$i]['id'] = $result[1][$i];
$operators[$i]['name'] = $result[2][$i];
#$operators[$i]['label'] = $result[3][$i];
$operators[$i]['tld'] = $result[4][$i];
$operators[$i]['country'] = $result[5][$i];
//-- Создаем базы IP
$operators[$i]['ip'] = array();
preg_match_all('|\<range ip1="([0-9]{10})" ip2="([0-9]{10})" mode="([0-9]*)" \/\>|Usu',$result[7][$i],$result2);
#echo '<b>#'.($i + 1).'.</b>'.htmlspecialchars($result[7][$i]).'<br />';
#array_dump($result2);
//-- Количество диапазанов для текущего опера
$count_ip = count($result2[0]);
//-- Еще один цикл
for($j = 0;$j < $count_ip; $j ++)
{
query("INSERT INTO `$db[prefix]ips` SET `name`='{$operators[$i]['name']}',`id_op`='{$operators[$i]['id']}',`country`='{$operators[$i]['country']}',`tld`='{$operators[$i]['tld']}',`ip1`='{$result2[1][$j]}',`ip2`='{$result2[2][$j]}' ")or my_error();
# $operators[$i]['ip'][$j] = array($result2[1][$j],$result2[2][$j]);
#echo long2ip($result2[1][$j]).' --- '.long2ip($result2[2][$j]).'<br />';
}
}
echo 'Операторов после : <b>'.($count_op_after = mysql_num_rows(query("SELECT COUNT(*) FROM `$db[prefix]ips` GROUP BY `id_op` "))).'</b><br />';
echo 'Диапазонов после : <b>'.($count_di_after = mysql_result(query("SELECT COUNT(*) FROM `$db[prefix]ips` "),0)).'</b><br />';
wmmorgun 22.12.2010 16:44 # +9
Победа уходит к UTF.
mrbig66 22.12.2010 20:02 # −1
Lure Of Chaos 22.12.2010 18:19 # +5
{{+,+,+,+,+,+,+,+,+,+,+,+,+,+,+},{+,+,+, +,+,+,+,+,+,+,+,+,+,+,+},{+,+,+,+,+,+,+, +,+,+,+,+,+,+,+}}
wmmorgun 22.12.2010 19:42 # +1
eth0 22.12.2010 19:53 # +2
Если когда-нибудь сделают показ "кто менял отзывы".
TarasB 23.12.2010 11:26 # 0
wmmorgun 23.12.2010 11:27 # −1
TarasB 23.12.2010 11:52 # 0
Здесь этот скрипт намного адекватнее.
wmmorgun 23.12.2010 11:58 # 0
Тут же скрипт нативный и грузит только то что надо.
P.S. толсто ;-)
TarasB 23.12.2010 12:13 # 0
wmmorgun 23.12.2010 12:19 # +1
wmmorgun 22.12.2010 19:56 # 0
Сколько ж оно памяти скушает на 16метровой XML'ке, не говоря уже о многосотметровой? Ладно ini_set('memory_limit', '100500M'); им в помощь.
P.S. куда дели парсинг IPшек, там должно быть самое интересное, небось преобразовывают в php в строку и хранят её в базе.
bugmenot 22.12.2010 20:19 # 0