[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: CGI и Perl скрипты на apache2 плохо взаимодействуют - нет доступа к файловой системе из perl скрипта.



Shon -> debian-russian@lists.debian.org  @ Tue, 06 May 2008 21:03:15 +1100:

 S> Здравствуйте. ;-)
 S> Я работаю с сервером apache2 на Debian Linux. Не разу не пробовал
 S> создавать perl скрипты для взаимодействия с html страницами. Вот решил
 S> попробовать. Нашел ссылку в инете "Введение в Perl"

Судя по нижеизложенному ("запускаю Firefox с правами root") начать надо
с введения в CGI.  Чтоб хоть понимать, кто выполняет запрос.

 S> и создал html страничку с формой, и testform.pl скрипт (который
 S> поместил в папку /usr/lib/cgi-bin/ . В папке
 S> /var/www/apache2-default/ создал файл index.html с таким
 S> содержанием:

 S> <html> <head> <title>Test Form</title> </head> <body> <form
 S> action="http://localhost/cgi-bin/testform.pl"; method=post> <b>Введите
 S> Ваше имя: </b> <input name="user_name" value="" size=20> <input
 S> type="submit" value="Зарегистрировать"> </form> </body> </html>

Подстрока "http://localhost"; лишняя.  В перспективе - вредная.

 S> Это форма, которая будет передавать введенное имя пользователя через
 S> метод POST.

 S> Скрипт perl стандартный, простой. Вот его содержимое:

 S> #!/usr/bin/perl
 S> # Read and parse input from the web form
 S> read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
 S> @pairs = split(/&/, $buffer);
 S> foreach $pair (@pairs) {
 S> ($name, $value) = split(/=/, $pair);
 S> $value =~ tr/+/ /;
 S> $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 S> $value =~ s/<!--(.|\n)*-->//g;
 S> $input{$name} = $value;
 S> }

 S> # Save the user output in a file
 S> $targetfile = "/var/www/apache2-default/names.html";

 S> open (NAMEFILE, ">>$targetfile");
 S> print NAMEFILE "<h3>Имя: ",$input{'user_name'},"</h3>\n";
 S> print NAMEFILE "<p><hr><p>\n";
 S> close (NAMEFILE);

 S> # Send a message back to the user
 S> print "Content-Type: text/html\n\n";
 S> print "<h3>Спасибо, что заполнили форму</h3>\nНажмите ";
 S> print '<a href="http://localhost/apache2-default/names.html";>сюда</a>';
 S> print ", чтобы увидеть Ваш ввод.\n";

И тут аналогично.  И до кучи - выбери что-нибудь одно.  Либо кириллица и
честный charset, либо тебе лень писать charset, и тогда отсутствие
кириллицы.

 S> Запускаю сервер, появляется страничка с формой, ввожу имя, и  в папке
 S> /var/www/apache2-default/ должен создаваться файл names.html.

 S> Но файл НЕ СОЗДАЕТСЯ (даже если запускаю Firefox с правами root). Хотя в
 S> браузере появляется результат работы этого testform.pl скрипта (то есть
 S> появляется интернет страничка с  сылкой на файл
 S> http://localhost/apache2-default/names.html.
 S> При попытке запуска этого perl скрипта в консоли (НЕ через браузер)
 S> testform.pl скрипт нормально создает файл names.html. :-(

 S> Я думаю что у моего сервера apache2 не хватает прав на создание файлов
 S> (нет доступа на чтение и запись файлов). :-(

Совершенно правильно думаешь.  Непонятно только, к чему печальный
смайлик.

 S> Но как мне сделать так, чтобы html документы и perl скрипты
 S> нормально взамиодействовали со всеми максимальными правами
 S> (чтени-запись файлов, доступ к директориям и т.д.)  . :-( Подскажите
 S> пожалуйста.

Можно запускать апач от рута.  Тогда права будут максимальны.  Но
последствия - за свой счет.  На самом деле, разумеется, _максимальные_
права не нужны.  Нужны минимально необходимые.  И начать,
соответственно, надо с того, чтобы определиться, каковы они.  В данном
случае, например, достаточно разрешить пользователю, от чьего имени
работает apache, писать в /var/www/apache2-default/ (для чего отдать ему
эту директорию).  Но это тоже избыточно, в смысле "чревато боком".
Правильно будет отдать права на поддиректорию.

-- 
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru

Как в notepad тексты редактировать? Руками каждую букву набирать, что ли?
	(c)vitus


Reply to: