Torna indietro   Serverplan Forum > Risorse per Webmaster > PHP

Rispondi
 
LinkBack Strumenti discussione Modalità visualizzazione
  #1 (permalink)  
Vecchio 31-03-2004, 13.23.35
Member
 
Data registrazione: 16-03-2004
Residenza: Ripe (AN)
Messaggi: 69
scorpio26 is on a distinguished road
Predefinito contatore ingressi: contare chi accede diret. a pag interne

Salve
ho inseriro un contatore di ingressi, scritto in php, sulla prima pagina del sito. Questo contatore per? non si incrementa se un utente, tramite motore di ricerca, accede direttamente ad una pagina interna.

Ho pensato di insreire del codice nascosto anche sulle altre pagine, ma cos? se un visitatore comincia a navigare per le pagine, il contatore viene erroneamente incrementato.

Sto pensando a delle soluzioni possibili per capire se un utente ? entrato per la prima volta nel sito e solo in questo caso incrementare il contatore.

potrei
1) tener traccia dell'indirizzo IP con delle variabili di sessione
2) utilizzare l'id di sessione

A questo punto ho la senzazione che la cosa si faccia complessa :? . Dovrei salvare queste informazioni ad esempio in una tabella mysql, trovando un modo efficace per cancellare i dati degli utenti che non stanno pi? navigando sul sito!

Volevo sapere se qualcuno ha gi? affrontato questo problema e aveva qualche consiglio da darmi.

Grazie a tutti
Silvio
Rispondi citando
  #2 (permalink)  
Vecchio 31-03-2004, 16.06.56
Member
 
Data registrazione: 02-11-2003
Messaggi: 47
karlotto is on a distinguished road
Predefinito

Ciao,
non so se la cosa pu? esserti utile, ma io ho risolto con un semplice script in php di una trentina di righe (compresi i commenti) che crea due file di dati:
- uno con il numero di visite "certificate"
- l'altro con l'ultimo IP che ha visitato la pagina.

Dallo script leggo l'IP del visitatore, lo confronto con l'ultimo memorizzato e, se diverso, lo sostituisco nel file ed incremento il numero visite, altrimenti semplicemente lo ignoro.

Non ? efficacissimo, ma per un basso numero di visite funziona bene.

Naturalmente l'ho inserito in ogni pagina. Eventualmente puoi considerare di tenere registrati gli ultimi 5 o 10 IP e magari aggiungere la data/ora della visita, per evitare che tre o quattro visitatori che girino contemporaneamente tra le pagine ti facciano schizzare il numero di visite alle stelle :lol:

Se hai bisogno di ulteriori info fammi sapere.

-K8
Rispondi citando
  #3 (permalink)  
Vecchio 31-03-2004, 18.02.04
Member
 
Data registrazione: 16-03-2004
Residenza: Ripe (AN)
Messaggi: 69
scorpio26 is on a distinguished road
Predefinito SI mi pu? interessare

Si l'idea mi pu? interessare .

Magari potesti inserire il codice in una risposta cos? se qualche altra persona ha lo stesso problema pu? trarre giovamento da questo forum.

Prover? poi a fare le modifiche che mi suggerisci e se tutto funziona inserir? il codice nel forum

Grazie Silvio
Rispondi citando
  #4 (permalink)  
Vecchio 31-03-2004, 20.24.50
Member
 
Data registrazione: 02-11-2003
Messaggi: 47
karlotto is on a distinguished road
Predefinito

