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: