Counting On Line Users

Μια περιοχή όπου τα μέλη μας μπορούν να βάζουν τα PHP scripts που έχουν φτιάξει και θέλουν να τα μοιραστούν με τα υπόλοιπα μέλη.

Συντονιστές: Super-Moderators, WebDev Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Counting On Line Users

Δημοσίευση από Basilakis » 11 Δεκ 2005 17:59

To sigkekrimeno komati kwdika eixe anaaferthei kai paliotera edw sto freestuff.gr alla eipa na to kanw me thn morfh Script - Bohthima gia na yparxei efkero: Loipon na o kwdikas mas


Dhmiourgoume ena arxeio counter.php kai bazoume mesa ton kwdika:

Κώδικας: Επιλογή όλων

<?php 
$server = "localhost"; 
$db_user = "username"; 
$db_pass = "password"; 
$database = "db_name"; 
$timeoutseconds = 300; 

$timestamp = time&#40;&#41;; 
$timeout = $timestamp-$timeoutseconds; 

mysql_connect&#40;$server, $db_user, $db_pass&#41;; 

$insert = mysql_db_query&#40;$database, "INSERT INTO useronline VALUES 
&#40;'$timestamp','$REMOTE_ADDR','$PHP_SELF'&#41;"&#41;; 
if&#40;!&#40;$insert&#41;&#41; &#123; 
print "Useronline Insert Failed > "; 
&#125; 

$delete = mysql_db_query&#40;$database, "DELETE FROM useronline WHERE timestamp<$timeout"&#41;; 
if&#40;!&#40;$delete&#41;&#41; &#123; 
print "Useronline Delete Failed > "; 
&#125; 

$result = mysql_db_query&#40;$database, "SELECT DISTINCT ip FROM useronline WHERE file='$PHP_SELF'"&#41;; 
if&#40;!&#40;$result&#41;&#41; &#123; 
print "Useronline Select Error > "; 
&#125; 

$user = mysql_num_rows&#40;$result&#41;; 

mysql_close&#40;&#41;; 
if&#40;$user == 1&#41; &#123; 
print&#40;"Χρήστες Online&#58; $user\n"&#41;; 
&#125; else &#123; 
print&#40;"Χρήστες Online&#58; $user\n"&#41;; 
&#125; 
?> 
Meta ftiaxnoume thn bash dedomenwn pou tha xrhsimopoihsoume

Κώδικας: Επιλογή όλων

CREATE TABLE `usersonline` &#40; 
`timestamp` bigint&#40;255&#41; NOT NULL default '0', 
`ip` varchar&#40;40&#41; NOT NULL default '', 
`file` varchar&#40;100&#41; NOT NULL default '', 
PRIMARY KEY &#40;`timestamp`&#41;, 
KEY `ip` &#40;`ip`&#41;, 
KEY `file` &#40;`file`&#41; 
&#41; TYPE=MyISAM DEFAULT CHARSET=greek COLLATE=greek_general_ci;
Ena theloume na topothethsoume twra ton kwdika se kapoio shmeio ths seldia mas kanoume to ekseis

Κώδικας: Επιλογή όλων

<?php include&#40;'counter.php'&#41;; ?>
Kserw pws einai ena komati kwdika poly gnwsto alla as yparxei kai se mia meria symplhrwmeno kai oloklhro! :wink:

ManosWdd
Δημοσιεύσεις: 288
Εγγραφή: 17 Ιουν 2004 01:48
Τοποθεσία: Θεσσαλονίκη, Ελλάδα.

Counting On Line Users

Δημοσίευση από ManosWdd » 15 Δεκ 2005 01:13

Να σημειώσω ένα μικρό τιπογραφικό λάθος που παρατήρησα....

Tο:
CREATE TABLE `usersonline`
Πρέπει να γίνει:
CREATE TABLE `useronline`
Δηλαδή να αφαιρεθεί το "s" αλλιώς δεν υπάρχει περίπτωση να δουλέψει.... Αλλιώς μπορείτε να κάνετε το useronline στο αρχείο .php usersonline απλά τότε θέλει 3 φορές να το αλλάξετε...

Να ρωτήσω και κάτι άλλο. Θέλω ένα scriptaki να μετράει τους συνολικούς unique επισκέπτες. Αλλά να τους τοποθετεί σε βάση δεδομένων και όχι σε text file.

