Linux中國

如何使用 CGI 腳本生成網頁

回到互聯網的開端,當我第一次創建了我的第一個商業網站,生活是如此的美好。

我安裝 Apache 並寫了一些簡單的 HTML 網頁,網頁上列出了一些關於我的業務的重要信息,比如產品概覽以及如何聯繫我。這是一個靜態網站,因為內容很少改變。由於網站的內容很少發生改變這一性質,因此維護起來也很簡單。

靜態內容

靜態內容很簡單,同時也很常見。讓我們快速的瀏覽一些靜態網頁的例子。你不需要一個可運行網站來執行這些小實驗,只需要把這些文件放到家目錄,然後使用瀏覽器打開。你所看到的內容將和通過 Web 伺服器提供這一文件看到的內容一樣。

對於一個靜態網站,你需要的第一件東西就是 index.html 文件,該文件通常放置在 /var/www/html 目錄下。這個文件的內容可以非常簡單,比如可以是像 「Hello, world」 這樣一句短文本,沒有任何 HTML 標記。它將簡單的展示文本串內容。在你的家目錄創建 index.html 文件,並添加 「hello, world」 作為內容(不需要引號)。在瀏覽器中通過下面的鏈接來打開這一文件:

file:///home/<你的家目錄>/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 公共網關介面 Common Gateway InterfaceM )代碼。字面意思來看,動態意味著在瀏覽器中生成的網頁所需要的 HTML 是由每次訪問頁面時不同的數據所生成的。這些數據包括網頁表單中的用戶輸入,以用來在資料庫中進行數據查找,結果數據被一些恰當的 HTML 包圍著並展示在所請求的瀏覽器中。但是這不需要非常複雜。

通過使用 CGI 腳本,你可以創建一些簡單或複雜的互動式程序,通過運行這些程序能夠生成基於輸入、計算、伺服器的當前條件等改變的動態頁面。有許多種語言可以用來寫 CGI 腳本,在這篇文章中,我將談到的是 Perl 和 Bash ,其他非常受歡迎的 CGI 語言包括 PHP 和 Python 。

這篇文章不會介紹 Apache 或其他任何 web 伺服器的安裝和配置。如果你能夠訪問一個你可以進行實驗的 Web 伺服器,那麼你可以直接查看它們在瀏覽器中出現的結果。否則,你可以在命令行中運行程序來查看它們所創建的 HTML 文本。你也可以重定向 HTML 輸出到一個文件中,然後通過瀏覽器查看結果文件。

使用 Perl

Perl 是一門非常受歡迎的 CGI 腳本語言,它的優勢是強大的文本操作能力。

為了使 CGI 腳本可執行,你需要在你的網站的 httpd.conf 中添加下面這行內容。這會告訴伺服器可執行 CGI 文件的位置。在這次實驗中,不必擔心這個問題。

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

把下面的 Perl 代碼添加到文件 index.cgi,在這次實驗中,這個文件應該放在你的家目錄下。如果你使用 Web 伺服器,那麼應把文件的所有者更改為 apache.apache,同時將文件許可權設置為 755,因為無論位於哪,它必須是可執行的。

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

在命令行中運行這個程序並查看結果,它將會展示出它所生成的 HTML 內容

現在,在瀏覽器中查看 index.cgi 文件,你所看到的只是文件的內容。瀏覽器需要將它看做 CGI 內容,但是,Apache 不知道需要將這個文件作為 CGI 程序運行,除非 Apache 的配置中包括上面所展示的 ScriptAlias 定義。沒有這一配置,Apache 只會簡單地將文件中的數據發送給瀏覽器。如果你能夠訪問 Web 伺服器,那麼你可以將可執行文件放到 /var/www/cgi-bin 目錄下。

如果想知道這個腳本的運行結果在瀏覽器中長什麼樣,那麼,重新運行程序並把輸出重定向到一個新文件,名字可以是任何你想要的。然後使用瀏覽器來查看這一文件,它包含了腳本所生成的內容。

上面這個 CGI 程序依舊生成靜態內容,因為它總是生成相同的輸出。把下面這行內容添加到 CGI 程序中 「Hello, world」 這一行後面。Perl 的 system 命令將會執行跟在它後面的 shell 命令,並把結果返回給程序。此時,我們將會通過 free 命令獲得當前的內存使用量。

system "free | grep Memn";

現在,重新運行這個程序,並把結果重定向到一個文件,在瀏覽器中重新載入這個文件。你將會看到額外的一行,它展示了系統的內存統計數據。多次運行程序並刷新瀏覽器,你將會發現,內存使用量應該是不斷變化的。

使用 Bash

Bash 可能是用於 CGI 腳本中最簡單的語言。用 Bash 來進行 CGI 編程的最大優勢是它能夠直接訪問所有的標準 GNU 工具和系統程序。

把已經存在的 index.cgi 文件重命名為 Perl.index.cgi,然後創建一個新的 `index.cgi 文件並添加下面這些內容。記得設置許可權使它可執行。

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

在命令行中執行這個文件並查看輸出,然後再次運行並把結果重定向到一個臨時結果文件中。然後,刷新瀏覽器查看它所展示的網頁是什麼樣子。

結論

創建能夠生成許多種動態網頁的 CGI 程序實際上非常簡單。儘管這是一個很簡單的例子,但是現在你應該看到一些可能性了。

via: https://opensource.com/article/17/12/cgi-scripts

作者:David Both 譯者:ucasFL 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國