Пишу скрипт для разбора лога squid.
======================================
$file_name=file("/usr/local/squid/var/logs/access.log");
echo "<table border=1>";
foreach ($file_name as $login_pass) {
list($dt,$kb,$ip,$type,$razm,$method,$adr,$tire,$where,$file_type) = explode(' ',rtrim($login_pass));
echo "<tr><td>$dt</td><td>$kb</td><td>$ip</td><td>$type</td><td>$razm</td><td>$method</td><td>$adr</td><td>$tire</td><
}
echo "</table>";
======================================
Результат такой
1160730628.836 1288 192.168.10.13 TCP_MISS/302 467 GET http://ad.adriver.ru/cgi-bin/rle.cgi? -
1160730628.882 1325 192.168.10.13 TCP_MISS/302 467 GET http://ad.adriver.ru/cgi-bin/rle.cgi? -
1160730628.887 1321 192.168.10.13 TCP_MISS/302 467
А должен быть таким:
1160730668.821 417075 192.168.10.13 TCP_MISS/200 130450 GET http://kotok.ru/music/music/mp3/bratja_grimm_kotok.mp3 - DIRECT/81.222.134.19 audio/mpeg
Это из-за того, что он читает каждый пробел. А как сделать так чтобы он читал несколько пробелов как один??
>Пишу скрипт для разбора лога squid.
>======================================
>$file_name=file("/usr/local/squid/var/logs/access.log");
>echo "<table border=1>";
>foreach ($file_name as $login_pass) {
>list($dt,$kb,$ip,$type,$razm,$method,$adr,$tire,$where,$file_type) = explode(' ',rtrim($login_pass));
>echo "<tr><td>$dt</td><td>$kb</td><td>$ip</td><td>$type</td><td>$razm</td><td>$method</td><td>$adr</td><td>$tire</td><
>}
>echo "</table>";
>======================================
>Результат такой
>1160730628.836 1288 192.168.10.13 TCP_MISS/302 467 GET http://ad.adriver.ru/cgi-bin/rle.cgi? -
>1160730628.882 1325 192.168.10.13 TCP_MISS/302 467 GET http://ad.adriver.ru/cgi-bin/rle.cgi? -
>1160730628.887 1321 192.168.10.13 TCP_MISS/302 467
>А должен быть таким:
>1160730668.821 417075 192.168.10.13 TCP_MISS/200 130450 GET http://kotok.ru/music/music/mp3/bratja_grimm_kotok.mp3 - DIRECT/81.222.134.19 audio/mpeg
>Это из-за того, что он читает каждый пробел. А как сделать так
>чтобы он читал несколько пробелов как один??explode(' ',rtrim($login_pass)) надо заменить на preg_split ('/\s+/',rtrim($login_pass))
Нашел статью из http://alxumuk.com.ru/archive/02.05.2003/1.Следовал инструкциям, но скрипт для добавления в базу по-моему неправильно работает:
#!/bin/bash
cp /usr/local/squid/var/logs/access.log /tmp/squidforparse.log
>/usr/local/squid/var/logs/access.log
awk '{print "INSERT INTO squid (ip,bytes,link,trans,time) VALUES("$3","$5","$7","$9",from_unixtime("$1"));"};' < /tmp/squidforparse.log | /usr/local/mysql/bin/mysql -D traffics -u root --password=my_db_passw
rm -f /tmp/squidforparse.logВ результате этот скрипт говорит, что
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.66.90,2414,http://wap.lenta.ru/,NONE/-,from_unixtime(1160807795.127))' at line 1
Где тут ошибка???