[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не работает поиск регулярного выражения
Zenith
Короче, тестовое задание.
Цитата

Вводные данные: Есть лог апача за несколько дней. Весит 1 Гб. Пример - в access.log. Известно, что passport.nikitaonline.ru и rzonline.ru - наши сайты.
Задание: Необходимо посчитать количество рекламных кликов (переходы с наших сайтов не считаются) с каждым REFER_ID в день и записать в бд: дата-рефер-количество. Скрипт запускается регулярно при ротации логов, которая происходит в 0 часов 0 минут.


Собственно одна строка из лога:

90.157.104.29 - - [21/Dec/2008:06:27:31 +0300] "GET /?REFER_ID=1176431 HTTP/1.0" 200 22063 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"


Мой код:

<?php
error_reporting('E_ALL');
$q="/home/zkl/Загрузки/php_programmer/";
$logFile=fopen($q."access.log", "r");
flock($logFile, LOCK_SH);
while (!feof($logFile)) {
$str=fgets($logFile);
preg_match_all('#REFER_ID=(\d+)#', $str, $matches);
}
print_r ($matches);
fclose($logFile);
?>


А теперь самое интересное. В результате я вижу что $matches абсолютно пустой массив.
Подумал что не правильно регулярное составил. Попробовал на перле:
#! /usr/bin/perl -w
open(logAcces,"< /home/zkl/Загрузки/php_programmer/access.log");
flock(logAcces,2);
my (@refId,@list, $i);
$i=0;
while($line=<logAcces>){
@refId=$line=~m/REFER_ID=(\d+)/g; #тут массив
if(exists($refId[0])){
$list[$i++]=$refId[0];
}
}
foreach $id (@list){
print "$id \n";
}
close(logAcces);


Работает нормально.
Вопрос: где я не прав?
Работаю из под Ubuntu, нужно ли настроить какой-нить ПеХеПешный пакет для работы с регулярными выражениями?

_____________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Быстрый ответ:

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