Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.14;
Скачать: CL | DM;

Вниз

Дружда cgi и делфи   Найти похожие ветки 

 
_MAD_ ©   (2003-02-15 23:19) [0]

как писать cgi приложения на делфи и как можно использовать в них процедуры циклы и все то что можно использовать в простых приложениях.


 
Anatoly Podgoretsky ©   (2003-02-15 23:31) [1]

Абсолютно точно также, нет никоакой разницы


 
panov ©   (2003-02-15 23:36) [2]

Пиши консольное приложение... Это и будет CGI.
А в нем можешь писать все, что хочешь...


 
_MAD_ ©   (2003-02-17 18:35) [3]

в том то и дело я пишу в консоле все работает а вот когда запускаю с сервера не работает:
вот код может что не так?
program Counter;
{$APPTYPE CONSOLE}
uses
SysUtils;

var
F: TextFile;
S: string;
i:integer;
begin
{$I-}
AssignFile(F, "counter.log");
Reset(F);
Readln(F, S);
CloseFile(F);
erase(F);
{$I+}
i:=strtoint(S);
inc(i);
S:=inttostr(i);
writeln("<h1>"+s+"</h1>");
{$I-}
AssignFile(F, "counter.log");
rewrite(F);
writeln(F,S);
CloseFile(F);
{$I+}
end.


 
panov ©   (2003-02-17 18:42) [4]

Вот пример:
Здесь используются функции, которые описаны в другом модуле, не обращай внимания на них.

program getpasswd;
{$APPTYPE CONSOLE}
{$E cgi}

uses
classes,
shellapi,
sysutils,
messages,
windows,
proc in "..\proc\proc.pas";
const
CR = CHR(13)+CHR(10);
HEADER = "Content-type: text/html"+CR+CR+
"<html><head><title>Dymamic HTML page</title>"+
"</head><body bgcolor="#ffffff">"+CR+
" <hr>"+
"<center><font color=#0000ff>Филиал "Екатеринбургский" ОАО "Импэксбанк"</font> </center>"+
"<hr>";
FOOTER = "</body></html>";
var
str,aUser,aPasswd: String;
StdIn,Size,Actual: Cardinal;
F: TextFile;
rand: Integer;
FileName: String;
isTrue: Boolean;
s: String;
i: Integer;
begin
isTrue := False;
Randomize;
StdIn := GetStdHandle(STD_INPUT_HANDLE);
Size := SetFilePointer(StdIn,0,nil,FILE_END);
SetFilePointer(StdIn,0,nil,FILE_BEGIN);
SetLength(str,Size);

if Size>0 then
begin
ReadFile(StdIn,Str[1],Size,Actual,nil);
end;

aPasswd := ParamByName(Str,"passwd");
aUser := ParamByName(Str,"username");

Rand := Random(99999999);

FileName := "data\qout\"+ IntToStr(rand);
AssignFile(F,FileName);
ReWrite(F);
WriteLn(F,"name=getpasswd.cgi");
WriteLn(F,"username="+aUser);
WriteLn(F,"Password="+aPasswd);
WriteLn(F,"sid="+IntToStr(rand));

CloseFile(F);

FileName := "data\qin\"+ IntToStr(rand);

while not FileExists(FileName) do
begin
for i := 0 to 100 do
begin
if FileExists(FileName) then Break;
Sleep(100);
end;
Break;
end;


if FileExists(FileName) then
begin
WaitFile(F,FileName);
AssignFile(F,FileName);
Reset(F);
ReadLn(F,s);
CloseFile(F);
DeleteFile(PChar(FileName));
end
else
begin
WriteLn(HEADER);

WriteLn("<center><h1>Извините,<br></h1>");
WriteLn("<center><h1>сервер авторизации недоступен!<br>Зайдите в другое время</h1>");
WriteLn(FOOTER);

FileName := "data\qout\"+ IntToStr(rand);
DeleteFile(PChar(FileName));
Exit;
end;

if s="True" then isTrue := True;

WriteLn(HEADER);

if not isTrue
then
begin
WriteLn("<h1>Пароль введен неверно!</h1>");
WriteLn(FOOTER);
Exit;
end;

