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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.059 c
2-1152370557
AlexanderMS
2006-07-08 18:55
2006.07.30
Проблема с ActionToolBar: кнопка выглядит нажатой.


4-1145022752
Евгений П.
2006-04-14 17:52
2006.07.30
Проблема с флэш-картой.


2-1152292746
fast2
2006-07-07 21:19
2006.07.30
Можна ли отсортировать StringGrid по какому-то полю?


1-1150780080
denmin
2006-06-20 09:08
2006.07.30
Не могу округлить значение поля в EXCEL.


9-1132457940
gfhgfh
2005-11-20 06:39
2006.07.30
Tokomak