使用php作为命令行脚本(CLI),可以处理很多日常维护工作。
比如从apache的access.log中得到访问用户的ip地址,可以使用以下脚本:
eip.php
$fh=fopen($argv[1],’r');
if(!$fh){
var_dump($argv);
exit();
}
$ips=null;
while(!feof($fh)){
$l=fgets($fh);
$pos=strpos($l,’ ‘);
if($pos>0){
echo substr($l,0,$pos).”\n”;
// $ips[]=substr($l,0,$pos);
}
}
fclose($fh);?>
执行:
php eip.php access.log 或者 chmod +x eip.php ; ./eip.php access.log
可以看到所有访问的ip地址
然后:
./eip.php | uniq #得到不重复ip地址
./eip.php | uinq | wc -l # 得到不重复ip地址数目
awk ‘{print $1;}’ access.log.0 | uniq -c |sort -k1 -g -r|less #倒序打印访问ip地址
awk ‘{print $1;}’ bbs-access_log |uniq -c |sort -k1 -r>ip_count.bbs_access_log #得到每个ip地址的访问次数输出到文件
sed ‘/craw/!d’ ip*bbs*| awk ‘{ total +=$1}END {print total}’ #得到crawler的访问总次数
或者 awk ‘/craw/ {total+=$1}END {print total}’
awk ‘{total+=$1}END{print total}’ ip*bbs* #得到访问总次数
while($line=fgets($fh)){
//get ip
$pos=strpos($line,’ ‘);
if($pos<=0)
continue;
$ol=trim(substr($line,0,$pos));
//get access time
$pos=strpos($line,’[');
$epos=strpos($line,’]');
if($pos<=0 || $epos<=0)
continue;
// 09/Jul/2007:20:00:17
$date=trim(substr($line,$pos+1,$epos-1-$pos));
preg_match(]*) (.*)@”,$date,$ms);
list($a,$day,$mon,$yar,$hou,$min,$sec,$s)=$ms;
$ndate=”$yar-$mon-$day $hou:$min:$sec”;
echo $ol.” “.$ndate.”\n”;
}
阅读(1261) | 评论(0) | 转发(0) |