WriteLn("<form method="post" action="/cgi-bin/menumain.cgi">");
WriteLn("<SELECT NAME=groupwork>");
WriteLn("<OPTION>Работа с загруженными файлами");
WriteLn("<OPTION>SYMBOLS");
WriteLn("<OPTION>Администрирование");
WriteLn("</SELECT>");
WriteLn("<input type="hidden" name="sid" value=""+
IntToStr(rand)+"">");
WriteLn("<input type="submit" value="Ok">");
WriteLn("</FORM>");
WriteLn(FOOTER);
end.


 
_MAD_ ©   (2003-02-17 21:55) [5]

panov
я не понял что именно ты имеешь ввиду
как я понял ты предлагаешь мне описать функцию в отдельном модуле а потом вызывать ее из программы?


 
panov ©   (2003-02-17 22:00) [6]

да можешь в этом же модуле описывать свои функции, разницы-то нет никакой...


 
_MAD_ ©   (2003-02-17 22:12) [7]

а что делать с ошибкой сервера?


 
panov ©   (2003-02-17 22:25) [8]

CGI должно возвращать HTML-страничку

WriteLn(HEADER);

...

WriteLn(FOOTER);



 
_MAD_ ©   (2003-02-18 19:38) [9]

понятно так выходет что хеадер это начало сгй скрипта а футер конец?


 
_MAD_ ©   (2003-02-18 23:02) [10]

да кстати делфа не хочет компайлить WriteLn(HEADER);
WriteLn(FOOTER); говорит что header должен быть определен как переменная


 
_MAD_ ©   (2003-02-20 14:45) [11]

помогите пожалуйста мне это очень важно


 
Карелин Артем ©   (2003-02-20 15:00) [12]

Права на запись в каталог установлены?


 
DVM ©   (2003-02-20 19:06) [13]

1. Сервер правильно настроен? В конфиге сервера правильно описано, что сервер должен делать при обращении к *.exe файлу?

2. Права доступа. По умолчанию программа на сервере запускается от имени непривелигированного пользователя, который вообще писать на диск нисего не может. Проверь права. Можно на вин98 сервер проинсталлить и попробовать, там прав никаких не проверяется.


 
_MAD_ ©   (2003-02-21 14:37) [14]

да я просто апачу с интерпретаторами поставил на win98 но не работает а что за конфиг и обращения с *.exe файлами?


 
NikolaB   (2003-02-21 18:31) [15]

U menia Abuss Web server, no problema odinakava: i na console i na PageProducer i WebModule. Eto moia pervaia popitka i ochen ne legko naiti stho ne postroeno (config) u servere (u Delphi dumai vse sdelal.


 
NikolaB   (2003-02-21 23:45) [16]

Pochemu li moi Web server vidaet oshibka

>>> HTTP 500 - Internal server error
>>> Internet Explorer

na konsolnoe prilojenie:


program CgiDate;

{$APPTYPE CONSOLE}

uses
SysUtils,
UtilsFiles in "..\..\..\..\..\..\..\@Utils\@My\UtilsFiles.pas",
UtilsStr in "..\..\..\..\..\..\..\@Utils\@My\UtilsStr.pas";

begin
writeln ("<HTML><HEAD>");
writeln ("<TITLE>Time at this site</TITLE>");
writeln ("</HEAD><BODY>");
writeln ("<H1>Time at this site</H1>");
write ("</BODY></HTML>");
end.



Страницы: 1 вся ветка

Текущий архив: 2003.04.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
14-44337
sid
2003-03-30 23:40
2003.04.14
А здесь здорово: Написал 2 часа назад 2 вопроса и уже ответили


7-44482
dkDimon
2003-02-20 23:03
2003.04.14
Список процессов


14-44372
sniknik
2003-03-25 22:55
2003.04.14
Куда подевалось


3-43987
RDA
2003-03-24 11:36
2003.04.14
Проблемы с MS Jet и ADO


6-44308
Dr.Karter
2003-02-19 10:58
2003.04.14
По узнаванию IPAddress ов