CGI入门教程
第一页:Unix环境
本教程将与您一起学习在Unix平台上用Perl创建CGI。和其它教程不同,我们并不假设你了解CGI、Perl或Unix。
学完本教程后,你将能够建立Perl的计数器、留言板和处理安全口令的程序。同时你也会对Perl语言有所了解,学习使用其变量、if语句和循环。
什么是CGI?
CGI代表通用网关接口(Common Gateway Interface)。本质上,CGI是运行在服务器上的程序。它可以用任何语言编写
- 只要能够在你的服务器上运行。Perl之所以能够成为CGI编程的首选,是因为它可以适应所有的平台,而且拥有很多对Web来说非常理想的工具。
当我在一个网页上填充一个form并按'Submit'时,有2件事在服务器上发生:
敲入或选择的所有信息被拷贝到服务器。
服务器寻找在form顶部确定的程序,然后运行之。
程序做的第一件事通常是请求网页form中的内容,然后把它赋给变量。然后程序可以查询数据库、发送一封电子邮件或加入留言板、或者任何你想做的事。
我们通过例子学习教程。对每个新的主题,我们查看整段代码,然后分成小片段并进行讨论。在你在Unix服务器上使用Perl之前,应该对Unix有一些了解。
Unix环境
你应该会用Telnet登录到Unix服务器上以便能用Perl创建CGI。
你也应该能把文档FTP到服务器上。
实际上,Unix是一种最强大和灵活的操作系统。当作为终端使用时,用户用一种称为X-Windows的图形用户界面。X-Windows因为在互联网上太慢而无法使用,所以我们将使用命令行方式。
命令行提示
每次在Unix中输入新的一行,将得到一个命令行提示。通常以机器名然后跟着一个%或#字符的形式出现。这是输入基本命令来创建、拷贝、移动和删除文件的地方,还可以做其它事情。
试试这些联系:
打开你最喜欢的Mac或PC字处理器。对于HTML来说,用一种简单的能把代码存成纯文本的编辑器。敲入这行:This is a
dummy sentenc.
把文件保存为practice.txt。
用FTP程序把这个文件上载到服务器上。注意:应该以ASCII的方式上载你的CGI文件,不能用binary方式。
用TELNET程序访问你的Web服务器。
用你的用户名和口令LOGIN。
敲入ls然后按回车键(注意:使用小写,Unix区分大小写),你的Web服务器中的内容将列在屏幕上,应该能够看到你的practice.txt。
敲入pwd然后按回车。pwd代表“打印工作目录(Print Working Directory)”。从服务器的ROOT目录到你的当前目录的路径将显示出来。例如,我的主目录是/home/usr/robyoung/htdocs。
敲入mkdir myfolder然后按回车 - 创建一个叫'myfolder'的目录。
敲入mv practice.txt myfolder/practice.txt然后按回车 - 把practice.txt移动到myfolder中。
敲入cd myfolder然后按回车 - 进入myfolder目录。
敲入pwd然后按回车 - 路径名以/myfolder结束。
敲入ls然后按回车 - myfolder中的内容将显示出来 - 只有practice.txt。
敲入cp practice.txt copy2.txt然后按回车 - 做一个拷贝。
敲入ls然后按回车 - 将列出两个文件。
敲入rm copy2.txt然后按回车 - 删除这个文件。
敲入ls然后按回车 - 只剩下practice.txt。
第二页:chmod命令
创建CGI程序时,需要改变其访问权限以便能从网页中执行之。我们用chmod命令实现这个目的。chmod命令有两个参数
- 谁拥有权限和他们将拥有哪些权限。
1.谁拥有权限?
有三类不同的权限:User、Group和Others - 用字母u、g和o表示。字母'a'表示所有类别。
2.可以拥有什么权限?
有3种类型的权限:Read、Write和eXecute,用字母r、w和x表示。
权限通过等号赋予(=r、或=rw、或=rx),或者通过加号(+r或+rwx)或减号(-w或-rwx)。
3.如何敲入命令?
对于大多数CGI程序,我想让所有人都有读和执行的权限,但没有写的权限,因此没有人可以删除或编辑我的程序。下面是最常见的命令:
chmod a+rx filename.cgi
表示让所有人有读和执行的权限。当我创建一个文件时,我拥有完全的读、写和执行权限,但其他人没有任何权限。这个命令让所有人可以运行我的程序。
在myfolder文件夹中试试这个例子:
入ls -l然后按回车。显示出关于practice.txt的很多信息,包括大小、拥有者和最后保存的日期。
观察访问权限,可能是这样:rwx------或rw-r--r--或rw-r-----,前3个指明user权限(读、写、执行)。然后的三个是group权限(无),最后的三个为other权限(无)。
敲入chmod a+rx practice.txt然后按回车 - 为所有类别增加读和执行权限。
敲入ls -l然后按回车 - 这时显示的权限为rwxr-xr-x,指明拥有者仍然拥有所有权限,group和others有读和执行权限,但没有写的权限。
敲入chmod go-x practice.txt然后按回车。
敲入ls -l然后回车 - 现在的权限为rwxr--r--,指明拥有者仍有完全的权限,group和others只有读的权限。
删除myfolder文件夹
敲入rm practice.txt然后按回车。
敲入cd ..
敲入rmdir myfolder
第三页:定位Perl和sendmail
定位Perl程序
每个Perl程序指明Perl在系统中的位置。于是外部的网页可以知道执行什么程序和去哪找它。
从命令行提示符敲入which perl然后按回车。
系统
返回类似这样的结果:
/usr/bin/perl
或
/usr/local/bin/perl
记下这个结果,这是你的系统中Perl的位置,以后会用到。
如果系统没有返回结果,再试试:
敲入whereis perl然后回车。
如果还没有得到Perl的路径,需要给你的系统管理员发一封EMAIL。
定位sendmail程序
敲入whereis sendmail,然后按回车。
会返回几个结果,其中一个以sendmail结尾。例如,我在我的系统上得到的结果是:
sendmail: /etc/sendmail.cf /etc/sendmail
/etc/sendmail.
st /usr/lib/sendmail.no_mx /usr/lib/sendmail.mx /usr/lib/sendmail
/usr/lib/sendmail.hf /usr/man/man8/send
以/usr/开始sendmail结束的是:/usr/lib/sendmail,这是我们要记下的。
如果你在定位Perl程序或sendmail程序时遇到问题,应该email给你的系统管理员,询问正确的路径。(待续)