Sostanzialmente il codice ? questo:
Codice:
	//directory dove sono conservati i dati
	define("dirdati", "./dat/"); 

	//nome completo della pagina chiamante
	$pagina = $PHP_SELF;

	//toglie dal nome l'estensione
	$nomefile = dirdati.substr($pagina, 1, strpos($pagina, ".")-1);

	//legge il contatore della pagina
	$file = fopen ($nomefile.".dat", "a+"); 
	$num = fread ($file, filesize($nomefile.".dat"));
	fclose ($file);

	//legge l'ultimo numero IP che ha visitato la pagina
	$file = fopen ($nomefile.".ipn", "a+"); 
	$ip_vecchio = fread ($file, filesize($nomefile.".ipn"));
	$IP = $_SERVER['REMOTE_ADDR'];
	fclose ($file);

	//	se l'ultimo numero IP e' diverso incrementa...
	if (!($ip_vecchio == $IP))
	{
		// cancella il vecchio file visite e lo ricrea
		unlink ($nomefile.".dat");
		$file = fopen ($nomefile.".dat", "a+"); 

		// incrementa il contatore visite e lo scrive
		$num++;
		fwrite ($file, $num);
		fclose ($file);

		// sostituisce l'ultimo IP con quello attuale
		unlink ($nomefile.".ipn");
		$file = fopen ($nomefile.".ipn", "a+"); 
		fwrite ($file, $IP);
		fclose ($file);
	}

	//in ogni caso stampa il numero di visite totali
	echo $num;
(ho aggiunto qualche commento per rendere pi? chiaro il tutto) da richiamare in ogni pagina con qualcosa tipo questo:

Codice:
<?php
	include 'include/counter.php';
?>
il tutto supponendo che:
- lo script php lo chiami 'counter.php'
- lo metti una subdir che si chiami 'include'
- esista un'altra subdir che si chiama 'dat' dove metti i files dati

ovviamente... :lol:

Ti verranno create tanti files (nella dir 'dat') quante sono le pagine dove inserisci il codice, in modo che possa gestirti queste statistiche come meglio credi.

Il codice ? molto semplice, come vedi, e dovrebbe essere autoesplicativo, tuttavia fammi sapere se hai necessit? di qualche chiarimento.

Occhio: a seconda del numero di visitatori le misure dei files potrebbero diventare... preoccupanti.

Buon divertimento :wink:

-K8
Rispondi citando
  #5 (permalink)  
Vecchio 11-04-2004, 16.39.12
Member
 
Data registrazione: 16-03-2004
Residenza: Ripe (AN)
Messaggi: 69
scorpio26 is on a distinguished road
Predefinito Soluzione Adottata

Facendo un po di ricerce sulla rete questa ? la soluzione che ho adottato e che consente anche di sapere quanti utenti sono collegati.

La soluzione utilizza due tabelle in Mysql

Tabella utenti online
Serve per tenere traccia degli utenti che stanno visitando il sito e da quanto tempo. Per fare questo, ogni volta che viene aperta una pagina si registra l'IP dell'utente, se questo non ? gi? presente nel database.
Codice:
CREATE TABLE `online` (
  `session_id` varchar(32) NOT NULL default '',
  `time` int(11) NOT NULL default '0',
  PRIMARY KEY  (`session_id`)
)
Tabella con il contatore
Ad ogni nuova registrazione viene incrementato il contatore registrato in tabella.

Codice:
CREATE TABLE `counter` (
  `counter` int(11) NOT NULL default '0'
)
Per evitare di far crescere troppo la tabella degli utenti online e per consentire allo stesso utene di rivisitare il sito a distanza nel tempo, gli utenti registrati pi? "vecchi" vengono cancellati. L'"et?" di un utente pu? essere impostata per esempio a 3 minuti.

Ho inserito il codice che esegue i controlli sull'utente in un file connessione.php dove viene effettuata anche la connessione al database. il file verr? incluso in tutte le pagine utilizzando

Codice:
<?php require_once('connessione.php'); ?>
File connessione.php

Citazione:
<?php
$hostname_mio_sito = "<localhost>";
$database_mio_sito = "<mio_sito>";
$username_mio_sito = "<mio_sito>";
$password_mio_sito = "<password>";
$mio_sito = mysql_connect($hostname_mio_sito, $username_mio_sito, $password_mio_sito) or die(mysql_error());

// per avere l'ID di sessione occorre far partire la sessione se non ? gi? avviata
if(!session_id()){
session_start();
}

$session_id = session_id(); // id di sessione dell'utente
$the_time = time(); // tempo attuale formato UNIX
$useronline_time_limit = 180; // tempo massimo per utente online in secondi
$online_timeout = $the_time - $useronline_time_limit; // tempo scaduto