Ευχαριστώ εκ των προτέρων...
Τελευταία επεξεργασία από το μέλος ManosWdd την 19 Δεκ 2005 01:22, έχει επεξεργασθεί 1 φορά συνολικά.
Εικόνα

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Counting On Line Users

Δημοσίευση από Basilakis » 15 Δεκ 2005 10:33

Tha se symbouleva na kaneis neo post gia na to doune perissotera atoma. Kai thanks kai gia thn diorthwsh! 8)

SCORPION
Δημοσιεύσεις: 54
Εγγραφή: 04 Σεπ 2004 01:40
Τοποθεσία: xanthi

Counting On Line Users

Δημοσίευση από SCORPION » 04 Φεβ 2006 20:15

paidia kserete kanena script pou na mas emfanizei ta onomata (username)
ton xristwn pou einai online?

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Counting On Line Users

Δημοσίευση από Rapid-eraser » 04 Φεβ 2006 23:49

SCORPION ti piveis kai dev mas diveis :P
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Counting On Line Users

Δημοσίευση από Basilakis » 11 Φεβ 2006 17:16

...

Gia na to kaneis afto prepei na exei database xrhstwn. Kai einai megalh istoria ean den exeis gnwseis...

Άβαταρ μέλους
skull
Δημοσιεύσεις: 140
Εγγραφή: 02 Μαρ 2005 17:56
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Counting On Line Users

Δημοσίευση από skull » 27 Μαρ 2006 20:48

Υπάρχει άλλος τρόπος χωρις την χρήση της sql?

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Counting On Line Users

Δημοσίευση από ThyClub » 27 Μαρ 2006 20:56

Ναι αλλά θα πρέπει να χρησιμοποιήσεις

filesystem functions και ειδικά τις fopen() και fwrite()

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Counting On Line Users

Δημοσίευση από Basilakis » 01 Απρ 2006 21:44

Μςρε και με ftp://domaiun.com μπορείς και με txt files μπορείς αλλά πως θα μετράς πόσες φορές έχει κατεβεί? Με txt databases?Λίγο μούφα μου κάνει... ;)

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

Counting On Line Users

Δημοσίευση από soteres2002 » 01 Απρ 2006 23:35

boreis na kanes parse me ena aplo scriptaki ta access logs kai na deis posa requests exoune ginei gia ena arxeio toso gia FTP oso kai gia HTTP. auto ginetai poli apla me regular expressions.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Counting On Line Users

Δημοσίευση από cpulse » 24 Απρ 2006 15:29

Sorry αλλά δεν μπορούσα να κρατηθώ...

Το ακόλουθο είναι ένα scriptάκι με χρήση text file το οποίο θεωρεί ως τρέχων χρήστες όσους μπήκαν στην σελίδα (ή σε όλο το site) τα τελευταία 5 λεπτά:

Κώδικας: Επιλογή όλων

$online_file = './online.txt';

function online_check&#40;$page&#41; &#123;
	global $visitors;
	
	if &#40;isset&#40;$visitors&#91;$page&#93;&#91;session_id&#40;&#41;&#93;&#41;&#41; &#123;
		// an to session yparxei tote ananewse tin wra teleutaias prosbasis
		$visitors&#91;$page&#93;&#91;session_id&#40;&#41;&#93;&#91;'time'&#93; = time&#40;&#41;;
	&#125; else &#123;
		// dimiourgise eggrafi teleutaias prosbasis
		$visitors&#91;$page&#93;&#91;session_id&#40;&#41;&#93; = array&#40; 'time' => time&#40;&#41;, 'username' => '' &#41;;
	&#125;

	// ka8arismos apo palies eggrafes
	$old_time = time&#40;&#41; - 60 * 5; // wra prin apo 5 lepta
	foreach &#40;$visitors&#91;$page&#93; as $k => $v&#41; if &#40;$visitors&#91;$page&#93;&#91;$k&#93;&#91;'time'&#93; < $old_time&#41; unset&#40;$visitors&#91;$page&#93;&#91;$k&#93;&#41;;
&#125;

function online_count&#40;$page&#41; &#123;
	global $visitors;
	return count&#40;$visitors&#91;$page&#93;&#41;;
&#125;

