Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Дружда cgi и делфи [D5, Win95/98]


_MAD_ ©   (2003-02-15 23:19:00) 

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


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

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.


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

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.


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

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


DVM   (2003-02-20 19:06:00) [4]

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

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


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

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


_MAD_   (2003-02-20 14:45:00) [6]

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


_MAD_   (2003-02-18 23:02:00) [7]

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


_MAD_   (2003-02-18 19:38:00) [8]

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


panov   (2003-02-17 22:25:00) [9]

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

WriteLn(HEADER);

...

WriteLn(FOOTER);


_MAD_   (2003-02-17 22:12:00) [10]

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


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

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


_MAD_   (2003-02-17 21:55:00) [12]

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


panov   (2003-02-17 18:42:00) [13]

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

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 18:35:00) [14]

в том то и дело я пишу в консоле все работает а вот когда запускаю с сервера не работает:
вот код может что не так?
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-15 23:36:00) [15]

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


Anatoly Podgoretsky   (2003-02-15 23:31:00) [16]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо