自己用PHP来分析Apache访问日志
2004-10-15 15:21
519 查看
根据实际工作需要,想从访问日志里找出自己想要的东西,如找不到的文件,从google来的还是从yahoo来的或从别的地方来的,还是搜索引擎的蜘蛛访问。原理很简单就是打开文件,过滤不要的记录,分解记录字段,列表所需结果。几乎凭一个PHP的函数preg_match()搞定。下面是源代码,自己研究吧 !
<html>
<head>
<title>
Simple tools for website logs
</title>
</head>
<body>
<form name="my_form" method="post">
Select your type :<br>
<select name="type">
<option value="">Get the null links</option>
<option value="yahoo">Acess from yahoo</option>
<option value="google">Access from google</option>
<option value="msn">Access from Msn</option>
<option value="robot">Access by robots</option>
</select>
<input type="submit" name="submit" value="get the result">
</form>
<table border=1>
<tr bgcolor="#FFCCFF">
<td><font color="#000000">ClientIP</font></td>
<td><font color="#000000">AccessTime</font></td>
<td><font color="#000000">TargetPage</font></td>
<td><font color="#000000">Code</font></td>
<td><font color="#000000">FromURL</font></td>
<td><font color="#000000">Client ENV</font></td>
</tr>
<?PHP
$doc_path= $_SERVER["DOCUMENT_ROOT"];
if(substr($doc_path,-1)!="/"){
$doc_path=$doc_path."/";
}
if($type=='yahoo'){
$lines = file ($doc_path.'logs/access_log');
foreach ($lines as $line_num => $line) {
if (preg_match ("/yahoo/i",strtolower($line))) {
if (!preg_match ("/slurp/",strtolower($line))){
preg_match("/([0-9.]+)?([ -]+)?(/[)?([0-9a-zA-Z+: //]+)?(/])?( /"GET //)?([a-z0-9A-Z.///?&=%_/-:+]+)?( HTTP//1.[1|0|2]/" )?([0-9.]+)?( )?([0-9./-]+)?( /")?([a-z0-9A-Z.///?&=%_/-:+]+)?(/" /")?(.*)/i",$line, $matches);
echo "<tr><td>".$matches[1]."</td><td>".$matches[4]."</td><td>".$matches[7]."</td><td>".$matches[9]."</td><td>".$matches[13]."</td><td>".$matches[15]."</td><tr>";
}
}
}
}elseif($type=="robot"){
$lines = file ($doc_path.'logs/access_log');
foreach ($lines as $line_num => $line) {
if (!preg_match("/robots.txt/i",$line)){
if (preg_match ("/(slurp)|(msnbot)|(googlebot)|(psbot)/i",strtolower($line))){
preg_match("/([0-9.]+)?([ -]+)?(/[)?([0-9a-zA-Z+: //]+)?(/])?( /"GET //)?([a-z0-9A-Z.///?&=%_/-:+]+)?( HTTP//1.[1|0|2]/" )?([0-9.]+)?( )?([0-9./-]+)?( /")?([a-z0-9A-Z.///?&=%_/-:+]+)?(/" /")?(.*)/i",$line, $matches);
echo "<tr><td>".$matches[1]."</td><td>".$matches[4]."</td><td>".$matches[7]."</td><td>".$matches[9]."</td><td>".$matches[13]."</td><td>".$matches[15]."</td><tr>";
}
}
}
}elseif($type!=""){
$lines = file ($doc_path.'logs/access_log');
foreach ($lines as $line_num => $line) {
if (preg_match ("/$type/i",strtolower($line))) {
if (!preg_match ("/".$type."bot/",strtolower($line))){
preg_match("/([0-9.]+)?([ -]+)?(/[)?([0-9a-zA-Z+: //]+)?(/])?( /"GET //)?([a-z0-9A-Z.///?&=%_/-:+]+)?( HTTP//1.[1|0|2]/" )?([0-9.]+)?( )?([0-9./-]+)?( /")?([a-z0-9A-Z.///?&=%_/-:+]+)?(/" /")?(.*)/i",$line, $matches);
echo "<tr><td>".$matches[1]."</td><td>".$matches[4]."</td><td>".$matches[7]."</td><td>".$matches[9]."</td><td>".$matches[13]."</td><td>".$matches[15]."</td><tr>";
}
}
}
}else{
$lines = file ($doc_path.'logs/access_log');
foreach ($lines as $line_num => $line) {
if (preg_match ("/ 404 /i",$line)) {
if (!preg_match ("/robots.txt/",$line)){
preg_match("/([0-9.]+)?([ -]+)?(/[)?([0-9a-zA-Z+: //]+)?(/])?( /"GET //)?([a-z0-9A-Z.///?&=%_/-:+]+)?( HTTP//1.[1|0|2]/" )?([0-9.]+)?( )?([0-9./-]+)?( /")?([a-z0-9A-Z.///?&=%_/-:+]+)?(/" /")?(.*)/i",$line, $matches);
echo "<tr><td>".$matches[1]."</td><td>".$matches[4]."</td><td>".$matches[7]."</td><td>".$matches[9]."</td><td>".$matches[13]."</td><td>".$matches[15]."</td><tr>";
}
}
}
}
?>
</table>
</body>
</html>
<html>
<head>
<title>
Simple tools for website logs
</title>
</head>
<body>
<form name="my_form" method="post">
Select your type :<br>
<select name="type">
<option value="">Get the null links</option>
<option value="yahoo">Acess from yahoo</option>
<option value="google">Access from google</option>
<option value="msn">Access from Msn</option>
<option value="robot">Access by robots</option>
</select>
<input type="submit" name="submit" value="get the result">
</form>
<table border=1>
<tr bgcolor="#FFCCFF">
<td><font color="#000000">ClientIP</font></td>
<td><font color="#000000">AccessTime</font></td>
<td><font color="#000000">TargetPage</font></td>
<td><font color="#000000">Code</font></td>
<td><font color="#000000">FromURL</font></td>
<td><font color="#000000">Client ENV</font></td>
</tr>
<?PHP
$doc_path= $_SERVER["DOCUMENT_ROOT"];
if(substr($doc_path,-1)!="/"){
$doc_path=$doc_path."/";
}
if($type=='yahoo'){
$lines = file ($doc_path.'logs/access_log');
foreach ($lines as $line_num => $line) {
if (preg_match ("/yahoo/i",strtolower($line))) {
if (!preg_match ("/slurp/",strtolower($line))){
preg_match("/([0-9.]+)?([ -]+)?(/[)?([0-9a-zA-Z+: //]+)?(/])?( /"GET //)?([a-z0-9A-Z.///?&=%_/-:+]+)?( HTTP//1.[1|0|2]/" )?([0-9.]+)?( )?([0-9./-]+)?( /")?([a-z0-9A-Z.///?&=%_/-:+]+)?(/" /")?(.*)/i",$line, $matches);
echo "<tr><td>".$matches[1]."</td><td>".$matches[4]."</td><td>".$matches[7]."</td><td>".$matches[9]."</td><td>".$matches[13]."</td><td>".$matches[15]."</td><tr>";
}
}
}
}elseif($type=="robot"){
$lines = file ($doc_path.'logs/access_log');
foreach ($lines as $line_num => $line) {
if (!preg_match("/robots.txt/i",$line)){
if (preg_match ("/(slurp)|(msnbot)|(googlebot)|(psbot)/i",strtolower($line))){
preg_match("/([0-9.]+)?([ -]+)?(/[)?([0-9a-zA-Z+: //]+)?(/])?( /"GET //)?([a-z0-9A-Z.///?&=%_/-:+]+)?( HTTP//1.[1|0|2]/" )?([0-9.]+)?( )?([0-9./-]+)?( /")?([a-z0-9A-Z.///?&=%_/-:+]+)?(/" /")?(.*)/i",$line, $matches);
echo "<tr><td>".$matches[1]."</td><td>".$matches[4]."</td><td>".$matches[7]."</td><td>".$matches[9]."</td><td>".$matches[13]."</td><td>".$matches[15]."</td><tr>";
}
}
}
}elseif($type!=""){
$lines = file ($doc_path.'logs/access_log');
foreach ($lines as $line_num => $line) {
if (preg_match ("/$type/i",strtolower($line))) {
if (!preg_match ("/".$type."bot/",strtolower($line))){
preg_match("/([0-9.]+)?([ -]+)?(/[)?([0-9a-zA-Z+: //]+)?(/])?( /"GET //)?([a-z0-9A-Z.///?&=%_/-:+]+)?( HTTP//1.[1|0|2]/" )?([0-9.]+)?( )?([0-9./-]+)?( /")?([a-z0-9A-Z.///?&=%_/-:+]+)?(/" /")?(.*)/i",$line, $matches);
echo "<tr><td>".$matches[1]."</td><td>".$matches[4]."</td><td>".$matches[7]."</td><td>".$matches[9]."</td><td>".$matches[13]."</td><td>".$matches[15]."</td><tr>";
}
}
}
}else{
$lines = file ($doc_path.'logs/access_log');
foreach ($lines as $line_num => $line) {
if (preg_match ("/ 404 /i",$line)) {
if (!preg_match ("/robots.txt/",$line)){
preg_match("/([0-9.]+)?([ -]+)?(/[)?([0-9a-zA-Z+: //]+)?(/])?( /"GET //)?([a-z0-9A-Z.///?&=%_/-:+]+)?( HTTP//1.[1|0|2]/" )?([0-9.]+)?( )?([0-9./-]+)?( /")?([a-z0-9A-Z.///?&=%_/-:+]+)?(/" /")?(.*)/i",$line, $matches);
echo "<tr><td>".$matches[1]."</td><td>".$matches[4]."</td><td>".$matches[7]."</td><td>".$matches[9]."</td><td>".$matches[13]."</td><td>".$matches[15]."</td><tr>";
}
}
}
}
?>
</table>
</body>
</html>
相关文章推荐
- AWStats分析Tomcat\Apache\IIS\nginx 的访问日志
- linux 分析apache访问日志脚本
- Apache/Nginx 访问日志分析脚本 推荐
- 笔记----windows下安装awstats来分析apache的访问日志
- 几条分析apache访问日志的命令
- 利用AWStat+JAWStat进行Apache访问日志分析
- 分析apache的日志,查找异常访问IP
- Apache/Nginx 访问日志分析脚本
- apache访问日志分析[转]
- apache中文url日志分析--php十六进制字符串转换
- python分析apache访问日志脚本分享
- python分析apache访问日志脚本分享
- Apache/Nginx 访问日志分析脚本
- 基于APACHE访问日志分析(access_log)的广告流量统计系统
- php项目,别人无法访问自己(windows 系统)上Apache服务器原因(转载)
- apache中文url日志分析--php十六进制字符串转换
- Apache和PHP的安装配置以及外网访问自己的网站
- apache访问日志分析
- 自制模仿apache访问日志文件格式的php日志类
- Spark-再次分析Apache访问日志