跳转到内容

Perl 编程/CGI

来自维基教科书,开放的书籍,开放的世界
前一个:DBI - Perl 数据库接口 索引 下一个:FastCGI

假设您已经拥有一个 Apache 服务器(或兼容的服务器,可以读取 shebang! 行 - 稍后会详细介绍)和一个正在运行的 Perl 安装,在互联网上运行 Perl 程序相当简单。

首先,您必须有一种访问程序的方法。在这里我们将处理表单数据和提交,因此我们将假设您的 HTML 中的表单代码有一个属性,写着 ACTION="programname.cgi"

初始设置

[编辑 | 编辑源代码]

CGI 脚本像任何其他 Perl 程序一样开始,使用“shebang”,类似于

 #!/usr/bin/perl

(有关详细信息,请参阅 Perl 编程/第一个程序)

接下来加载 CGI 模块

 use CGI;

CGI 模块使我们的工作变得轻松,因为它预先编程了用于互联网使用的函数。然后我们必须创建一个 CGI 处理器 - 可以让我们访问函数的东西。我们用以下代码来实现

 my $query = CGI->new();

这意味着变量 $query 正在加载 CGI 标准函数。

现在我们的程序已经使用 CGI 模块设置好了,它应该看起来像这样

 #!/usr/bin/perl

 use CGI;
 my $query = CGI->new();

所以我们有一个程序,它只是什么也不做,实际上会导致服务器错误,因为服务器没有输出,也不知道应该显示什么类型的输出,即使它有一些输出。

获取信息

[编辑 | 编辑源代码]

在我们告诉服务器如何处理我们的输出之前,我们需要检索我们的输入。为此,我们使用$query我们之前声明的变量。假设我们在表单中有一个名为“Name”的文本框,我们想知道在那里输入了什么。为此,我们在程序中添加以下代码行

 my $Name = $query->param('Name');

现在,这行代码介绍了param()函数(用于“参数”)。该param()函数可以为我们执行许多方便的操作,它们都是检索变量的好方法。它处理所有 HTTP 编码,因此我们得到的只是一个干净的变量。另一个需要注意的是,您不需要使用$Name作为您的变量。只记住一个变量的名称,这样更方便。不过,还是使用最适合您的方法。

现在我们必须创建我们的标题信息。CGI 甚至使这变得容易。我们不必记住一大堆 mime 类型声明(您也可以这样做),我们只需要输入

 print $query->header();

它就会打印出我们的标题信息。关于标题的一点说明。在括号内,我们可以指定参数,例如要发送给用户浏览器的 cookie。这在以后会非常有用。现在我们只坚持标题。

您需要放入的最后一样东西(虽然程序会运行,但会显示一个空白页面,没有它),是一些输出。让我们简单地让它将用户的姓名显示给他们。这将看起来像这样。

 print " You said your name was: $Name";

完成的代码

[编辑 | 编辑源代码]

所以我们现在有一个完整的程序,它处理表单,只用六行代码。Perl 难道不棒吗?最终代码看起来像这样

 #!/usr/bin/perl

 use CGI;
 my $query = new CGI;

 my $Name = $query->param('Name');

 print $query->header();

 print "You said your name was: ", $query->escapeHTML($Name);

从透视的角度来看,我们可以看到$query变量是与 CGI 模块非常重要的连接,因为它告诉 perl 您引用的函数属于 CGI;再次强调,您可以声明任何变量名来代替$query只要您保持一致,虽然您会发现许多开发人员使用$query$q. 还要注意使用escapeHTML方法来避免任何 HTML 注入 问题。

最后注意:确保您将/usr/bin/perl更改为您的 perl 安装路径(假设不是它),这样 perl 才能正确执行。

有许多 CGI 框架可以帮助完成常见的 CGI 编程任务


前一个:DBI - Perl 数据库接口 索引 下一个:FastCGI
华夏公益教科书