журнал пользователей онлайн - PullRequest
0 голосов
/ 06 января 2010

Я хочу построить код (PHP) для определения IP-адреса пользователя в сети

Я установил Discuz forum . он показывает сам 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 целых онлайн-пользователей на одной странице, например в журнале.

На этот раз я попытался прояснить ситуацию.

Ответы [ 3 ]

1 голос
/ 07 января 2010

Я не могу дать вам ответ, как реализовать это с программным обеспечением форума, которое вы используете. Я проверил сайт, и у них есть форум для модов и плагинов, так что вы можете спросить там, должен ли это быть плагин (если кто-то здесь, конечно, не знает его).

Чтобы узнать IP-адреса всех пользователей, которые в данный момент вошли на ваш сайт, вы можете сделать что-то вроде этого (мы определяем, что вы вошли в систему как «имеет сеанс»):

// put in your bootstrap after you defined getRealIpAddr()
if(session_id() === '') {
    session_start();
}
$_SESSION['ip'] = getRealIpAddr();

Затем добавьте в свою библиотеку класс 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 должен иметь возможность чтения всех файлов сеансов в сеансе session_save_path, указанном в PHP.ini или в другом месте вашего приложения. Предполагается, что файлы сеанса начинаются с sess и хранятся в файловой системе. При вызове getEveryonesSessionData () класс находит, считывает, декодирует и возвращает все файлы сеансов в массиве, поэтому вы можете обращаться к ним один за другим.

Чтобы запустить это с программным обеспечением форума, вы должны выяснить, как они определяют в настоящее время вошедших в систему пользователей, и если и как они используют сеансы.

0 голосов
/ 06 января 2010

Это - это то, что вы ищете ...

0 голосов
/ 06 января 2010

Если вы не хотите просто проверять журналы вашего сервера, как предлагает Измаил, вы можете сделать свою собственную запись в БД, возможно.Вы не можете просто заставить PHP знать всех, кто сейчас в сети.«В настоящее время онлайн» в любом случае не является реальной концепцией (если вы не говорите о крошечных временных рамках, в течение которых выполняется страница). Обычно это означает «в последние X минут».Такие вещи, как программное обеспечение форума, просто регистрируют время последнего доступа и показывают пользователям количество людей, которые последний раз обращались за последние X минут.Таким образом, вы можете сделать то же самое, но также записать IP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...