Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.012 c
15-1151921987
Megabyte
2006-07-03 14:19
2006.07.30
Фрагментация данных и переиндексация в MSSQL


2-1152523290
Darkwing
2006-07-10 13:21
2006.07.30
Выделяется ли новая область памяти в данном случае?


15-1151344759
Nic
2006-06-26 21:59
2006.07.30
Основные принципы прокладки кабеля Ethernet


15-1151664375
гастрит
2006-06-30 14:46
2006.07.30
глюк


6-1142939066
_Mike_
2006-03-21 14:04
2006.07.30
Наиболее мощный Ping-компонент.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский