Burada, herkes için bu çözme uğruna. Sipariş kodu monte ve yolda yönergeleri kullanabilirsiniz. PHP'nin GD uzantısı gerektirir.
Webroot bir dizin yapmak, web cini ona yazabilirsiniz emin olun:
mkdir liveusers
Create bir PHP komut dosyası (vlive.php örneğin) touch Kodu (temasa btw. standart sistemi (), passthru (kullanmak, * nix komut için ) veya exec () bunu kullanmak gibi hissediyorum ne olursa olsun). O touch benzersiz bir dosya adı ile bu dizinde bir dosya, örneğin IP + OturumNo birlikte concat'd var:
<?php
exec("touch ". $_SERVER['DOCUMENT_ROOT']."/liveusers/". md5($_SERVER['REMOTE_ADDR'].session_id()));
Şimdi de same file biz () 's I pixel.jpg Webroot /images/ directory içine adında bir 1x1 piksel koymak çıkışına uygun başlığı ile bir JPEG bitirmek kapalı gerekir , başka bir şey yapmak için çekinmeyin:
$NewImage = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT']. "/images/pixel.jpg");
header("Content-type: image/jpeg");
imagejpeg($NewImage);
?>
PHP dosyayı kaydedin, sonra yararlıdır almak için belgeye standart bir HTML etiketini yerleştirin:
<img src="/vlive.php" alt="Imagination!" />
Bu daha sonra önbelleğe sayfaları ile saf PHP gitmek sadece bu kadar canlı kullanıcı dosyaları ancak şimdiye kadar touch 'd olsun yapacaktır. Bunu yaparak yine "canlı" kullanıcıları saymak ve sitenizde bir tam sayfa önbellek sistemi kullanın.
Onlar da diğer sayfaları ziyaret ediyorsanız Tamam şimdi her sayfasında bir ziyaretçi, yüklerin kendi benzersiz bir dosya dokunur, bu yüzden sadece son zamanlarda dokunmatik komutunu gelen eğer bu kullanıcı için bir dosya yaratacaktır, bu {aynı ile erişim tarihini düzenlemek olacaktır [(0)]} komutu.
Yararlı olur budur:
Farklı bir PHP komut dosyası (diyelim readvlive.php):
<?php
$livenum = system("find ".$_SERVER['DOCUMENT_ROOT']."/liveusers/ -type f -amin +10 | wc -l");
echo "Live Visitors: ". $livenum;
?>
Şimdi sen onu görmek istiyorum HTML öğesi içine bu pasajını içerecek edelim:
<?php include($_SERVER['DOCUMENT_ROOT']. "/readvlive.php"); ?>
Ok şimdi biz sadece 10 dakika önce değişti erişim süresine sahip benzersiz dosya sayısına yazdırmak olacak bir dosya var. Bu son on dakika içinde canlı kullanıcıları ...
Eğer oldukça can sıkıcı ve işe yaramaz hale böylece bu belgelerin içine önbelleğe canlı numarasını donabilir tam sayfa önbelleği kullanmak Şimdi eğer biz burada, yine bir seçim var. Bunun için ben PrototypeJS (Google it) önermek, Sen <head></head>
strong> arasındaki bu yer, kendi fantezi AJAX araçlarını kullanmak
<script src="/js/prototype.js" type="text/javascript"></script>
sonra </body>
strong> etiketi üzerinde bu yerleştirin.
<span id="live_users_count"> </span>
<script type="text/javascript">
<!--
Event.observe(window, 'load', function() {
if($('live_users_count')) {
new Ajax.Updater('live_users_count','/readvlive.php');
}
}
-->
</script>
Should be fine.. not too rough. If you're concerned with how much your directory is gonna be running that find command, you could use APC or something to cache it.
This example requires APC 3.1.4:
<?php
if(apc_exists('livenum')){
$livenum = apc_fetch('livenum');echo $livenum;
} else {
$livenum = system("find ".$_SERVER['DOCUMENT_ROOT']."/liveusers/ -type f -amin +10 | wc -l");
apc_add('livenum',$livenum,30);
}
?>
APC 3.0.13 ve yukarı:
<?php
if($livenum = apc_fetch('livenum')){
echo $livenum;
} else {
$livenum = system("find ".$_SERVER['DOCUMENT_ROOT']."/liveusers/ -type f -amin +10 | wc -l");
apc_add('livenum',$livenum,30);
}
?>
Bu canlı kullanıcıların son 10 dakikaları gösteren 30 saniye boyunca APC önbelleğe kullanacak, dakikada iki kez hesaplamak için komut bulmak çalışacaktır. Fena değil. : P
Clean up crontab ile yapılabilir ..
Betik (/root/deloverhead.sh):
#!/bin/sh
find "/path/to/liveusers/ -type f -amin +60 -exec rm {} \;
Crontab girdisi (her saat):
0 * * * * /root/deloverhead.sh >/dev/null 2>&1
Eğlenin, üzgünüm Garip şeyler açıklayabilir. : P