Perl скрипт не выполняется в форме HTML - PullRequest
3 голосов
/ 29 декабря 2011

У меня есть файл guestbook.htm в каталоге с именем Chrome (/home/chankey/Desktop/Chrome/guestbook.htm), содержание которого приведено ниже

<html>
<head>
<title>Guestbook</title>
</head>
<body>

<form action="/home/chankey/Desktop/Chrome/guestbook.pl" method="get">
<table>
<tr><td>Name</td><td><input name="name" type="text" value=""></td></tr>
<tr><td>E-Mail</td><td><input name="email" type="text" value=""></td></tr>
<tr><td>Location</td><td><input name="loc" type="text" value=""></td></tr>
<tr><td>Comments</td><td>
<TEXTAREA name="comments" rows="10" cols="32"></TEXTAREA></td></tr>
</table><br><br>
<input type="submit" value="Add Entry">
</form>

</body>
</html>

В том же каталоге Chrome у меня есть один файл "guestbook.pl", содержание которого

#!/usr/bin/perl

my $query_string = "";
#Get the input
if ($ENV{REQUEST_METHOD} eq 'POST') {
read(STDIN, $query_string, $ENV{CONTENT_LENGTH});
} else {
$query_string = $ENV{QUERY_STRING};
}
##### We will remove this
print "Content-Type: text/html\n\n";
print "Query String is \n<br> $query_string";
##### We will remove this

Когда я выполняю файл guestbook.htm, появляется форма, когда я заполняю данные и нажимаю кнопку «Добавить запись», открывается новая страница с полным сценарием.

т.е. скрипт "guestbook.pl" не выполняется. Могу ли я узнать причину этого? Почему скрипт не выполняется? (Я уже дал разрешение на выполнение этого файла).

В файле httpd.conf я добавил

AddHandler cgi-script cgi pl
<Directory /home/chankey/Desktop/Chrome/>
    Options +ExecCGI
</Directory>

Все еще не выполняется. Дайте мне знать причину.

1 Ответ

4 голосов
/ 29 декабря 2011

При локальном доступе к файлу (через URL-адрес типа file:// в браузере) он не запускается с веб-сервера, поэтому:

  • Нет среды CGI
  • Файлы httpd.conf / .htaccess не действуют

Несколько способов справиться с этим:

  • Создайте папку с именем public_html в вашем доме,Ваш веб-сервер, вероятно, имеет настройку для сопоставления http://localhost/~chankey/ с /home/chankey/public_html.(В MacOSX предпочтительное имя - Sites, вместо этого, я полагаю.) В системе SELinux вам придется специально предоставить разрешение для Apache на использование этого метода.
  • Для конкретного случая Perlсценариев, использующих стандартный пакет CGI, вы также можете запускать их вручную из оболочки терминала и перенаправлять их вывод во временный файл (например, >/tmp/output.html), к которому затем можно получить доступ
  • Перенос рабочей области разработкив собственную структуру каталогов вашего веб-сервера, обычно /var/www/html/

PS / unrelated: я настоятельно рекомендую, чтобы, если вы планируете разместить это в Интернете, вам, вероятно, use CGI; use strict; и иметьвключен режим заражения #!/usr/bin/perl -WT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...