Форум: "Прочее";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
Вниз
CGI Найти похожие ветки
← →
Parus © (2006-06-15 20:48) [0]Объяслите мне ламеру, занялся писать свой CGI и столкнулся с обращением к файлам. вот часть кода приложения:
program preved;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit1 in "Unit1.pas";
var a:text;
begin
WriteLn("Content-Type: text/html");
WriteLn;
WriteLn("<html>");
WriteLn("<head>");
WriteLn("<title>CGI скрипт</title>");
WriteLn("</head>");
WriteLn("<body>");
WriteLn;
Writeln(parambyname("US")+"ПРЕВЕД!");
WriteLn("</body>");
WriteLn("</html>");
assign(a,"C:\inetpub\uspas\users.txt");
append(a);
writeln(a,parambyname("US")+"ПРЕВЕД!");
close(a);
end.
Unit1.pas там код доступа к тому что переданно методом POST (код рабочий, но по желанию могу выложить).
Так вот "подводный камень" при доступе к файлу происходит ошибка (однако если скопирр-р-р-ровать код доступа к ф-ф-ф-файлу в другой не CGI, то работает). А если код доступа к файлу убрать... то работает!
← →
tesseract © (2006-06-15 22:00) [1]Про то что это может быть обеспесение безопастности подумал?
да и код доступа случайно не 0х111 ?
← →
palva © (2006-06-15 22:07) [2]Ваш вэб-сервер работает под определенным аккаунтом. Если это IIS, то обычно это имя пользователя IUSR_<ComputerName>. Если это что-то другое, то зайдите в процессы и посмотрите под каким аккаунтом выполняется CGI.
Теперь вам надо зайти в свойства папки uspas и на вкладке Безопасность установить возможность для данного пользователя писать файлы в этой папке.
← →
Parus © (2006-06-15 22:28) [3]Ошибка:Исключение неизвестное программное исключение (0x0eedfade) в приложении по адресу 0x7c81eb33
> Ваш вэб-сервер работает под определенным аккаунтом
незнаю..
> Если это IIS
так точно!
← →
Parus © (2006-06-20 19:15) [4]А я не Web servise application! а через консоль.
← →
Ketmar © (2006-06-20 21:01) [5]>Parus © (20.06.06 19:15) [4]
давить. катком. за незнание матчасти.
← →
Parus © (2006-06-26 12:33) [6]
> Ketmar © (20.06.06 21:01) [5]
Поясни плиз.
> через консоль.
это Console application!
← →
Palladin © (2006-06-26 12:35) [7]
> Parus © (26.06.06 12:33) [6]
ну а parambyname чего берет и откуда в таком случае?
← →
Ketmar © (2006-06-26 14:42) [8]>Parus © (26.06.06 12:33) [6]
а что тут пояснять? каток -- он и в Европе каток. давить -- за незнание того, как организована безопасность в винде. и за уверенное вещание ерунды вместо слушания.
← →
Гарри Поттер © (2006-06-26 14:51) [9]Parus © (15.06.06 20:48)
Согласно последним веяньям - ошибка здесь:+"ПРЕВЕД!"
← →
Palladin © (2006-06-26 14:58) [10]судя по [4], он, вообще, в консоли его, чтоли, пытается запустить, но POST передается через stdin, stdin"е данных нет, в таком случае... а в parambyname неизвестно чего понаписано...
← →
Parus © (2006-06-26 19:06) [11]
> parambyname
Выкладываю код юнита:unit Unit1;
interface
uses SysUtils, Windows;
function ParamByName(Name: string): string;
implementation
var InParams: string;
// Читаем переданные параметры из переменной окружения
procedure InitParams; var STR: string;
StdIn, Size, Actual: cardinal; // если компилируется на Delphi 2 или 3
// то тип должен быть integer
begin
StdIn := GetStdHandle(STD_INPUT_HANDLE);
Size := SetFilePointer(StdIn, 0, nil, FILE_END);
SetFilePointer(StdIn, 0, nil, FILE_BEGIN);
SetLength(STR,Size+1);
if (Size <= 0) then Exit;
ReadFile(StdIn, STR[1], Size, Actual, nil);
STR[Size+1] := #0;
InParams:=PChar(@STR[1])
end;
// Функция переводит шестнадчитиричный символ в число
function HexToInt(CH: char): integer;
begin
Result:=0;
case CH of
"0".."9": Result:=Ord(CH)-Ord("0");
"A".."F": Result:=Ord(CH)-Ord("A")+10;
"a".."f": Result:=Ord(CH)-Ord("a")+10;
end;
end;
// Преобразует символы, записанные в виде %2B к правильному виду
function Decode(Value: string): string;
var I, L: integer;
begin
Result:="";
L:=0;
for I:=1 to Length(Value) do begin
if(Value[I]<>"%") and (Value[I]<>"+") and (L<1) then begin
Result:=Result+Value[I];
end else begin
if(Value[I]="+") then
Result:=Result+" "
else if(Value[I]="%") then begin
L:=2;
if(I<Length(Value)-1) then begin
Result:=Result+Chr(HexToInt(Value[I+1])*16+HexToInt(Value[I+2]));
end;
end else
Dec(L);
end;
end;
end;
// Возвращает значение параметра, заданного в Name
function ParamByName(Name: string): string;
var SS, ST: string;
K: integer;
begin
initparams;
Result:="";
SS:=InParams;
while Length(SS)<>0 do begin
K:=Pos("&",SS);
if(K<>0) then begin
ST:=Copy(SS,1,K-1);
SS:=Copy(SS,K+1,10000);
end else begin
ST:=SS;
SS:="";
end;
K:=Pos("=",ST);
if(K<>0) then begin
if(Name=Copy(ST,1,K-1)) then begin
Result:=Decode(Copy(ST,K+1,6000));
end;
end;
end;
end;
end.
← →
Parus © (2006-06-29 07:33) [12]Ну? код-то правильный!
← →
Карелин Артем © (2006-06-29 08:14) [13]Путь относительный прописывай к файлу.
← →
Parus © (2006-06-29 14:41) [14]
> Путь относительный прописывай к файлу.
Пробовал файл был в той же дир. что и CGI
← →
Карелин Артем © (2006-06-29 15:12) [15]
> Parus © (29.06.06 14:41) [14]
Смотри права доступа внимательнее
← →
Parus © (2006-07-03 16:46) [16]
> Смотри права доступа внимательнее
ПОСТАВЬ СЕБЕ ИИС И Поковырай плиз, у меня мозгов нету.
← →
Ketmar © (2006-07-03 17:18) [17]>Parus © (03.07.06 16:46) [16]
в конце таких предложений обязательно указывается сумма. да-да, та самая сумма, которую готовы отдать за работу.
← →
Parus © (2006-07-03 17:58) [18]
> в конце таких предложений обязательно указывается сумма.
> да-да, та самая сумма, которую готовы отдать за работу.
>
ПОСТАВЬ СЕБЕ ИИС И Поковырай плиз, у меня мозгов нету.(заплачу $-10000)
← →
Ketmar © (2006-07-03 18:39) [19]господа модераторы, тут был мат. вырезан самоцензурой...
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.02 c