[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как посчитать количество обращений к xml
solomon
Здравствуйте!
Необходимо посчитать количество запросов к xml с одного ip. Мой код:

//вынимаем в массив содержимое лога
$a = file('access.log');

$strs = array();

//вынимаем строки с запросами к xml
foreach ($a as $d) {
if (preg_match('/gcost.htm/s', $d)) {
$strs[] = $d;
//echo '<pre>'; print_r($d); echo '</pre>';
}
}

//вынимаем ip
for($i=0;$i<count($strs);$i++) {
if (preg_match('/\d*\.\d*\.\d*\.\d*/s', $strs[$i], $ips)) {
echo '<pre>'; print_r($ips); echo '</pre>';
}
}


В итоге у меня получается несколько массивов содержащих по одному ip:
Array
(
[0] => 127.0.0.1
)

Array
(
[0] => 127.0.0.5
)

Array
(
[0] => 127.0.0.1
)

Как мне извлечь ip в один массив, чтобы можно было посчитать количество повторений ip в массиве? Или возможно посоветуете другие способы подсчета количества обращений к xml? Спасибо




Спустя 48 минут, 29 секунд (13.05.2012 - 17:49) walerus написал(а):
$a = file('access.log', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );
/*.
.
.
.
*/

//вынимаем ip

$trash_ip = array();
for( $i = 0; $i < count( $strs ); $i++ )
{
if (preg_match('/\d*\.\d*\.\d*\.\d*/s', $strs[$i], $ips))
{
$trash_ip[] = $ips[0];
}
}




$clear_ip = array_values( array_unique( $trash_ip ) );
echo "Count - ", $clear_ip , "<hr>\n";
echo "<pre>";
print_r( $clear_ip );

Спустя 15 минут, 27 секунд (13.05.2012 - 18:04) solomon написал(а):
walerus, спасибо. Не совсем то, что нужно получилось. Получился массив с уникальными ip. А мне нужно посчитать количество повторений каждого уникального ip. Или может я что не так делаю...

Вот что сейчас:
Array
(
[0] => 127.0.0.1
[1] => 127.0.0.5
)

Спустя 12 минут, 17 секунд (13.05.2012 - 18:16) walerus написал(а):
$clear_ip = array_count_values( $trash_ip );

В результате будет массив с IP адресами и количество каждого IP адреса..

зы: Курите мануалы по функциям :rolleyes:

Спустя 2 часа, 21 минута, 42 секунды (13.05.2012 - 20:38) solomon написал(а):
Да, да, спасибо, уже нашел ))

Спустя 54 минуты, 31 секунда (13.05.2012 - 21:33) solomon написал(а):
Теперь проблема видимо в размере лога. Запускаю на реальном логе в котором более 200 тыс строк и код просто не выполняется. Как решить эту проблему?

Спустя 47 минут, 3 секунды (13.05.2012 - 22:20) Игорь_Vasinsky написал(а):
fgets() по байтно читать умеет

Спустя 16 минут, 51 секунда (13.05.2012 - 22:36) solomon написал(а):
решено. увеличил память. все заработало

Спустя 18 минут, 48 секунд (13.05.2012 - 22:55) Игорь_Vasinsky написал(а):
не вариант. лучше оптимизировать и читать кусками в цикле. потом он будет 2000000 строк. а слоты в маме кончаться.

Спустя 2 дня, 11 часов, 25 минут, 32 секунды (16.05.2012 - 10:21) Guest написал(а):
Цитата (Игорь_Vasinsky @ 13.05.2012 - 18:55)
не вариант. лучше оптимизировать и читать кусками в цикле. потом он будет 2000000 строк. а слоты в маме кончаться.

Как читать кусками? huh.gif

Спустя 6 минут, 23 секунды (16.05.2012 - 10:27) Invis1ble написал(а):
fgets() же, Игорь написал
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.