Siteden Oyuncu Sayısı Çekmek

İlk adımda veri tabanında yeni bir sütun oluşturmalısınız. Oyun sunucusu her 5 dakikada bir bağlı olan oyuncuların kimliğini(ID) alıp, veri tabanında yeni oluşturmuş olduğunuz sütuna o anki tarihi, saati ve dakikasını yazarak satırı güncellemeli. Son adımda bunu sitede görüntüleyebilmek için yeni bir sorgulama yapmalısınız, bu sorguda ise aşağıdaki gibi olmalıdır.
Kod:
$Statement = $Connection->query("SELECT * FROM test WHERE LAST_LOGIN > DATE_SUB(NOW(), INTERVAL 5 MINUTE)");
echo $Statement->rowCount();
 
İlk adımda veri tabanında yeni bir sütun oluşturmalısınız. Oyun sunucusu her 5 dakikada bir bağlı olan oyuncuların kimliğini(ID) alıp, veri tabanında yeni oluşturmuş olduğunuz sütuna o anki tarihi, saati ve dakikasını yazarak satırı güncellemeli. Son adımda bunu sitede görüntüleyebilmek için yeni bir sorgulama yapmalısınız, bu sorguda ise aşağıdaki gibi olmalıdır.
Kod:
$Statement = $Connection->query("SELECT * FROM test WHERE LAST_LOGIN > DATE_SUB(NOW(), INTERVAL 5 MINUTE)");
echo $Statement->rowCount();

Kendi sunucumda bulunan oyuncu sayısını almada sorun yaşamıyorum fakat bir başkasının sitesinde yazan rakamı almam gerekiyor.
 
Test linki: http://00xdewoho.00web.net/erkantest.php

PHP kodu, basitçe yazdım, özen göstermedim.
PHP:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.2017pvp.com/#metin2#pvpserverlar.biz");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$cikti = curl_exec ($ch);
curl_close ($ch);
preg_match('/<b id="online_oyuncu">(.*?)<\/b>/', $cikti, $sonuclar);
$sayi = trim($sonuclar[1]);
echo "Sunucudaki online kullanıcı sayısı: ".$sayi;
?>
 
Test linki: http://00xdewoho.00web.net/erkantest.php

PHP kodu, basitçe yazdım, özen göstermedim.
PHP:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.2017pvp.com/#metin2#pvpserverlar.biz");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$cikti = curl_exec ($ch);
curl_close ($ch);
preg_match('/<b id="online_oyuncu">(.*?)<\/b>/', $cikti, $sonuclar);
$sayi = trim($sonuclar[1]);
echo "Sunucudaki online kullanıcı sayısı: ".$sayi;
?>

Teşekkür ederim. Fakat sadece bu site olmayacak, birden fazla(yüzlerce olabilir) site kayıt olacak ve bu kayıtları ben değil üyeler yapacak. Bu durumda her sitenin doğal olarak tasarımı farklı olabileceği için malesef bu şekilde olmuyor :( Bu tarz örnek bir site ; Silkroad PvP Serverler | SrO Server info & Stats

Siteye kayıt olurken ıp ve port istiyor ve muhtemelen bu veriler ile oyuncu sayısını çekiyor. Birkaç kişi ile görüştüm fakat ıp ve port ile sadece onlıne/offlıne kontrolü yapılabiliyor.
 
Elimde socket_create destekleyen sunucu bulunmadığı için kurmaya da üşendim, elinizdeki sunucuya kurup denersiniz.

PHP:
<?
function GetUserCount($ip, $port)
{
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    $result = socket_connect($socket, $ip, $port);
    
    $query = "@USER_COUNT\n";
    
    $write_res = socket_write($socket, $query, strlen($query));
    $recv_res = socket_recv($socket, $output, 5056, 0);
    socket_close($socket);
    
    $output = substr($output, 17);
    
    return array(
        "shinsoo" => intval(substr($output, 0, -7)),
        "chunjo" => intval(substr($output, 0, -5)),
        "jinno" => intval(substr($output, 0, -3)),
        "unknown" => intval(substr($output, 0, -1))
    );
}
$count = GetUserCount("178.20.227.130", 15779);
echo "Shinsoo: " . $count["shinsoo"] . "<br>";
echo "Chunjo: " . $count["chunjo"] . "<br>";
echo "Jinno: " . $count["jinno"] . "<br>";
echo "?: " . $count["unknown"] . "<br>";
echo "All: " . ($count["shinsoo"] + $count["chunjo"] + $count["jinno"] + $count["unknown"]) . "<br>";
?>
 
Uyarı! Bu konu 9 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı