![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Дружда 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]Абсолютно точно также, нет никоакой разницы