-
Здравствуйте! Подскажите, как сделать счетчик посещений для Веб-страницы? В журнале нарыл такой код:
unit Counter;
interface
uses Windows, graphics, jpeg, extctrls, Messages, SysUtils, Classes, HTTPApp;
type TWebModule1 = class(TWebModule) procedure WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); private { Private declarations } public { Public declarations } end;
var WebModule1: TWebModule1;
implementation
{$R *.DFM}
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var bitmap:tbitmap; hits:integer; logfile:textfile; filename:string; jpeg1:tjpegimage; stream:tmemorystream; begin filename:='count.log'; assignfile(logfile,filename); try if fileexists(filename) then begin reset(logfile); readln(logfile,hits); inc(hits); end else begin hits:=1; rewrite(logfile); writeln(logfile,hits); end; finally closefile(logfile);
bitmap:=tbitmap.create; try with bitmap do begin width:=120; height:=25; with canvas.font do begin name:='arial'; size:=14; color:=rgb(255,127,0); style:=[fsbold]; end; canvas.textout(1,1,'Hits:'+formatfloat('###,###,###',int(hits))); end;
jpeg1:=tjpegimage.create; try jpeg1.compressionquality:=50; jpeg1.assign(bitmap); stream:=tmemorystream.Create; jpeg1.savetostream(stream); stream.Position:=0; response.ContentType:='image/jpeg'; response.contentstream:=stream; response.SendResponse; finally jpeg1.free; end; finally bitmap.free; end; end; end;
end.
На странице пишу тег: img src='counter.exe' Скрипт не выполняется ни разу. Подскажите, в чем ошибка?
-
Скрипт выполняется на сервере... У тебя есть настроенный сервер?
-
Сервака нет... А если я размещу его на Narod'е, он будет работать?
-
Не будет
-
А как мне тогда это дело сделать? Позарез надо!
-
Вариантов у тебя не шибко много: 1. Использовать любой другой скрипт, который будет работать на Narod'е. 2. Использовать этот скрипт там, где он будет работать.
-
Первый вариант приемлемей. Нашел на Яндексе такой код:
const counter_path='counter.dat'; // Файл для значений счетчика log_path='counter.log'; // Файл для IP адресов
procedure TWM.WMWebActionItemMainAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var f:TextFile; begin Response.Content:=SetCounter; // Устанавливаем счетчик
// Записываем IP посетителя AssignFile(f,log_path); Append(f); Writeln(f,Request.RemoteAddr); CloseFile(f); end;
function TWM.SetCounter: String; var f:TextFile; count:Integer; begin AssignFile(f,counter_path); Reset(f); // Считываем значение счетчика Readln(f,count); CloseFile(f); //Инкреминируем Inc(count); Rewrite(f); // Записываем writeln(f,count); CloseFile(f); Result:=IntToStr(count); end;
Потом идем в файл counter.dat и смотрим. Но проблема: мне надо, чтоб значение счетчика выводилось на странице.
-
> mrfreeman2007 (21.03.08 06:06) [6]
Ты не понял. Скрипт, использующий твою программулину, не будет работать на Народе хотя бы потому, что хостер в здравом уме не позволит разместить у себя на сервере твой исполняемый файл. Ты же не поклялся хостеру, что твоя программулина не вредоносная)
-
mrfreeman2007 (21.03.08 6:06) [6] чтоб значение счетчика выводилось на странице второй вариант аналогичен первому за исключением рисования счетчика... народ.ру не принимает cgi
-
Народ предоставляет собственный скрипт для ведения счетчика. Нужно зайти в список своих файлов, выбрать файл и нажать "свойства". Откроется окно, где можно выбрать дизайн видимость счетчика и т. д.
-
Если ты кодишь на делфи это у тебя либо ISAPI, либо CGI. Чтобы работало то или то надо хост с поддержкой IIS. Чтобы был хост с поддержкой IIS тебе надо чтобы он был на винде. А поскольку хост на винде огого какой дорогой, не парься и дуй на *nix бесплатный хостинг, а так у них еще и свои движки для сайтов существуют и со счетчиками и т.д.
|