【问题标题】:Log user ip address, date and time记录用户 IP 地址、日期和时间
【发布时间】:2011-10-13 20:07:28
【问题描述】:

是否有一个简单的脚本或一段代码可以添加到我的页面来记录每个访问者、他们访问页面的日期和时间以及 IP 地址? 最好的方法是什么... javascript、php 或其他?

编辑:

哎哟……

发生了什么事...当我使用 FileZilla 访问我的服务器时,所有域名(大约 20 个)都像我的 domain.com 一样被记录,所以我找到了我需要的域名并检查了日志,但它主要是搜索引擎。

但我刚回去,碰巧向下滚动到看不见的东西,所有的域名又在前面加上 www,比如 www.mydomain.com,当然那里的日志很大,而且每个我需要的一点信息。

发生这种情况是因为我找到了我正在寻找的 mydomain.com,当然我停止了寻找。我不知道也不知道有一个完全不同的场景……诚实的错误。

我仍在使用该代码,因为它又好又小,日志非常庞大,需要数小时才能下载和查看。

【问题讨论】:

  • 你不能只看你的网络服务器的访问日志吗?
  • 回答您的问题:(1) 是 (2) 服务器端,所以 php 或任何其他服务器端语言,最后是lots of choice
  • 虽然 D.N. 的选择确实更胜一筹。很多包也可以自动解析访问日志。
  • 我这样做了,但并没有向我展示所有内容。这只是搜索引擎
  • 如果您在 debian 或 ubuntu 上运行默认的 apache 安装,请尝试检查 /var/log/apache2/access.log 以查看此文件是否已存在

标签: php javascript shtml


【解决方案1】:

这是我记录 IP 地址的小脚本 不要忘记在 /HEAD 标记后添加以下内容 另请注意,要使其工作,它必须是 PHP 而不是 HTML

<?php include ('log-ip.php') ?>

你想从哪里调用它

“log-ip.php”

<?php
$iplogfile = 'logs/ip-address-mainsite.html';
$ipaddress = $_SERVER['REMOTE_ADDR'];
$webpage = $_SERVER['SCRIPT_NAME'];
$timestamp = date('d/m/Y h:i:s');
$browser = $_SERVER['HTTP_USER_AGENT'];
$fp = fopen($iplogfile, 'a+');
chmod($iplogfile, 0777);
fwrite($fp, '['.$timestamp.']: '.$ipaddress.' '.$webpage.' '.$browser. "\n<br><br>");
fclose($fp);
?>

结果是一个不错的 Web HTML 日志文件 日志/ip-address-mainsite.html

<!DOCTYPE html><!-- HTML5 -->

<head>
<body bgcolor="#000000">
<title>NZ Quakes - Main Web Site Log</title>

</head>

<body>
<font color="#7FFF00">
<center>NZ Quakes - Main Web Site Log</center>
<font color="gold">
<br><center>
[01/04/2017 08:25:21]: 124.197.9.181 /index.php Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36
<br><br>

下面是它的样子。

您对此有何看法,我认为它干净简单。

【讨论】:

    【解决方案2】:
    $line = date('Y-m-d H:i:s') . " - $_SERVER[REMOTE_ADDR]";
    file_put_contents('visitors.log', $line . PHP_EOL, FILE_APPEND);
    

    考虑同时记录$_SERVER['REQUEST_URI'] 或其他有趣的信息,可能采用@Day 概述的更标准格式。

    【讨论】:

    • @gravityboy:它有效,但正如 cmets 中的几个人所建议的那样,这两行代码比你真正需要的多 2 行代码;) 试试using your webserver's built-in logging
    • @Day 完全同意。不过,根据您的主机,您可能无法访问这些日志,因此这是滚动您自己的最直接的方式。
    • @deceze Gosh 当然。共享主机。时间久了,我真的忘记了。好点谢谢。
    • @gravity 放到REMOTE_ADDR后面的字符串中。 … $_SERVER[REMOTE_ADDR] - $_SERVER[REQUEST_URI]".
    • @gravity 是的,这就是引用者 [原文如此]。从$_SERVER array 或 PHP 可以访问的任何其他类型的数据中记录您想要的任何内容。
    【解决方案3】:

    要添加到您的页面的最简单的代码就是完全没有代码。那么我可以建议“别的东西”吗?尝试使用您的网络服务器的内置请求日志记录工具,而不是编写一些自定义 PHP 代码。

    Apache 和许多其他网络服务器可以在Common Log Format (CLF) 中生成日志,并且有许多工具可用于分析此类日志并为您绘制漂亮的图表(WebalizerAwstats 等)。 CLF 日志行如下所示,可为您提供您要求的所有信息以及更多信息:

    127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 
    

    请参阅您的网络服务器的相应文档,了解如何配置日志记录并试一试:

    【讨论】:

    • 我的网络服务器正在创建日志,但不是所有的用户......它主要只是搜索引擎。我会找出原因并报告回来。谢谢
    • @gravityboy 这听起来很奇怪。您使用的是哪个网络服务器?阿帕奇?
    • @gravityboy 没问题。现在你会记住并且下次知道该怎么做:)
    【解决方案4】:
    <?php
        // include this piece of code in every page call
    
        // write in database row
        $log = array('time' => time(), 'ip' => $_SERVER['REMOTE_ADDR'], 'url' => $_SERVER['REQUEST_URI']);
    ?>
    

    【讨论】:

    • 这会自动创建日志文件吗?
    • 没有。我假设您想将日志条目写入数据库 - 要登录文件,请查看上面的 @Deceze 答案。
    • 很久以前,但是哪个数据库?你还没有指定任何?
    【解决方案5】:

    最全面——Apache的访问日志:Log Files -> Access Log @ httpd.apache.org

    【讨论】:

    • 暗示文章作者使用 Apache。
    • @Daniel:嗯,他要的是“别的东西”。
    • @Daniel,他可能没有使用 Apache,但他可能正在使用网络服务器,如果他选择的网络服务器没有执行他正在寻找的最小请求日志记录,那么它不是一个网络服务器我听说过。在my answer 中对此进行了扩展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2018-02-07
    • 1970-01-01
    相关资源
    最近更新 更多