View Full Version : Contatore
ragazzi un aiuto serio
sto delirando, non riesco a fare un contatore di accessi per un sito in asp e come database un file txt
ne avete di gia pronti?
ti consiglio di guardare su http://freeasp.html.it/
di sicuro trovi qualcosa....
ciao
:sofico: :sofico: :sofico:
Originariamente inviato da mello
ti consiglio di guardare su http://freeasp.html.it/
di sicuro trovi qualcosa....
ciao
:sofico: :sofico: :sofico:
lo so gia visto
giuro non riesco a farne andare uno
me ne serve uno testato gia pronto
maxithron
18-08-2003, 00:52
questo funziona:
http://www.aspcode.it/articoli/articoli.asp?act1=show_art&idx=12
Originariamente inviato da maxithron
questo funziona:
http://www.aspcode.it/articoli/articoli.asp?act1=show_art&idx=12
allora
lavoro con dreamweaver
ho creato il file visite.txt e l'ho messo nella cartella che ho creato "public" sulla root del sito
sempre sulla root ho messo il contatore copiando esattamente il codice
vado alla pagina e mi dice
Microsoft VBScript runtime error '800a0046'
Permission denied
/contatore.asp, line 25
perchè?
L'errore te lo da perchè probabilmente non hai la cartella /public sul tuo server web...
Sinceramente un contatore del genere mi lascia un po' perplesso... E' sintatticamente scorretto...può portare sia a pardita di conteggi, sia ad inconsistenza del contenuto del file...
Vi spiego perchè...
<%
Dim nomefile, filestream
nomefile = Server.MapPath("/public/visite.txt")
Set objFile = CreateObject("Scripting.FileSystemObject")
'se il file non esiste, crealo
if not objFile.FileExists(nomefile) then
Set filestream = objFile.OpenTextFile(nomefile, 2, true)
filestream.WriteLine("0")
end if
'legge il numero attuale di visite
Set filestream = objFile.OpenTextFile(nomefile, 1, true)
Dim visite
visite = filestream.ReadLine()
filestream.Close
'punto UNO
'se non è ancora presente la variabile di sessione
if Session("visiting")<>1 then
Session("visiting") = 1 'crea la variabile di sessione
visite = visite + 1 'incrementa di uno gli accessi al sito
end if
'scrive nel file il valore aggiornato di visite
Set filestream = objFile.CreateTextFile(nomefile, true)
'punto DUE
filestream.WriteLine(visite)
filestream.Close
Set filestream = Nothing
Set objFile = Nothing
'visualizza sul browser il numero totale di visite
Response.Write "Numero visite: " &visite
%>
Tenete conto di due esecuzioni parallele del codice: A e B
Nel file c'è il numero 1000...
A arriva al punto UNO e legge 1000...
B arriva al punto DUE e legge 1000...
A arriva al punto DUE e scrive 1001...
B arriva al punto DUE e scrive 1001...
Ecco che si è perso un conteggio... Il file doveva contenere 1002...
Riguardo all'inconsistenza contenuto del file... Non so come e se viene gestita la mutua esclusione sull'accesso al file...
OpenTextFile attende che un file sia stato chiuso ? Spero di sì altrimenti ci sarebbero molti errori...
Ad esempio A è al punto DUE, B arriva al punto UNO...B non ha letto nessun numero del file...
Senza contare le possibilità di scrittura contemporanea con WriteFile...che porterebbero a risultati inconsistenti (a meno che questa possibilità venga gestita da ASP in modo intelligente)...
Quindi secondo me se si vuole fare un buon contatore, senza ricorrere ad un database, bisogna utilizzare le variabili di applicazione e gli eventi nel global.asa !!!
Una cosa semplice (contenuto del file Global.asa):
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
Dim nomefile, filestream
nomefile = Server.MapPath("/public/visite.txt")
Application("nomefile") = nomefile
Set objFile = CreateObject("Scripting.FileSystemObject")
'se il file non esiste, crealo
if not objFile.FileExists(nomefile) then
Set filestream = objFile.OpenTextFile(nomefile, 2, true)
filestream.WriteLine("0")
end if
'legge il numero attuale di visite
Set filestream = objFile.OpenTextFile(nomefile, 1, true)
Dim visite
visite = filestream.ReadLine()
filestream.Close
Application("Contatore") = visite
Application("UtentiOnline") = 0
Set filestream = Nothing
Set objFile = Nothing
End Sub
Sub Application_OnEnd
Dim nomefile, filestream
nomefile = Application("nomefile")
Set objFile = CreateObject("Scripting.FileSystemObject")
'scrive nel file il valore aggiornato di visite
Set filestream = objFile.CreateTextFile(nomefile, true)
filestream.WriteLine(Application("Contatore"))
filestream.Close
Set filestream = Nothing
Set objFile = Nothing
End Sub
Sub Session_OnStart
Application("Contatore") = Application("Contatore") + 1
Application("UtentiOnline") = Application("UtentiOnline") + 1
End Sub
Sub Session_OnEnd
Application("UtentiOnline") = Application("UtentiOnline") - 1
End Sub
</SCRIPT>
In questo modo hai sia un contatore di visite che di utenti online...
grazie dell'aiuto ma se non ci spieghiamo bene non potrò mai capire
dove lo metto il codice?
in una pagina asp o php?
la pagina dove la metto?
maxithron
18-08-2003, 11:35
quoto dal link:
"Una caratteristica importante di questo contatore, è che esso evita di conteggiare i reload al sito (per intenderci, quegli accessi che vengono conteggiati quando si clicca sul pulsante aggiorna del browser), o gli eventuali ritorni alla home page dopo aver visitato pagine interne al sito: per implementare questa "feature" utilizziamo una variabile di sessione che creiamo nel momento in cui un utente entra nel nostro sito a cui diamo il valore 1; prima di incrementare il contatore verrà verificato che questa variabile abbia un valore diverso da 1 (se non è così significa che l'utente è già passato dalla home page del nostro sito durante quella sessione e che quindi il suo accesso è già stato conteggiato)."
ma è chiaro che è solo un riferimento per chi ha una certa fretta.
cmq..al solito, hai fatto un'ottima analisi!
:p :p :p
lo dico almeno faccio chiarezza
non ho MAI usato asp o php quindi parto proprio da 0
Originariamente inviato da Kinh
lo dico almeno faccio chiarezza
non ho MAI usato asp o php quindi parto proprio da 0
OT: vedo che sei il webmaster del sito dei Lacuna Coil. grandissimo gruppo. :cool:
ciao ;)
Originariamente inviato da VICIUS
OT: vedo che sei il webmaster del sito dei Lacuna Coil. grandissimo gruppo. :cool:
ciao ;)
si che se quando tornano non imparo un po di asp mi sotterrano :D
Quello che ho scritto lo devi mettere in un file chiamato global.asa che va messo all'interno della root del server web...
Per visualizzare il valore del contatore:
<%= Application("Contatore") %>
Per visualizzare il numero di utenti online:
<%= Application("UtentiOnline") %>
Originariamente inviato da cionci
Quello che ho scritto lo devi mettere in un file chiamato global.asa che va messo all'interno della root del server web...
Per visualizzare il valore del contatore:
<%= Application("Contatore") %>
Per visualizzare il numero di utenti online:
<%= Application("UtentiOnline") %>
mmm ok
praticamente faccio un file global.asa e scrivo dentro tutta la pappardella
ma poi?
Poi per visualizzare il contatore scrivi quello che ti ho scritto sopra all'interno del codice HTML di una pagina con estensione .asp...
Ad esempio:
<html>
<head>
<title></title>
</head>
<body>
Contatore: <%= Application("Contatore") %>
Utenti online: <%= Application("UtentiOnline") %>
</body>
</html>
Ricopia il codice da mettere in global.asa...c'era un errorino...
Comunque funziona egregiamente...ho provato...
Originariamente inviato da cionci
Poi per visualizzare il contatore scrivi quello che ti ho scritto sopra all'interno del codice HTML di una pagina con estensione .asp...
Ad esempio:
<html>
<head>
<title></title>
</head>
<body>
Contatore: <%= Application("Contatore") %>
Utenti online: <%= Application("UtentiOnline") %>
</body>
</html>
ok dimmi se ho capito bene passo passo
faccio un file ASP con dentro questo codice
<%
Dim nomefile, filestream
nomefile = Server.MapPath("/public/visite.txt")
Set objFile = CreateObject("Scripting.FileSystemObject")
'se il file non esiste, crealo
if not objFile.FileExists(nomefile) then
Set filestream = objFile.OpenTextFile(nomefile, 2, true)
filestream.WriteLine("0")
end if
'legge il numero attuale di visite
Set filestream = objFile.OpenTextFile(nomefile, 1, true)
Dim visite
visite = filestream.ReadLine()
filestream.Close
'punto UNO
'se non è ancora presente la variabile di sessione
if Session("visiting")<>1 then
Session("visiting") = 1 'crea la variabile di sessione
visite = visite + 1 'incrementa di uno gli accessi al sito
end if
'scrive nel file il valore aggiornato di visite
Set filestream = objFile.CreateTextFile(nomefile, true)
'punto DUE
filestream.WriteLine(visite)
filestream.Close
Set filestream = Nothing
Set objFile = Nothing
'visualizza sul browser il numero totale di visite
Response.Write "Numero visite: " &visite
%>
lo metto sulla root
poi chessò nella mia index metto
Contatore: <%= Application("Contatore") %>
Utenti online: <%= Application("UtentiOnline") %>
e tutto funziona?
Il codice da mettere in global.asa non è quello, ma quello che avevo postato dopo, sempre nello stesso post...
Comunque usa questo che è modificato e previene il fatto che se si pianta il server web si perdano tutti i conteggi...
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
Dim nomefile, filestream
nomefile = Server.MapPath("/visite.txt")
Application("nomefile") = nomefile
Set objFile = CreateObject("Scripting.FileSystemObject")
'se il file non esiste, crealo
if not objFile.FileExists(nomefile) then
Set filestream = objFile.OpenTextFile(nomefile, 2, true)
filestream.WriteLine("0")
end if
'legge il numero attuale di visite
Set filestream = objFile.OpenTextFile(nomefile, 1, true)
Dim visite
visite = filestream.ReadLine()
filestream.Close
Application("Contatore") = visite
Application("UtentiOnline") = 0
Set filestream = Nothing
Set objFile = Nothing
End Sub
Sub Application_OnEnd
Dim nomefile, filestream
nomefile = Application("nomefile")
Set objFile = CreateObject("Scripting.FileSystemObject")
'scrive nel file il valore aggiornato di visite
Set filestream = objFile.CreateTextFile(nomefile, true)
filestream.WriteLine(Application("Contatore"))
filestream.Close
Set filestream = Nothing
Set objFile = Nothing
End Sub
Sub Session_OnStart
Application("Contatore") = Application("Contatore") + 1
Application("UtentiOnline") = Application("UtentiOnline") + 1
End Sub
Sub Session_OnEnd
Application("UtentiOnline") = Application("UtentiOnline") - 1
Dim numeroVisite
numeroVisite = Application("Contatore")
If (numeroVisite Mod 100 = 0) Then
Dim nomefile, filestream
nomefile = Application("nomefile")
Set objFile = CreateObject("Scripting.FileSystemObject")
'scrive nel file il valore aggiornato di visite
Set filestream = objFile.CreateTextFile(nomefile, true)
filestream.WriteLine(Application("Contatore"))
filestream.Close
Set filestream = Nothing
Set objFile = Nothing
End If
End Sub
</SCRIPT>
Originariamente inviato da Kinh
poi chessò nella mia index metto
index.asp mi raccomando... E' sempre codice ASP e va utilizzati in file con estensione .asp !!! ;)
non cè che mi ricapitoli che mi sa che mi sto confondendo?
mi dici cosa fare e dove passo passo
:rolleyes: grassie
Avevi detto tutto bene... L'unica cosa è che avevi sbagliato a copiare il codice da mettere in global.asa...
Metti il codice sopra in global.asa...copi il file nella root...nei tuoi file .asp puoi richiamare i contatori con il emtodo scritto sopra...
ma non capisco
il codice global.asa che hai detto tu è quello che ho scritto
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
Dim nomefile, filestream
nomefile = Server.MapPath("/public/visite.txt")
Application("nomefile") = nomefile
Set objFile = CreateObject("Scripting.FileSystemObject")
'se il file non esiste, crealo
if not objFile.FileExists(nomefile) then
Set filestream = objFile.OpenTextFile(nomefile, 2, true)
filestream.WriteLine("0")
end if
'legge il numero attuale di visite
Set filestream = objFile.OpenTextFile(nomefile, 1, true)
Dim visite
visite = filestream.ReadLine()
filestream.Close
Application("Contatore") = visite
Application("UtentiOnline") = 0
Set filestream = Nothing
Set objFile = Nothing
End Sub
Sub Application_OnEnd
Dim nomefile, filestream
nomefile = Application("nomefile")
Set objFile = CreateObject("Scripting.FileSystemObject")
'scrive nel file il valore aggiornato di visite
Set filestream = objFile.CreateTextFile(nomefile, true)
filestream.WriteLine(Application("Contatore"))
filestream.Close
Set filestream = Nothing
Set objFile = Nothing
End Sub
Sub Session_OnStart
Application("Contatore") = Application("Contatore") + 1
Application("UtentiOnline") = Application("UtentiOnline") + 1
End Sub
Sub Session_OnEnd
Application("UtentiOnline") = Application("UtentiOnline") - 1
End Sub
</SCRIPT>
non è che mi mandi un esempio?rischiamo solo di nn capirci cosi :mc:
E questo è il file di prova...
ma questi 2 file dove vanno messi?
global.asa nella / del sito web... Il file di prova dove ti pare, basta che sia in directory visibile dal sito web...
Originariamente inviato da cionci
global.asa nella / del sito web... Il file di prova dove ti pare, basta che sia in directory visibile dal sito web...
il file di prova deve stare in una cartella con permessi di lettura/scrittura o in una qualsiasi?
Originariamente inviato da cionci
In una qualsiasi...
non funziona
quando apro il file di prova mi viene fuori
Microsoft VBScript runtime error '800a000d'
Type mismatch: '[string: ""]'
//global.asa, line 42
Quale server web usi ? Con quale sistema operativo ?
Cerca queste righe in global.asa:
Sub Session_OnStart
Application("Contatore") = Application("Contatore") + 1
Application("UtentiOnline") = Application("UtentiOnline") + 1
End Sub
Sub Session_OnEnd
Application("UtentiOnline") = Application("UtentiOnline") - 1
...e cambiale con queste:
Sub Session_OnStart
Dim temp
temp = Application("Contatore")
temp = temp + 1
Application("Contatore") = temp
temp = Application("UtentiOnline")
temp = temp + 1
Application("UtentiOnline") = temp
End Sub
Sub Session_OnEnd
Dim temp
temp = Application("UtentiOnline")
temp = temp - 1
Application("UtentiOnline") = temp
Anche se mi sembra strano che debba essere fatta una sostituzione del genere...ma su versioni vecchie di IIS avevo avuto anche di questi problemi...
cambiato ora viene questa cosa
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'temp'
//global.asa, line 44
uso win xp ma le prove non le faccio in locale ma direttamente su aruba
Ah...ok...allora forse siamo ad una soluzione...
Cambia le stesse righe con queste:
Sub Session_OnStart
Dim temp
temp = CInt(Application("Contatore"))
temp = temp + 1
Application("Contatore") = temp
temp = CInt(Application("UtentiOnline"))
temp = temp + 1
Application("UtentiOnline") = temp
End Sub
Sub Session_OnEnd
Dim temp
temp = CInt(Application("UtentiOnline"))
temp = temp - 1
Application("UtentiOnline") = temp
Anche questo mi era già successo in passato...
niente da fate
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'CInt'
//global.asa, line 43
ti riporto anche tutto il codice del global.asa aggiornato ad ora prima che sto sbagliando io
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
Dim nomefile, filestream
nomefile = Server.MapPath("/visite.txt")
Application("nomefile") = nomefile
Set objFile = CreateObject("Scripting.FileSystemObject")
'se il file non esiste, crealo
if not objFile.FileExists(nomefile) then
Set filestream = objFile.OpenTextFile(nomefile, 2, true)
filestream.WriteLine("0")
end if
'legge il numero attuale di visite
Set filestream = objFile.OpenTextFile(nomefile, 1, true)
Dim visite
visite = filestream.ReadLine()
filestream.Close
Application("Contatore") = visite
Application("UtentiOnline") = 0
Set filestream = Nothing
Set objFile = Nothing
End Sub
Sub Application_OnEnd
Dim nomefile, filestream
nomefile = Application("nomefile")
Set objFile = CreateObject("Scripting.FileSystemObject")
'scrive nel file il valore aggiornato di visite
Set filestream = objFile.CreateTextFile(nomefile, true)
filestream.WriteLine(Application("Contatore"))
filestream.Close
Set filestream = Nothing
Set objFile = Nothing
End Sub
Sub Session_OnStart
Dim temp
temp = CInt(Application("Contatore"))
temp = temp + 1
Application("Contatore") = temp
temp = CInt(Application("UtentiOnline"))
temp = temp + 1
Application("UtentiOnline") = temp
End Sub
Sub Session_OnEnd
Dim temp
temp = CInt(Application("UtentiOnline"))
temp = temp - 1
Application("UtentiOnline") = temp
Dim numeroVisite
numeroVisite = Application("Contatore")
If (numeroVisite Mod 100 = 0) Then
Dim nomefile, filestream
nomefile = Application("nomefile")
Set objFile = CreateObject("Scripting.FileSystemObject")
'scrive nel file il valore aggiornato di visite
Set filestream = objFile.CreateTextFile(nomefile, true)
filestream.WriteLine(Application("Contatore"))
filestream.Close
Set filestream = Nothing
Set objFile = Nothing
End If
End Sub
</SCRIPT>
Mi dispiace, ma non riesco a capire quale sia il problema a me funziona benissimo...
te la spero che non me ne intendo
può essere che non ci siano i permessi di lettura scrittura nel sito?
Non credo visto che da un errore di interpretazione (come se il codice scritto sia errato), non di esecuzione...
boh mi pare di avere fatto tutto giusto non so che fare :(
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.