online kullanıcı log

3 Cevap

Ben çevrimiçi kullanıcının IP tespiti için bir kod (PHP) inşa etmek istiyorum

Ben yüklü Discuz forum. Var bu IPS kendini gösterir.

what i want is something different.

Ben bir sayfada all online users in ip görmek için bir kod inşa etmek istiyoruz.

ben bunu nasıl?

Ben bir kod yazdı. bkz:

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;
}

kullanımı:

$ipp=getRealIpAddr();
echo "real ip=".$ipp;

AMA ben bir günlük gibi tek sayfada tüm online kullanıcıların ip görmek istiyorum.

Ben bu sefer açık olmaya çalıştım.

3 Cevap

Ben size kullandığınız forum yazılımı ile bu uygulamaya nasıl bir cevap veremem. Ben siteyi kontrol ettik ve onlar mods ve eklentileri için forum var, bu yüzden (burada birisi elbette bunu biliyor sürece) bu bir eklenti olması için varsa orada sormak isteyebilirsiniz.

Şu anda siteye giriş tüm kullanıcıların IP adreslerini öğrenmek için, bu satırları (şu anda 'bir oturuma sahip' olarak oturum tanımlamak) birlikte bir şey yapabilirsiniz:

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

Sonra lib bir SessionReader sınıf eklemek, örneğin

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")); 
    }
}

Bunu kullanmak için, mutlaka

$sessionReader = new SessionReader;
foreach( $sessionReader->getEveryonesSessionData() as $session) {
    echo $session['IP'];
}

Disclaimer: this is just a proof of concept aka ugly hack. I don't expect this to work without adjustment. so you shouldn't either. But you should be able to get it done from here.

SessionReader başka app PHP.ini veya belirtilen session_save_path tüm oturum dosyalarını okumak gerekir. Varsayım oturum dosyaları sess ile başlar ve dosya sisteminde saklanır olduğunu. () GetEveryonesSessionData ararken, sınıf, bulmak okumak, çözmek ve bir dizideki tüm dosyaları oturum dönmek, böylece onları teker teker erişebilirsiniz olacaktır.

Forum yazılımı ile çalışan almak için, şu anda kullanıcılar ve eğer ve nasıl oturumlarını kullanmak giriş tanımlamak öğrenmek zorunda.

Eğer İsmail anlaşılacağı gibi sadece sunucu günlükleri kontrol gibi hissediyorum yoksa, belki bir db için kendi günlük yapabilirdi. Sadece PHP şu anda çevrimiçi olduğunu herkes biliyor olamaz. (Eğer sayfa idam edildiği esnasında küçük zaman dilimi bahsediyoruz sürece.) "Şu anda online" zaten gerçek bir kavram değildir genellikle "son X dakika içinde" anlamına gelir. Forum yazılımı gibi şeyler sadece son erişim zaman oturum ve gösteri kullanıcıların son erişim son X dakika içinde olan insan sayısı. Yani siz de aynı şeyi ama rekor IP yapabilirdi.

This aradığınız budur ...