发新话题
打印

PHP错误信息提示帮助

本主题由 admin 于 2007-11-4 12:01 移动

PHP错误信息提示帮助

错误提示:


Notice: Undefined offset: 6 in E:\SERVER\htdocs\logs.php on line 31

这是我写的代码,请问是哪里出错了,我的环境AP2+P5.2.0+M5
复制内容到剪贴板
代码:
<html>
<head>
<title>格式化Apache服务器日志文件</title>
</head>

<body>
<?php
//将Access.log日志读入一个数组
$loginfo = file('access.log');
$i = 0;
echo "<table border=1><tr>\n";
echo "<th>客户端IP</th>\n";
echo "<th>时间</th>\n";
echo "<th>发送方式</th>\n";
echo "<th>客户端协议</th>\n";
echo "<th>请求文件</th>\n";
echo "</tr>";

//遍历日志信息数组
foreach($loginfo as $logline) {
    //被请求文件名的匹配。只接受后缀为".php" . ".html" . ".htm"的文件
    if(preg_match("/\".*\/[^\/]+\.(php|html|htm)\??.*\"/i", $logline)) {
        echo "<tr>\n";
        //进行匹配
        $pattern = "([\d.]+)\s" . "([-\w]+)\s([-\w]+)\s" . "\[(.+?)\]\s" . "\"(POST|GET)\s([^\s]+)\s(HTTP\/1\.[0123])\"\s" . "(\d+)\s(\d+)";
        preg_match("/$pattern/ix", $logline, $m); //使用"x"表示忽略空白
        echo "<td>{$m[1]}</td>\n"; //显示IP地址

        //重新格式化时间,通过"/",":"进行分隔
        $dt = split("[\/\:]", $m[4]);
        $newtime = strtotime("{$dt[0]}{$dt[1]}{$dt[2]}{$dt[3]}:{$dt[4]}:{$dt[5]}{$dt[6]}");
        $newtime = date("Y-m-d H:i:s", $newtime);

        echo "<td align=left>{$newtime}</td>\n"; //显示时间
        echo "<td align=center>{$m[5]}</td>\n"; //显示发送方式
        echo "<td align=left>{$m[7]}</td>\n"; //显示客户端协议
        echo "<td align=left>{$m[6]}</td>\n"; //显示请求文件
        echo "</td>\n";
    }
}
echo "</table>";
?>
</body>
</html>

TOP

引用:
$newtime = strtotime("{$dt[0]}{$dt[1]}{$dt[2]}{$dt[3]}:{$dt[4]}:{$dt[5]}{$dt[6]}");
楼主你中间少了一个空格。

1. 你可以加一个@前面
2. 错误是因为你语法不对, 正确的请参考http://www.gnu.org/的语法。
3. 第31行应为 echo "</tr>\n";

[ 本帖最后由 tomsou 于 2007-9-26 14:43 编辑 ]

TOP

修改后的的代码:
复制内容到剪贴板
代码:
<html>
<head>
<title>格式化Apache服务器日志文件</title>
</head>

<body>
<?php
//将Access.log日志读入一个数组
$loginfo = file('access.log');
$i = 0;
echo "<table border=1><tr>\n";
echo "<th>客户端IP</th>\n";
echo "<th>时间</th>\n";
echo "<th>发送方式</th>\n";
echo "<th>客户端协议</th>\n";
echo "<th>请求文件</th>\n";
echo "</tr>";

//遍历日志信息数组
foreach($loginfo as $logline) {
    //被请求文件名的匹配。只接受后缀为".php" . ".html" . ".htm"的文件
    if(preg_match("/\".*\/[^\/]+\.(php|html|htm)\??.*\"/i", $logline)) {
        echo "<tr>\n";
        //进行匹配
        $pattern = "([\d.]+)\s" . "([-\w]+)\s([-\w]+)\s" . "\[(.+?)\]\s" . "\"(POST|GET)\s([^\s]+)\s(HTTP\/1\.[0123])\"\s" . "(\d+)\s(\d+)";
        preg_match("/$pattern/ix", $logline, $m); //使用"x"表示忽略空白
        echo "<td>{$m[1]}</td>\n"; //显示IP地址

        //重新格式化时间,通过"/",":"进行分隔
        $dt = split("[\/\:]", $m[4]);
        $newtime = strtotime("{$dt[0]}{$dt[1]}{$dt[2]} {$dt[3]}:{$dt[4]}:{$dt[5]}{$dt[6]}");
        $newtime = date("Y-m-d H:i:s", $newtime);

        echo "<td align=left>{$newtime}</td>\n"; //显示时间
        echo "<td align=center>{$m[5]}</td>\n"; //显示发送方式
        echo "<td align=left>{$m[7]}</td>\n"; //显示客户端协议
        echo "<td align=left>{$m[6]}</td>\n"; //显示请求文件
        echo "</tr>\n";
    }
}
echo "</table>";
?>
</body>
</html>

TOP

不行,还是错的,我找了好久都没有找出来哪里写错了

TOP

呵呵,用的tomsou的代码,下面是执行后的截图,lz不知你问题出在哪儿
附件: 您所在的用户组无法下载或查看附件
一個偽裝成白癡的天纔!

TOP

就是哪用tomsou的代码,还是报错啊

TOP

发新话题