<% ' ********************************************************************************** ' SCRIPT CONTATORE E LOG DEI DOWNLOAD DI UN FILE ' il log avviene su file di testo che vengono creati automaticamente in base al nome ' del file da tracciare. ' ' UTILIZZO ' Scarica il file ' ' PARAMETRI ' QueryString ' f: nome del file da scaricare ' ' All'interno del codice ' CartellaDownload: cartella che contiene i file da tracciare e dove verranno scritti ' i file di log. ' ' Autore: Alexandar Fusè - alex.fuse@gmail.com ' Sito web: www.afcs.it ' Data: 30 Maggio 2008 ' Lo script è utilizzabile per qualsiasi scopo anche commerciale ' ********************************************************************************** Sub IncrementaContatore(CartellaDownload, NomeFile) Dim objFSO, objTextFile Dim sRead, sReadLine, sReadAll Dim NomeFileContatore Dim ip, user_agent,referer ' calcolo i nomi dei file NomeFileContatore = CartellaDownload & "Contatore." & NomeFile & ".txt" NomeFileLog = CartellaDownload & "Log." & NomeFile & ".txt" NomeFileContatore = Server.MapPath(NomeFileContatore) NomeFileLog = Server.MapPath(NomeFileLog) Set objFSO = CreateObject("Scripting.FileSystemObject") ' LETTURA DEL CONTATORE if objFSO.FileExists(NomeFileContatore) then Set objTextFile = objFSO.OpenTextFile(NomeFileContatore,1) if not objTextFile.AtEndOfStream then Num=objTextFile.ReadAll end if Num=Trim(num) if isNumeric(Num) then Num = cint(Num) + 1 else Num = 1 end if objTextFile.Close set objTextFile = nothing else Num = 1 end if ' SCRITTURA DEL CONTATORE Set objTextFile = objFSO.OpenTextFile(NomeFileContatore, 2, true) objTextFile.Write(Num) objTextFile.Close set objTextFile = nothing ' SCRITTURA DEL LOG Set objTextFile = objFSO.OpenTextFile(NomeFileLog, 8, true) ip = Request.ServerVariables("REMOTE_ADDR") user_agent = Request.ServerVariables("HTTP_USER_AGENT") referer = Request.ServerVariables("HTTP_REFERER") objTextFile.WriteLine(now & ";" & ip & ";" & user_agent & ";" & referer) objTextFile.Close set objTextFile = nothing Set objFSO = nothing End Sub Const adTypeBinary = 1 Dim objStream Dim strFilePath Dim CartellaDownload, FileNameSorgente, FileNameSorgente_FullPath Dim affFName CartellaDownload = "contatore/" Response.Buffer=true Set objStream = Server.CreateObject("ADODB.Stream") objStream.Open objStream.Type = adTypeBinary FileNameSorgente = request("f") FileNameSorgente = replace(FileNameSorgente,"\","_") FileNameSorgente = replace(FileNameSorgente,"/","_") affFName = split(FileNameSorgente,".") ext = lcase(affFName(ubound(affFName))) FileNameSorgente_FullPath = CartellaDownload & FileNameSorgente FileNameSorgente_FullPath = Server.MapPath(FileNameSorgente_FullPath) objStream.LoadFromFile FileNameSorgente_FullPath IncrementaContatore CartellaDownload, FileNameSorgente 'Aggiunge un header per far scaricare il file if ext="jpg" or ext="gif" or ext="png" then ' le immagini vengono visualizzate inline dentro al browser Response.AddHeader "Content-Disposition", "inline;filename=" & FileNameSorgente Response.ContentType = "image/" & lcase(ext) else Response.AddHeader "Content-Disposition", "attachment;filename=" & FileNameSorgente 'Imposta il content su octet-stream, forzando l'apertura fuori dal browser Response.ContentType = "application/octet-stream" end if 'Manda il contenuto con BinaryWrite Response.BinaryWrite objStream.Read %>