Добрый день уважаемые комрады, помогите плз., нужно выполнить следующее, есть хороший скрипт: Содержание файла: logping.txt Код (Text): 22.01.2013|8:58:31|170.44.76.168|Cвязь с сервером прервана. 23.01.2013|0:47:14|170.41.65.167|Cвязь с сервером прервана. 24.01.2013|8:49:22|175.30.96.210|Cвязь с сервером прервана. 24.01.2013|8:50:24|172.41.91.210|Cвязь с сервером прервана. 25.01.2013|8:51:25|171.42.92.200|Cвязь с сервером прервана. 26.01.2013|8:52:27|170.40.90.200|Cвязь с сервером прервана. и т.д. Исполняемый скрипт PHP: Код (Text): <? $log = file('p_log/logping.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $days = 10; // За сколько дней показывать лог $startDate = mktime(0, 0, 0, date('m'), date('d'), date('Y')) - $days * 86400; $res = array(); foreach($log as $row) { $fields = explode('|', $row); $dateArray = explode('.', $fields[0]); $date = strtotime(implode('-', array_reverse($dateArray))); $dateTime = strtotime(implode('-', array_reverse($dateArray)) . ' ' . $fields[1]); if($dateTime < $startDate) continue; if(!isset($res[$date])) $res[$date] = array(); if(!isset($res[$date][$fields[2]])) $res[$date][$fields[2]] = array(); $res[$date][$fields[2]][$dateTime] = $fields[3]; } $html = '<table width="100%" border="1" cellspacing="0" cellpadding="0"><tr align="center"><td>'; for($i = 0; $i < $days; ++$i) { $date = mktime(0, 0, 0, date('m'), date('d'), date('Y')) - $i * 86400; $html .= '<b>Дата ' . date('d.m.Y', $date) . '</b><br />'; if(isset($res[$date])) { foreach($res[$date] as $ip => $events) { krsort($events, SORT_NUMERIC); $lastEvent = each($events); $html .= '<b>Ошибки связи по IP: ' . $ip . ' = ' . count($events) . '</b>, последняя была зафиксирована в: <b>'; //$html .= date('d.m.Y в H:i', $lastEvent[0]) . '</b> [' . htmlspecialchars($lastEvent[1]) . ']<br />'; $html .= date('H:i:s', $lastEvent[0]) . '</b> [' . htmlspecialchars($lastEvent[1]) . ']<br />'; } $html .= '<br />'; } else { $html .= 'Ошибок связи до серверов на эту дату не обнаружено!<br /><br />'; } } echo($html)."</td></tr></table>"; ?> Скрипт берет файл: logping.txt и из него создавая массив данных разбивает их и пр. -> по коду, вывод следующий: Дата 14.05.2013 Ошибки связи по IP: 170.40.60.160 = 1, последняя была зафиксирована в: 13:33:08 [Cвязь с сервером прервана.] ВОПРОС ВОТ В ЧЕМ, КАК ДОБАВИТЬ СВОЙСТВА К ВЫВОДИМЫМ IP??? Т.е. мне нужно чтобы выводился не только IP но и повесить на него (на каждый) определение, чтобы по наведению на каждый IP показывал, свой title Пожалуйста ПОДСКАЖИТЕ, как добавить эти свойства к каждому IP в массив (например на 170.44.76.168 title="Дом", 170.41.65.167 title="Работа" и пр.)??? БУДУ ОЧЕНЬ БЛАГОДАРЕН и НЕ ТОЛЬКО Я!!!
пример: Код (PHP): <?php for($i=1;$i<=10;$i++){ $arr['title']= $i; $arr['ip']= $i.$i.$i.$i; $d[]=$arr; } var_dump($d); Код (Text): array(10) { [0]=> array(2) { ["title"]=> int(1) ["ip"]=>"1111" } [1]=> array(2) { ["title"]=> int(2) ["ip"]=>"2222" } [2]=> array(2) { ["title"]=> int(3) ["ip"]=>"3333" } [3]=> array(2) { ["title"]=> int(4) ["ip"]=>"4444" } [4]=> array(2) { ["title"]=> int(5) ["ip"]=>"5555" } [5]=> array(2) { ["title"]=> int(6) ["ip"]=>"6666" } [6]=> array(2) { ["title"]=> int(7) ["ip"]=> "7777" } [7]=> array(2) { ["title"]=> int(8) ["ip"]=>"8888" } [8]=> array(2) { ["title"]=> int(9) ["ip"]=>"9999" } [9]=> array(2) { ["title"]=> int(10) ["ip"]=>"10101010" } }
Можно еще вопросик последний ) в скрипте сортируется время ПОСЛЕДНЕЙ ошибки и выводится сейчас так: ла ла ла... ошибки связи по IP: 192.168.0.1 = 1, последняя была зафиксирована в: 13:33:08 [Cвязь с сервером прервана.], а как добавить чтобы было так: ла ла ла... ошибки связи по IP: 192.168.0.1 = 1, ПЕРВАЯ БЫЛА ЗАФИКСИРОВАНА В 12:00:00, последняя была зафиксирована в: 13:33:08 [Cвязь с сервером прервана.] Насколько я понимаю, в скрипте идет обработка: $lastEvent = each($events);, а вот как получить ПЕРВОЕ СОБЫТИЕ чето я не совсем догоняю. Поясню, вывод таков: 14.05.2013|16:47:36|192.168.0.1|Cвязь с сервером прервана. - первое время в таблице по данному IP 14.05.2013|19:01:56|192.168.0.1|Cвязь с сервером прервана. - последнее время в таблице по данному IP У меня в коде выводится последнее время ($lastEvent[0]), а как вывести еще и ПЕРВОЕ ВРЕМЯ 16:47:36??? Добрые люди, подскажите плз., очень нужно чтобы скрипт выполнял все что требуется, ЗАРАНЕЕ БУДУ БЛАГОДАРЕН!!! ::wink24.gi
объявить переменную как нулевой тип данных. в процессе итерации сравнивать значение с нулевым типом данных - если да то записываем значение. запись значение приведет к тому что мы больше не сможем записать значение. значит там останется первое значение.
Можете пример привести по моему скрипту? Как вычислить НАЧАЛО периода в логе IP? Я честно не могу понять почему этих значений нет в массиве $lastEvent, т.к. нулевой ключик там это дата КОНЕЧНАЯ... Так вот... КАК ВЗЯТЬ НАЧАЛО ДАТЫ? Конечные же данные откуда то берутся в массиве, значит и начальные за период по сортировки по IP можно выудить???
Ответил, но луче для форумчан я думаю обсудить тут, т.к. многие может изберут куски кода или опыт, мне очень важно это решить, т.к. я сам уже много думал разных моделей, но то что я сделал, это не есть оптимизировано, хочется эту выдержку взять именно из модели массива, а не вводя массу переменных и обработчиков и сортировщиков. )) СПАСИБО!
ок, я не стал в почте комментировать код. раз он вот такой вас устраивает то пожалуйста решение вашей задачи: Код (PHP): krsort($events, SORT_NUMERIC); $lastEventMSG = reset( $events ); $lastEventTS = key( $events ); $firstEventMSG = end( $events ); $firstEventTS = key( $events ); $html .= '<b>Ошибки связи по IP: ' . $ip . ' = ' . count($events) .'</b>, последняя была зафиксирована в: <b>'; $html .= date('H:i:s', $lastEventTS) . '</b> [' .htmlspecialchars($lastEventMSG) . '], первая: <b>'; $html .= date('H:i:s', $firstEventTS) . '</b> [' .htmlspecialchars($firstEventMSG) . ']<br />';
Спасибо огромное!!! Я это делал но путями через foreach и статической выборкой, очень хотелось получить код именно выборкой из начала и конца массива, но что то не получалось... СПАСИБО ВАМ ОГРОМНОЕ!!! Сейчас прикручу пример к своему скрипту.