如何从 apache web 服务器中的 perl 脚本 运行 获取用户输入?

How to obtain user input from perl script running in apache web server?

我有一个 raspberry pi 运行 最新的 Raspbian 安装了 apache2 的图像。我的 /usr/lib/cgi-bin 目录中有一个 perl 脚本,我在没有互联网访问权限的本地临时网络上使用它。

这是我的 perl 文件:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
$config=`cat /home/pi/Desktop/AutoPi/AutoPi.config`;
print <<"EOF";
<HTML>
<HEAD>
<TITLE>Hello, world!</TITLE>
</HEAD>
<BODY>
<H1>Hello, world!</H1>
<br><br>
</BODY>
</HTML>
EOF

效果很好,我可以使用 perl 系统命令,例如:

$my_dir=`pwd`;

...并将它们传递到用户看到的网页。这很棒。但是,我需要能够让用户单击按钮并执行代码。

我对使用 perl 很满意,并且希望尽可能将所有内容保留在 perl 文件中。如果我可以编写一个简单的按钮,按下该按钮后,可以在服务器端执行一个简单的命令,我可以完成剩下的工作。

这是一个脚本,可让您开始使用 CGI.pm 从提交的表单中访问参数。

#!/usr/bin/perl

use strict;
use warnings;

use CGI qw(escapeHTML);
#use CGI::Carp qw(fatalsToBrowser);

my $q = CGI->new;

my $text = $q->param('text') || '';

print $q->header('text/html; charset=utf-8');

my $safe_text = escapeHTML($text);

print <<"EOF";
<html>
<head>
  <title>Hello, world!</title>
</head>
<body>

  <h1>Hello, world!</h1>
  <div>$safe_text</div>

  <form method="post">
    <textarea name="text" rows="5" cols="40">$safe_text</textarea><br>
    <input type="submit" value="Submit">
  </form>

</body>
</html>
EOF

CGI.pm 并不是真正推荐的构建 Web 应用程序的方法,但听起来你很开心,所以去吧。尝试删除 use CGI::Carp 行上的“#”。如果脚本仍然 运行s 则保持原样,这样您将在浏览器中收到一些错误消息。您还需要 运行 此命令来查找错误:

tail -f /var/log/apache2/error.log