2010-01-06 4 views
-1

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

я установил Discuz forum. он показывает ипс.

что-то другое.

Я хочу, чтобы создать код, чтобы увидеть 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; 

НО Я хочу видеть внутрибрюшинно целых интернет-пользователей на одной странице, как бревно.

На этот раз я старался быть чистым.

ответ

1

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

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

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

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

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

0

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

+0

спасибо за ответ, я хочу, чтобы страница, в которой перечислены IP-пользователи онлайн, очень проста. – Alireza

Смежные вопросы