大 纲
一 、 为 什 么 要 使 用 CGI ?
二 、 什 么 是 CGI ?
2-1 CGI 简 介
2-2 CGI 的 输 入 输 出
2-3 CGI 可 用 的 程 式 语 言
三 、 CGI 的 输 入 介 面
3-1 ISINDEX
3-2 FORM
3-2-1 FORM 标 签
3-2-2 INPUT 标 签
3-2-3 SELECT 标 签
3-2-4 TEXTAREA 标 签
四 、 CGI 如 何 运 作 ?
4-1 CGI 运 作 流 程
4-2 CGI 传 递 资 料 的 方 法
4-3 CGI 的 参 数
五 、 CGI 输 出 介 面
5-1 CGI 输 出 格 式
5-2 基 本 程 式 范 例
5-2-1 Perl
5-2-2 C for POST METHOD
5-2-3 C for GET METHOD
--------------------------------------------------------------------------------
一 、 为 什 么 要 使 用 CGI ?
随 著 全 球 资 讯 网 (World Wide Web, WWW) 的 兴 起 , 网 路 从 平 淡 的 文 字 世 界 进 入 了 影 音 声 光 的 新 纪 元 。 同 时 也 引 进 了 新 的 阅 读 方 法 , 一 种 有 别 於 传 统 循 序 式 的 阅 读 方 法 ━ HyperText 。 让 人 们 能 够 直 接 从 有 兴 趣 的 主 题 切 入 , 并 且 在 其 间 相 互 跳 跃 、 链 结 , 以 取 得 所 想 要 的 资 料 。 也 因 此 带 动 了 网 路 人 口 的 激 增 以 及 无 限 的 商 机 , 所 以 在 商 业 应 用 上 这 是 一 个 值 得 开 发 的 空 间 。
但 是 这 样 的 方 式 却 缺 少 了 一 个 商 业 应 用 上 一 个 重 要 的 特 性 , 那 就 是 ━ 互 动 性 。 而 CGI 的 出 现 正 是 为 了 弥 补 其 不 足 ! 有 了 CGI 功 能 的 加 入 可 以 使 得 WWW 的 环 境 不 仅 有 单 向 的 资 讯 浏 览 , 更 可 以 有 双 向 的 互 动 。 若 说 CGI 的 发 展 是 WWW 能 受 广 大 使 用 者 喜 爱 的 最 大 原 因 是 不 为 过 的 。
事 实 上 , CGI 的 应 用 相 当 的 广 泛 , 可 以 藉 著 与 其 它 系 统 的 结 合 而 增 强 WWW Server 的 功 能 。 例 如 ∶ 与 资 料 库 管 理 系 统 (DBMS) 结 合 , 便 是 一 种 最 常 见 , 而 且 是 最 具 扩 充 性 的 方 式 。 因 为 经 由 不 同 的 资 料 库 , 可 以 使 WWW Server 提 供 或 者 是 记 录 多 样 化 的 资 讯 。
同 时 , 也 可 利 用 CGI 制 作 登 录 (Login) 系 统 , 将 具 有 机 密 性 的 资 料 , 以 密 码 的 方 式 加 以 保 护 。 不 但 省 去 了 系 统 过 於 开 放 的 困 扰 , 也 可 以 有 效 的 管 理 使 用 者 。 更 进 一 步 , 可 以 记 录 使 用 者 的 使 用 情 形 , 以 便 加 以 计 费 或 者 是 在 网 路 上 进 行 电 子 交 易 。
是 故 如 果 要 将 商 业 应 用 在 WWW 上 , CGI 势 必 是 不 可 或 缺 的 一 环 。 以 下 我 们 将 会 以 和 资 料 库 管 理 系 统 结 合 为 核 心 , 逐 步 介 绍 何 谓 CGI 、 CGI 如 何 输 入 资 料 、 CGI 如 何 运 作 以 及 CGI 怎 么 输 出 资 讯 回 给 使 用 者 , 并 且 在 最 後 附 上 几 个 CGI 应 用 的 范 例 , 让 您 了 解 并 且 实 作 CGI 。
此 外 , 本 章 的 实 作 以 及 范 例 使 用 的 作 业 系 统 为 MicroSoft NT , WWW Server 为 EMWAC HTTPS , 资 料 库 管 理 系 统 为 MicroSoft SQL Server , 程 式 语 言 为 Microsoft C 与 资 料 库 管 理 系 统 的 介 面 为 DB-Library 。 关 於 这 些 部 分 的 详 细 资 料 将 不 在 赘 述 , 如 果 您 对 其 它 的 CGI 系 统 有 兴 趣 或 是 想 要 更 深 入 了 解 本 章 实 作 的 非 CGI 部 分 , 请 自 行 参 考 相 关 资 料 。
二 、 什 么 是 CGI ?
2-1 CGI 简 介
CGI 是 Common Gateway Interface 的 简 称 。 其 主 要 的 功 能 是 在 WWW 环 境 下 , 藉 由 从 客 户 端 传 递 一 些 讯 息 给 WWW Server , 再 由 WWW Server 去 启 动 所 指 定 的 程 式 码 来 完 成 特 定 的 工 作 。 所 以 更 明 确 的 说 , CGI 仅 是 在 WWW Server 上 可 执 行 的 程 式 码 , 而 她 的 工 作 就 是 控 制 讯 息 要 求 而 且 产 生 并 传 回 所 需 的 文 件 。
使 用 CGI , 你 的 Server 可 以 读 取 并 显 示 在 客 户 端 无 法 读 取 的 格 式 (像 是 SQL DataBase) 。 而 且 可 以 像 闸 道 (Gateway) 一 样 , 在 伺 服 端 和 客 户 端 之 间 , 产 生 客 户 端 所 需 要 的 讯 息 。 基 本 上 , 在 此 种 主 从 式 (Client/Server) 的 环 境 之 下 , 其 IPC (InterProcess Communication) 的 协 定 是 利 用 讯 息 传 递 及 记 忆 体 分 享 (环 境 变 数) 的 方 式 来 完 成 。 CGI 有 其 特 定 的 写 法 及 规 格 , 必 须 遵 守 其 原 则 , 方 可 达 到 主 从 端 资 讯 交 流 的 目 的 。
2-2 CGI 的 输 入 输 出
CGI 可 以 使 用 在 很 多 方 面 , 大 部 份 是 控 制 ISINDEX 和 FORM 的 需 求 , 亦 即 ISINDEX 和 FORM 最 常 被 使 用 作 CGI 的 输 入 介 面 。 但 也 有 利 用 链 结 (LINK) 的 方 式 来 呼 叫 所 要 执 行 的 程 式 , 通 常 是 在 使 用 者 的 资 讯 已 固 定 , 或 是 为 达 成 某 种 单 一 目 的 而 使 用 。 而 使 用 链 结 方 式 其 程 式 执 行 所 需 的 参 数 是 以 GET METHOD 的 方 式 含 在 URL 中 传 入 , 亦 即 CGI 程 式 在 发 展 时 必 须 使 用 GET METHOD 的 方 式 来 读 取 参 数 。 在 第 四 节 , 我 们 将 会 详 细 介 绍 传 递 参 数 的 方 法 。
输 出 的 部 分 则 大 部 分 是 利 用 程 式 来 产 生 虚 拟 文 件 , 也 就 是 文 件 并 不 是 储 存 Server 的 储 存 媒 体 中 , 而 是 由 程 式 建 构 出 来 的 , 浏 览 程 式 结 束 之 後 文 件 即 不 再 存 在 。 大 部 分 的 文 件 格 式 是 超 本 文 标 示 语 言 (HTML) 或 是 文 字 档 。 也 有 利 用 程 式 链 结 到 另 一 份 文 件 , 或 是 只 记 录 使 用 者 输 入 资 讯 而 不 做 输 出 !
下 面 是 常 见 输 入 输 出 的 例 子 ∶
转 换 您 的 系 统 参 考 手 册 变 成 超 本 文 标 示 语 言 (HTML) 的 格 式 , 接 著 将 结 果 送 给 客 户 端 。
当 做 WAIS 和 ARCHIE 资 料 库 的 界 面 , 将 结 果 转 成 超 本 文 标 示 语 言 (HTML) 的 格 式 送 给 客 户 端 。
允 许 使 用 者 透 过 HTML FORM 和 附 加 的 CGI 解 码 来 回 给 你 的 Server 。
在 下 面 各 节 , 我 们 将 会 进 一 步 说 明 有 关 这 一 部 分 的 使 用 方 法 , 或 是 简 单 的 范 例 。
2-3 CGI 可 用 的 程 式 语 言
至 於 CGI 要 使 用 何 种 程 式 语 言 来 达 成 ? 从 前 面 的 说 明 可 以 知 道 , CGI 仅 是 在 WWW Server 上 可 执 行 的 程 式 码 。 是 故 , 只 要 是 您 的 WWW Server 以 及 WWW Server 所 在 的 作 业 系 统 可 执 行 的 程 式 语 言 皆 能 使 用 在 CGI 上 。 以 下 列 出 几 种 较 常 在 CGI 中 使 用 的 语 言 ∶
C/C++
PERL
THE BOURNE SHELL
THE C SHELL
TCL
Visual Basic
AppleScript
这 些 程 式 在 完 成 之 後 要 放 置 於 何 处 ? 事 实 上 , 不 同 的 WWW Server 有 不 同 的 规 定 。 以 HTTPS 为 例 , 她 只 执 行 副 档 名 为 EXE 的 执 行 档 , 且 程 式 不 能 为 图 形 介 面 (GUI) 的 程 式 。 而 程 式 只 要 放 置 在 指 定 文 件 的 树 状 目 录 中 任 一 位 置 即 可 。 但 是 值 得 注 意 的 是 , 大 部 分 的 WWW Server 尤 其 是 UNIX 上 的 WWW Server , 都 将 CGI 程 式 放 置 在 一 共 同 的 指 定 目 录 之 下 。 所 以 在 放 置 CGI 程 式 时 , 请 先 参 考 您 的 WWW Server 手 册 。
三 、 CGI 的 输 入 介 面
在 一 个 完 整 的 系 统 中 , 输 入 介 面 是 直 接 和 使 用 者 接 触 的 第 一 线 。 所 以 输 入 介 面 , 在 整 个 系 统 中 扮 演 著 举 足 轻 重 的 地 位 , 输 入 介 面 的 好 坏 将 直 接 影 向 系 统 的 成 败 。 好 的 输 入 介 面 可 以 弥 补 系 统 设 计 上 的 某 些 缺 陷 , 但 是 要 如 何 设 计 出 一 个 好 的 输 入 介 面 呢 ? 所 谓 「 工 欲 善 其 事 , 必 先 利 其 器 」 , 要 设 计 出 好 的 输 入 介 面 , 第 一 步 应 了 解 手 边 究 竟 有 哪 些 修 缮 门 面 的 工 具 ! 在 这 一 节 中 , 我 们 将 为 您 介 绍 CGI 的 主 要 输 入 介 面 , 让 您 做 好 成 功 的 第 一 步 。
在 CGI 中 较 常 见 的 输 入 介 面 有 ISINDEX 和 FORM 两 种 , 详 细 内 容 分 述 如 下 ∶
3-1 ISINDEX
ISINDEX 是 一 个 特 殊 的 标 签 , 使 用 的 方 法 如 下 ∶
其 中 URL 为 想 要 执 行 的 程 式 之 所 在 位 址 及 档 名 。
如 此 会 使 浏 览 程 式 产 生 一 个 输 入 的 视 窗 , 当 使 用 者 完 成 输 入 按 下 ENTER 键 後 , Server 会 执 行 参 数 ACTION 中 指 定 的 程 式 。 下 面 是 一 个 简 单 的 范 例 ∶
--------------------------------------------------------------------------------
可以搜索该索引。请键入要搜索的关键字:
--------------------------------------------------------------------------------
常 见 的 用 法 是 与 WAIS Server 结 合 , 或 是 做 档 案 的 搜 寻 。 本 节 的 重 点 将 放 在 FORM 的 实 作 上 , 所 以 我 们 在 这 里 不 对 ISINDEX 做 详 细 的 介 绍 , 如 有 兴 趣 请 自 行 参 考 相 关 资 料 。
3-2 FORM
FROM 在 CGI 中 是 最 常 被 使 用 的 输 入 介 面 , 虽 然 并 不 十 分 完 美 , 但 却 是 目 前 WWW 中 最 强 大 的 输 入 工 具 。 FORM 是 由 一 组 相 关 连 的 标 签 所 组 成 , 使 用 方 法 就 像 其 它 标 签 一 样 。 在 FORM 中 提 供 了 我 们 多 种 输 入 资 料 的 工 具 , 例 如 文 字 输 入 区 (Text) 、 下 拉 式 表 单 (Select Box) 、 按 钮 (Button) 、 选 择 钮 (Radio Button) 等 等 。
就 目 前 所 定 义 的 标 准 中 , FORM 的 标 签 可 分 为 三 大 类 ∶ 、 |