function online_users&#40;$page&#41; &#123;
	global $visitors;
	$guests = 0;
	$users = array&#40;&#41;;
	foreach &#40;$visitors as $page => $v1&#41; &#123;
		if &#40;$page != '*'&#41; &#123;
			foreach &#40;$visitors&#91;$page&#93; as $sess => $v2&#41; &#123;
				if &#40;$v2&#91;'username'&#93; == ''&#41; $guests++;
				else if &#40;!in_array&#40;$v2&#91;'username'&#93;, $users&#41;&#41; $users&#91;&#93; = $v2&#91;'username'&#93;;
			&#125;
		&#125;
	&#125;

	if &#40;$guests > 0&#41; $users&#91;&#93; = $guests . ' guests';

	return implode&#40;', ', $users&#41;;
&#125;



session_start&#40;&#41;;

// diabase to arxeio me tous online users
if &#40;file_exists&#40;$online_file&#41;&#41; &#123;
	$fp = fopen&#40;$online_file, 'r'&#41;;
	$visitors = unserialize&#40;fread&#40;$fp, filesize&#40;$online_file&#41;&#41;&#41;;
	fclose&#40;$fp&#41;;
&#125;
else $visitors = array&#40;&#41;;

online_check&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41;; // bres tous online users gia tin parousa selida
online_check&#40;'*'&#41;; // bres tous online users gia olo to site

// swse ta nea stoixeia me tous online users
$fp = fopen&#40;$online_file, 'w'&#41;;
fwrite&#40;$fp, serialize&#40;$visitors&#41;&#41;;
fclose&#40;$fp&#41;;


// elegxos apotelesmatwn
echo '<p>Stin selida ayti yparxoun ' . online_count&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41; . ' xristes&#58; ' . online_users&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41; . '</p>' . "\n";
echo '<p>Se olokliro to site yparxoun ' . online_count&#40;'*'&#41; . ' xristes&#58; ' . online_users&#40;'*'&#41; . '</p>' . "\n";


Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Counting On Line Users

Δημοσίευση από cpulse » 24 Απρ 2006 16:21

Χμ.. και για να είναι ανεξάρτητο από κάτι μυστήριους browsers, spiders κτλ κάντε το να βασίζεται στις IP αντι για τα sessions.

Σβήστε το session_start() και αντικαταστήστε τα session_id() με $_SERVER['REMOTE_ADDR']

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27610
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Counting On Line Users

Δημοσίευση από cordis » 26 Απρ 2006 13:35

ωραίο κι αυτό.. ;)
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Counting On Line Users

Δημοσίευση από cpulse » 26 Απρ 2006 14:19

cordis έγραψε:ωραίο κι αυτό.. ;)
θένκ γιού ... αλλά μόλις βρήκα κι ένα bug στο online_users()..

έτσι είναι το σωστό:

Κώδικας: Επιλογή όλων

function online_users&#40;$page&#41; &#123;
   global $visitors;
   $guests = 0;
   $users = array&#40;&#41;;
   foreach &#40;$visitors&#91;$page&#93; as $sess => $v2&#41; &#123;
      if &#40;$v2&#91;'username'&#93; == ''&#41; $guests++;
      else if &#40;!in_array&#40;$v2&#91;'username'&#93;, $users&#41;&#41; $users&#91;&#93; = $v2&#91;'username'&#93;;
   &#125;

   if &#40;$guests > 0&#41; $users&#91;&#93; = $guests . ' guests';

   return implode&#40;', ', $users&#41;;
&#125;

Άβαταρ μέλους
skull
Δημοσιεύσεις: 140
Εγγραφή: 02 Μαρ 2005 17:56
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Counting On Line Users

Δημοσίευση από skull » 17 Μάιος 2006 22:40

ManosWdd έγραψε:Να σημειώσω ένα μικρό τιπογραφικό λάθος που παρατήρησα....

Tο:
CREATE TABLE `usersonline`
Πρέπει να γίνει:
CREATE TABLE `useronline`
Δηλαδή να αφαιρεθεί το "s" αλλιώς δεν υπάρχει περίπτωση να δουλέψει.... Αλλιώς μπορείτε να κάνετε το useronline στο αρχείο .php usersonline απλά τότε θέλει 3 φορές να το αλλάξετε...

Ευχαριστώ εκ των προτέρων...
Ρε παιδια ελεος μετα απο 6 μήνες κανένας δεν το έχει διορθώσει?
Και εγω πεδευομαι να βρω τι λάθος εχω κάνει...

Απάντηση

Επιστροφή στο “PHP τα δικά μας scripts”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες