Php 在线用户日志

Php 在线用户日志,php,Php,我想构建一个用于检测在线用户ip的代码(PHP) 我已经安装了。它显示了ips本身 我想要的是不同的东西。 我想构建一个代码,在一个页面中查看所有在线用户的ip 我怎么能做到 我写了一个代码。见: function getRealIpAddr() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet { $ip=$_SERVER['HTTP_CLIENT_IP']; } el

我想构建一个用于检测在线用户ip的代码(PHP)

我已经安装了。它显示了ips本身

我想要的是不同的东西。

我想构建一个代码,在一个页面中查看所有在线用户的ip

我怎么能做到

我写了一个代码。见:

function getRealIpAddr() 
{
  if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
  {
    $ip=$_SERVER['HTTP_CLIENT_IP'];
  }
  elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy
  {
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
  }
  else
 {
   $ip=$_SERVER['REMOTE_ADDR'];
 }

 return $ip;
}
用法:

$ipp=getRealIpAddr();
echo "real ip=".$ipp;
但我想在一个页面上看到整个在线用户的ip,就像日志一样


这次我试着澄清一下。

如果你不想像Ishmael建议的那样检查你的服务器日志,你可以自己记录到数据库中。你不能让PHP认识所有在线的人。“当前在线”并不是一个真正的概念(除非你说的是执行页面的极小时间范围),它通常意味着“在最后X分钟”。论坛软件之类的东西只需记录上次访问时间,并向用户显示最近X分钟内最后一次访问的人数。因此,你可以做同样的事情,但也可以记录IP。

是你正在寻找的…

我无法回答如何使用你正在使用的论坛软件实现这一点。我已经检查了这个网站,他们有mods和插件论坛,所以你可能想问这里是否有插件(除非这里有人知道)

要查找当前登录到您的站点的所有用户的IP,您可以按照以下方法进行操作(我们将当前登录定义为“拥有会话”):

然后在lib中添加SessionReader类,例如

class SessionReader
{
    // serializes session data without destroying your own session 
    public function decode($filecontent){
        // see http://de.php.net/manual/de/function.session-decode.php#69111
    }

    // just reads in the contents of a session file
    public function readSessionData($file)
    {
        return file_get_contents(realpath("$session_save_path/$file"));
    }

    // returns all filenames in save path starting with 'sess'
    public function getSessionFiles()
    {
        $path = realpath(session_save_path());
        return glob($path . '/sess*');
    }

    // uses the above methods to build an array of all decoded sessions
    public function getEveryonesSessionData()
    {
        $contents = array_filter($this->getSessionFiles(), 
                                 array($this, "readSessionData"));

        return array_filter($contents, array($this, "decode")); 
    }
}
要使用它,请执行以下操作:

$sessionReader = new SessionReader;
foreach( $sessionReader->getEveryonesSessionData() as $session) {
    echo $session['IP'];
}
免责声明:这只是一个概念证明,又名丑陋的黑客。我不希望这在没有调整的情况下奏效。所以你也不应该。但你应该可以在这里完成

SessionReader应该能够读取PHP.ini中指定的session_save_路径或应用程序中其他地方的所有会话文件。假设会话文件从SES开始并存储在文件系统中。调用getEveryonesSessionData()时,该类将查找、读取、解码并返回数组中的所有会话文件,因此您可以逐个访问它们


要使用论坛软件运行此功能,您必须了解他们如何定义当前登录的用户,以及他们是否以及如何使用会话。

感谢您的回答,我想要一个页面,列出在线用户的IP,非常简单。
$sessionReader = new SessionReader;
foreach( $sessionReader->getEveryonesSessionData() as $session) {
    echo $session['IP'];
}