Perl CGI 程式写作常问问题集(一)
This document, and all its parts, are Copyright (c) 1996,
Shishir Gundavaram and Tom Christiansen. All rights
reservered. Permisson to distribute this collection, in part
or full, via electronic means (emailed, posted or archived)
or printed copy are granted providing that no charges are
involved, reasonable attempt is made to use the most current
version, and all credits and copyright notices are retained.
Requests for other distribution rights, including
incorporation in commercial products, such as books,
magazine articles, or CD-ROMs should be made to either of
the authors.
本文件著作权属於 Shishir Gundavaram 及 Tom Christiansen 所
有,Copyright (C) 1996。在不涉及收费营利、尽可能地使用最新
版,及所有著作权告示保持完整的情况下,作者允许任何人透过电
子形式(电子邮件、讨论群布告,或存放),或印表方式对本文件
作完整或部份发行。如欲将本文件作其他方式发行,包括将本文件
附加於商业产品,诸如书籍、杂志文章,或光碟等之中,必须事先对
二位作者其中一人提出请求,以徵得许可授权。
本中译版及译者补充部份著作权属萧百龄及两只老虎工作室所有,
Copyright (C) 1997。本中译版遵守并使用与上述原文版相同的使用
条款发行。
---------------------------------------------------------------------------
文体说明:
1.
译者已就原文中语焉不详、资讯过时,或可作额外补充之处附加注解。这些注解
均以星号 (*) 於适当处(通常为句尾)标示。实际的说明文字则大多紧邻星号
所在的段落,自成一段。所有注解文字均以「【译者】」起头。
2. 范例中的 Perl 程式码已由译者适度加以翻译、去除多馀的括弧,并依
perlstyle manpages 中所建议的写作格式及习惯稍作修整。
---------------------------------------------------------------------------
目录:
1.0 -入门简介
Q1.1: 为什麽我的 HTML page/form 需要用 script?
Q1.2: CGI 各代表什麽?
Q1.3: 到底什麽叫 script?我能拿它来能做什麽?
Q1.4: 什麽是 Perl?为什麽有那麽多人用它来做 CGI?
Q1.5: 有没有教 CGI 或 Perl 的书或是线上资料?
Q1.6: 是不是有这方面的邮递论坛 (mailing lists) 或新闻讨论群组?
Q1.7: 网路上是不是有专门收藏邮递论坛或新闻讨论群组的 posts 的站?
2.0 - Modules (模组)
Q2.1: 我是不是该用 Perl CGI modules 来写 CGI scripts
?自己做不是比较容
易吗?
Q2.2: 如何知道某个 module 该怎麽个用法?
Q2.3: 有哪些 Perl4 的 CGI 或 WWW的 libraries ?
Q2.4: 有哪些给 Perl5 使用的 CGI modules?我该用哪个?为什麽?
Q2.5: 为什麽这麽多 perl CGI libraries 都是 object-oriented
(物件导向)
的?我对用物件导向来写程式一窍不通。难道就没有简单一点,给不会物
件导向的人使用的 libraries 吗?物件导向有多难?
3.0 - CGI 与 WWW Server
Q3.1: 我的 Perl CGI 程式要放在哪里执行?cgi-bin
这个目录是做甚麽用的?
Q3.2: 什麽是档案使用权限?怎样改?
Q3.3: Perl 应该安装在哪里才可以执行它?
Q3.4: 我为什麽一直得到 ``Server: Error 500'' 的讯息?
Q3.5: 我试著打开一个档案,想把资料储存在里头,但是 open() 的指令失败
了。到底是怎麽搞的?
4.0 -程式设计疑难杂症
Q4.1: 我想让 user 填的 form 资料自动寄给我,该怎麽做?有没有范例?
Q4.2: 刚才这个用 form 送信的 script 看起来有点难。为什麽不乾脆用
``mailto:URL'',这样 user 填入的资料就可以寄给我了?
Q4.3: 我要如何在 UNIX 以外的平台上做 Perl-CGI,譬如 Mac、MS-DOS、
Windows 及 NT?我的 Perl CGI 程式能不能在这些平台之间互相移植呢?
能不能很直接,没有麻烦?我在 UNIX 主机上有帐号,但是都是先在
Windows/Mac 上做。我要如何在我自己的机器上测试写好的 CGI scripts
?
Q4.4: 在 Perl CGI 程式中,STDERR (标准错误讯息)、STDIN
(标准输入),和
STDOUT (标准输出)各是连到何处?
Q4.5: 如何写计数器?
Q4.6: 要如何用一个 Perl 的取代指令将所有 HTML 标签从一份文件中删除?
Q4.7: 要如何知道是谁/哪台机器/哪个浏览器执行了我的程式?
Q4.8: 人家看得到我的 Perl CGI
程式吗?如果是这样的话,那不就让他们知道
我的程式是怎麽运作的了。这是个安全漏洞吗?我要怎麽把它隐藏起来?
Q4.9: 我需要将整个 Perl library 都复制到我的 htdocs 目录底下吗?
Q4.10:
我为什麽不该叫使用者输入他们的密码或身份证字号或信用卡号码?有一
个 TYPE="password" 不是就是拿来做这个的吗?
Q4.11: 我要如何产生专门替 Netscape
设计的网页,以别於世上其他的浏览器?
Q4.12: 为什麽我的 system() 所产生的资料输出顺序不对?
Q4.13: 我听说 Netscape 会支援 Java。这是不是说我现在得弃 Perl,改Java
了?是不是该这麽做?
Q4.14: 我要如何读取环境变数?为什麽它们有时候会不一样?
Q4.15: 为什麽我输出的资料被搅乱了(如 ``b < a'' 会被破坏掉)?
Q4.16: 为什麽我的Perl CGI 程式可以由指令列,却无法从浏览器去执行?
Q4.17: 为什麽我的 Perl CGI 程式能跑,但是不会把资料写到档案中?
Q4.18: 要如何做一个会维系状态,或允许【同一使用者】多次连线的 form?
Q4.19: 如果不从浏览器去执行我的 CGI 程式,要如何替它除错?
Q4.20: 如果不靠<FORM>标签,要如何叫出 Perl CGI 程式?
Q4.21: 要如何避免旁人不先填栏位就执行我的 form?他们为什麽一直不断这麽
做?
Q4.22: 那些 server 回应码 (server response codes)
是干什麽用的?有什麽意
义?
Q4.23: 为什麽 print "Location: http://host/page.html\n 不
work?又为什
麽它只 work 一次,但随後的转向就都弄错了呢?
Q4.24: 要如何让 server 在每个 HTML
网页的底部都自动加上一个:「最近更新
日期: ...」的告示?或者,是不是只有 SSI 的网页才能这麽做?CGI 程
式的日期要如何取得?
Q4.25: 什麽样的场合下以 Perl 写 CGI 程式会显得太小题大作,因为用 shell
就可以做到?而什麽样的场合对 Perl 来说又过於困难?用 C 做这类的
事不是好得多吗?那用 C 呢?
5.0 -安全
Q5.1: 以 Perl 写成的 CGI 程式是不是不如以 shell 或 C 写的来得安全?
Q5.2: 我该特别留意哪些安全事项?
Q5.3: 为什麽大家都说 http://bigidiot.abuse-me.com/perl.exe?foo.pl
这样
很危险?会有多糟?
Q5
搜索更多相关主题的帖子:
Perl 程式 CGI 写作