如何使用CGI脚本生成网页

通用网关接口提供了一种使用您选择的任何语言构建动态网站的简便方法。
273 位读者喜欢这篇文章。
An introduction to GNU Screen

Opensource.com

回到互联网的石器时代,当我第一次创建我的第一个商业网站时,生活很美好。

我安装了Apache,并创建了一些简单的HTML页面,其中说明了关于我的业务的一些重要事项,并提供了重要信息,例如我的产品概述以及如何联系我。这是一个静态网站,因为内容很少更改。维护很简单,因为我的网站性质不变。

静态内容

静态内容简单且仍然很常见。让我们快速看一下几个示例静态网页。您不需要一个可用的网站来执行这些小实验。只需将文件放在您的主目录中,并使用浏览器打开它们。您将看到与文件通过 Web 服务器提供给您的浏览器时完全相同的内容。

静态网站上您需要的第一件事是 index.html 文件,该文件通常位于 /var/www/html 目录中。此文件可以像文本短语(例如“Hello world”)一样简单,而没有任何 HTML 标记。这将仅显示文本字符串。在您的主目录中创建 index.html,并添加“Hello world”(不带引号)作为其唯一内容。使用以下 URL 在浏览器中打开 index.html。

file:///home/<yourhomedirectory>/index.html

因此,HTML 不是必需的,但是如果您有大量需要格式化的文本,那么没有 HTML 代码的网页结果将是难以理解的,所有内容都连在一起。

因此,下一步是通过使用一些 HTML 代码来提供一些格式,使内容更具可读性。以下命令创建一个页面,其中包含静态网页所需的绝对最少标记和 HTML。您也可以使用您喜欢的编辑器来创建内容。

echo "<h1>Hello World</h1>" > test1.html

现在查看 index.html 并查看区别。

当然,您可以在实际内容行周围放置许多额外的 HTML,以创建一个更完整和标准的网页。如下所示的更完整版本仍然会在浏览器中显示相同的结果,但它也构成了更标准化的网站的基础。继续并使用此内容作为您的 index.html 文件,并在浏览器中显示它。

<!DOCTYPE HTML PUBLIC "-//w3c//DD HTML 4.0//EN">
<html>
<head>
<title>My Web Page</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>

我使用这些技术构建了几个静态网站,但我的生活即将发生变化。

新工作的动态网页

我接受了一份新工作,我的主要任务是为一个非常动态的网站创建和维护 CGI(通用网关接口)代码。在这种情况下,动态意味着在浏览器上生成网页所需的 HTML 是从每次访问页面时都可能不同的数据生成的。这包括来自 Web 表单的用户输入,该表单用于在数据库中查找数据。结果数据被适当的 HTML 包围,并显示在请求浏览器上。但这不需要那么复杂。

使用 CGI 脚本构建网站允许您创建简单或复杂的交互式程序,这些程序可以运行以提供动态网页,该网页可以根据输入、计算、服务器中的当前条件等进行更改。有许多语言可用于 CGI 脚本。我们将研究其中的两种,Perl 和 Bash。其他流行的 CGI 语言包括 PHP 和 Python。

本文不涵盖 Apache 或任何其他 Web 服务器的安装和设置。如果您可以访问可以进行实验的 Web 服务器,则可以直接查看结果在浏览器中的显示方式。否则,您仍然可以从命令行运行程序并查看将创建的 HTML。您还可以将 HTML 输出重定向到一个文件,然后在浏览器中显示结果文件。

使用 Perl

Perl 是一种非常流行的 CGI 脚本语言。它的优势在于它是一种非常强大的文本处理语言。

要使 CGI 脚本执行,您需要在您使用的网站的 httpd.conf 中添加以下行。这告诉 Web 服务器您的可执行 CGI 文件位于何处。对于此实验,我们暂时不用担心。

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

将以下 Perl 代码添加到文件 index.cgi 中,该文件应位于您的主目录中以进行实验。当您使用 Web 服务器时,将文件的所有权设置为 apache.apache,并将权限设置为 755,因为它无论位于何处都必须是可执行的。

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>\n";
print "<h1>Hello World</h1>\n";
print "Using Perl<p>\n";
print "</body></html>\n";

从命令行运行此程序并查看结果。它应该显示它将生成的 HTML 代码。

现在在浏览器中查看 index.cgi。好吧,您得到的只是文件的内容。浏览器确实需要将其作为 CGI 内容交付。除非网站的 Apache 配置包含如上所示的“ScriptAlias”定义,否则 Apache 实际上并不知道它需要将文件作为 CGI 程序运行。如果没有该位配置,Apache 只是将文件中的数据发送到浏览器。如果您可以访问 Web 服务器,则可以在 /var/www/cgi-bin 目录中使用可执行索引文件尝试一下。

要查看它在浏览器中的外观,请再次运行该程序,并将输出重定向到一个新文件。随意命名它。然后使用浏览器查看包含生成内容的文件。

上面的 CGI 程序仍然生成静态内容,因为它始终显示相同的输出。在“Hello World”行之后立即向您的 CGI 程序添加以下行。Perl “system”命令在系统 shell 中执行跟随它的命令,并将结果返回给程序。在这种情况下,我们只是从 free 命令的结果中 grep 出当前的 RAM 使用情况。

system "free | grep Mem\n";

现在再次运行该程序,并将输出重定向到结果文件。在浏览器中重新加载文件。您应该看到一个额外的行,其中显示了系统内存统计信息。运行该程序并刷新浏览器几次,并注意内存使用情况应该偶尔会发生变化。

使用 Bash

Bash 可能是所有 CGI 脚本语言中最简单的语言。它在 CGI 编程中的主要优势在于它可以直接访问所有标准 GNU 实用程序和系统程序。

将现有的 index.cgi 重命名为 Perl.index.cgi,并使用以下内容创建一个新的 index.cgi。请记住将权限正确设置为可执行。

#!/bin/bash
echo "Content-type: text/html"
echo "" 
echo '<html>'
echo '<head>'
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
echo '<title>Hello World</title>'
echo '</head>'
echo '<body>'
echo '<h1>Hello World</h1><p>'
echo 'Using Bash<p>'
free | grep Mem
echo '</body>'
echo '</html>'
exit 0

从命令行执行此程序并查看输出,然后运行它并将输出重定向到您之前创建的临时结果文件。然后刷新浏览器以查看它作为网页显示时的外观。

结论

实际上,创建可用于生成各种动态网页的 CGI 程序非常简单。这是一个简单的例子,但您现在应该看到一些可能性。  

David Both
David Both 是一位开源软件和 GNU/Linux 倡导者、培训师、作家和演讲者。自 1996 年以来,他一直从事 Linux 和开源软件工作,自 1969 年以来一直从事计算机工作。他是“系统管理员 Linux 哲学”的坚定支持者和传播者。

2 条评论

我编写的第一个有意义的 CGI 脚本是用 tcsh 编写的。我是一名大学生,任务是将我们的纸质天气地图墙变成数字地图墙。我编写了一个 CGI 脚本,允许部门人员请求某些地图,然后允许我进入并根据需要更新墙的图像。它奏效了,但我确信如果我现在看它,我将无法弄清楚它是如何工作的。

我的第一个 CGI 脚本是用 Perl 编写的:在 1995 年!很高兴看到一个简单的教程(一切都涌回我的脑海......)。

希望任何后续文章都提到安全性:那里有一些要避免的糟糕做法!

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.