Bob Swart - Интернет решения от доктора Боба
- Название:Интернет решения от доктора Боба
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Bob Swart - Интернет решения от доктора Боба краткое содержание
Интернет решения от доктора Боба - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Поскольку не каждый использует Client/Server версию Delphi 3, мы используем только "голые кости" (bare bones) технологию, такую как мой модуль DrBobCGI или Microsoft WinInet DLL и модули импорта доступные бесплатно.
3.4.1. Счетчик
Счетчик посещений это первое, в чем нуждается популярный web сайт. Меня всегда интересует количество людей посетивших мой сайт. Я всегда заинтересован знать количество людей каждый день. И я всегда заинтересован знать, как выходные и праздники влияют на посещения.
Для отслеживания количества посетителей я просто создан однострочный файл, назвав его "counter", который содержит количество посещений. Единственная вещь, которая нам требуется, это простая CGI программа, которая читает этот файл, увеличивает на единичку и записывает обратно. Конечно, прекрасно при этом показывать посетителю эту информацию или в виде картинки или в виде простого текстового сообщения.
{$APPTYPE CONSOLE}
{$I-}
var
f: Text;
i: Integer;
begin
System.Assign(f,'counter');
reset(f);
ifIOResult = 0 thenreadln(f,i)
elsei := 0;
Inc(i);
rewrite(f);
writeln(f,i);
close(f);
ifIOResult <> 0 then{ skip };
writeln('Content-type: text/html');
writeln;
writeln('');
writeln('
');
writeln('
');
writeln('You are user ',i,' of Dr.Bob''s Delphi Clinic');
writeln('
');
writeln('
');
writeln('
')
end.
Вышеприведенная программа показывает текущее значение в виде текстового сообщения, которое выводится в отдельном фрейме:
Это очень простое CGI приложение. Оно даже не получает ввода, просто преобразовывает удаленный файл на web сервере и возвращает динамическую страницу. Позвольте теперь сделать фокус на более сложном CGI приложении – таком которое требует ввода данных – например гостевой книге.
3.4.2. Гостевая книга
Подлинный CGI пример: приложение – гостевая книга (в котором спрашиваем имя и небольшой комментарий), всего лишь несколько строк на Дельфи.
Сначала CGI форма:
Dr.Bob's Guestbook
Name:
Comments:
Теперь консольное (Дельфи) приложение:
programCGI;
{$I-}
{$APPTYPE CONSOLE}
uses
DrBobCGI;
var
guest: Text;
Str: String;
begin
Assign(guest,'guest'); // assuming that's the guestbook
Append(guest);
ifIOResult <> 0 then// open new guestbook
begin
Rewrite(guest);
writeln(guest,'
writeln(guest,'
end;
writeln(guest,'Date: ',DateTimeToStr(Now),'
writeln(guest,'Name: ',Value('name'),'
writeln(guest,'Comments: ',Value('comments'),'
reset(guest);
writeln('Content-type: text/html');
writeln;
while noteof(guest) do// now output guestbook itself
begin
readln(guest,Str);
writeln(Str)
end;
close(guest);
writeln('
writeln('
end.
Примечание, для того, что бы упростить, мы не используем базу данных для хранения комментариев. Иначе это потребовало установки BDE на web сервере.
3.4.3. Детектор мертвых ссылок
Любой серьезный web сайт и его web мастер должны всегда следить за актуальность ссылок. И если обнаружится мертвая ссылка (например другой web сайт прекратил существование), но нет никаких оправданий для внутренних мертвых ссылок. И поэтому я написал простую программу, назвав ее HTMLINKS, которая может сканировать .HTM файлы на их присутствие на локальной машине. (что бы потом загрузить их на сервер). HTM файлы из текущего каталога и всех подкаталогов рекурсивно читаются и проверяются на тег "
Заметим, что программа игнорирует все "file://", "ftp://", "mailto:", "news:" and ".exe?" значения если они встретятся внутри "HREF" части. Конечно, вы свободны в расширить HTMLINKS для проверки и этих случаев, можно также реализовать проверку и внешних ссылок. Для информации я написал и детектор внешних мертвых ссылок в статье для The Delphi Magazine, подробности можно найти на моем web сайте. Для анализа мертвых локальных ссылок код следующий:
{$APPTYPE CONSOLE}
{$I-,H+}
uses
SysUtils;
var
Path: String;
procedureCheckHTML( constPath: String);
var
SRec: TSearchRec;
Str: String;
f: Text;
begin
ifFindFirst('*.htm', faArchive, SRec) = 0 then
repeat
Assign(f,SRec. Name);
Reset(f);
ifIOResult = 0 then{ no error }
while noteof(f) do
begin
readln(f,Str);
while(Pos('do
begin
ifPos('
else
Delete(Str,1,Pos('FRAME SRC="',Str)+10);
if(Pos('#',Str) <> 1) and
(Pos('http://',Str) <> 1) and
(Pos('mailto:',Str) <> 1) and
(Pos('news:',Str) <> 1) and
(Pos('ftp://',Str) <> 1) and
(Pos('.exe?',Str) = 0) then{ skip external links & exe }
begin
ifPos('file:///',Str) = 1 thenDelete(Str,1,8);
if(Pos('#',Str) 0) and
(Pos('#',Str) < Pos('"',Str)) thenStr[Pos('#',Str)] := '"';
if notFileExists(Copy(Str,1,Pos('"',Str)-1)) then
writeln(Path,'\',SRec.Name,': [',Copy(Str,1,Pos('"',Str)-1),']')
end
end
end;
Close(f);
ifIOResult <> 0 then{ skip }
untilFindNext(SRec) <> 0;
FindClose(SRec);
// check sub-directories recursively
ifFindFirst('*.*', faDirectory, SRec) = 0 then
repeat
if((SRec.Attr ANDfaDirectory) = faDirectory) and
(SRec. Name[1] <> '.') then
begin
ChDir(SRec. Name);
CheckHTML(Path+'\'+SRec. Name);
ChDir('..')
end
untilFindNext(SRec) <> 0;
FindClose(SRec)
end{CheckHTML};
begin
writeln('HTMLinks 4.0 (c) 1997-2000 by Bob Swart (aka Dr.Bob - www.drbob42.com)');
writeln;
FileMode := $40;
GetDir(0,Path);
CheckHTML(Path)
end.
3.4.4. FTP Upload/Download
Иногда вам просто нужно загружать файлы из Интернета. В терминах Интернета, это означает, что вам нужно использовать FTP клиента. И если вы не желаете, подобно мне использовать настоящего FTP клиента, то просто напишите, как и я своего собственного клиента…
Читать дальшеИнтервал:
Закладка: