跳到内容

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
华夏公益教科书