mysql_select_db($database_mio_sito, $mio_sito);
// elimina gli utenti vecchi
$query_online = "DELETE FROM online WHERE time < $online_timeout";
$online = mysql_query($query_online, $mio_sito) or die(mysql_error());
// cerca se l'utente ? presente nella tabella
$query_online = "SELECT * FROM online WHERE session_id='$session_id'";
$online = mysql_query($query_online, $mio_sito) or die(mysql_error());

if(mysql_num_rows($online) > 0) {
// utente presente. Aggiorna il tempo attuale
$query_online = "UPDATE online SET time='$the_time' WHERE session_id='$session_id'";
$online = mysql_query($query_online, $mio_sito) or die(mysql_error());
} else {
// utente non registrato. Lo inserisco
$query_online = "INSERT INTO online (session_id, time) VALUES ('$session_id', '$the_time')";
$online = mysql_query($query_online, $mio_sito) or die(mysql_error());
// incremento il contatore
$query_counter = "UPDATE counter SET counter=counter+1";
$counter = mysql_query($query_counter, $mio_sito) or die(mysql_error());
}
?>
All'interno dell'home page il contatore e il numero di utenti online viene rilevato con le istruzioni:

Codice:
<?php
mysql_select_db($database_mio_sito, $mio_sito);
$query_counter = "SELECT counter FROM counter";
$counter = mysql_query($query_counter, $mio_sito) or die(mysql_error());
$row_counter = mysql_fetch_assoc($counter);
mysql_select_db($database_mio_sito, $mio_sito);
$query_online = "SELECT count(*) online FROM online";
$online = mysql_query($query_online, $mio_sito) or die(mysql_error());
$row_online = mysql_fetch_assoc($online);
?>
Il contatore pu? essere visualizzato con nella pagina inserendo
Codice:
<?php $row_counter['counter']); ?>
mentre in numero di utenti on-line si visualizza con
Codice:
<?php echo $row_online['online']; ?>
Contatore grafico
Per utilizzare un contatore grafico ho inserito le immagini delle cifre in una directory "digit" con nome 1.gif, 2.gif,.. . La funzione contatore trasforma il risultato in una sequenza di cifre. Il primo parametro della funzione ? il valore del contatore, mentre il secondo ? la directory con le cifre.

Codice:
<?php contatore($row_counter['counter'],"digit/"); ?>
la funzione ? la seguente


Codice:
<?php
function contatore($counta,$dirimg) {
	$imagetype = ".gif"; 
	$numofdigits = 5; //numero minimo di cifre da visualizzare 
	
	error_reporting(0);  
	
	$digits = array();
	$digitlen = strlen($counta);
	
	// vengono inseriti gli "0" iniziali in base a $numofdigits 
	$zerostofill = $numofdigits - $digitlen;
	if ($zerostofill > 0) {
		$countc = 1;
		while ($countc <= $zerostofill) {
			$countd .= 0;
			$countc++;
		}
		$countc = $countd.$counta;
	} else $countc = $counta;
	
	$countb = 0;
	
	//stampa delle cifre
	
	while ($countb < strlen($countc)){
		$digits[$countb] = substr($countc,$countb,'1');
		$countb++;
	}
	$countb = 0;
	while ($countb < strlen($countc)) {
		echo '[img]'.$dirimg.$digits[$countb].$imagetype.'[/img]';
		$countb++;
	}
}

?>

Buon divertimento !! :lol:
Silvio
Rispondi citando
Rispondi

Strumenti discussione
Modalità visualizzazione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks are Attivato
Pingbacks are Attivato
Refbacks are Attivato


Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
contatore awd Pannello di controllo Cpanel - Linux 2 27-05-2005 17.22.24
aprire un'altra finestra quando un utente accede al sito ancona5 PHP 1 07-04-2005 16.16.14
Contatore visite guru Pannello di controllo Cpanel - Linux 1 28-11-2003 15.00.49
Contatore delle visite cesaripa HTML 2 10-04-2003 13.18.12
CONTATORE,FORUM,SONDAGGI agnese Pannello di controllo Cpanel - Linux 10 08-12-2002 10.42.49


Tutti gli orari sono GMT +1. Adesso sono le 00.00.19.


Powered by vBulletin versione 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.1.0
Traduzione italiana : www.vbulletin.it