LINUX与UNIX SHELL编程指南029.pdf
《LINUX与UNIX SHELL编程指南029.pdf》由会员分享,可在线阅读,更多相关《LINUX与UNIX SHELL编程指南029.pdf(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、下载第29章 cgi 脚 本现在差不多每个人的 P C上都安装了We b服务器,在这样一本关于 s h e l l编程的书中似乎很有必要包含一章关于c g i脚本的内容。本章包含以下内容:基本c g i脚本。使用服务器端内嵌(Server Side Includes,SSI)。get方法。post方法。创建交互式脚本。能够自动重载We b页面的c g i脚本。运行We b服务器并不一定需要有网络环境,可以在本地主机上运行它。这里,我们假定你已经安装了We b服务器(a p a c h e、C e r n等等)以及浏览器(N e t s c a p e、Internet Explorer等等)。
2、另外,该服务器应当允许运行 c g i脚本。一般来说缺省值是禁止运行 c g i脚本的,要运行,只要将配置文件中相应的一行注释掉即可。后面我们会更详细地讨论这一问题。如何安装并配置 We b服务器已经超出了本书的讨论范围,不过我认为只需 2 0分钟就可以安装并运行一个 We b服务器。本章中的例子运行于 apache We b服务器下,我所使用的浏览器为N e t s c a p e。本章不打算深入探讨有关H T M L或We b的细节问题,因为市面上已经有大量关于这方面的书籍。另外,如果要深入探讨H T M L的话,还要花费数章的笔墨。29.1 什么是Web页面?We b页面或文挡是包含有H
3、 T M L标记的文件。当浏览器连接到一个 We b页面上时,浏览器就会根据相应的H T M L标记来显示该页面。We b页面中可以含有非常丰富的信息,它可以包含指向其他页面的链接、各种色彩、高亮标题、各种字体、直线、表格,还可以包含图像和声音。We b页面可以分为两类:动态的页面和静态的页面。静态的页面是用于显示信息或下载文件。而动态的页面是交互型的,它们可以按照你所提供的信息产生相应的结果。动态页面还可以用于显示实时变化的信息,如股票价格,或用于完成某些监视任务。如果想要执行这种类型的处理,就需要编写脚本。如果一个We b服务器能够交换信息脚本,那么它必须支持一种被称为公共网关接口的协议,
4、即大家所熟悉的c g i。29.2 cgic g i是一种规范,它规定了获取信息的脚本如何从服务器中取得信息或向服务器中写入信息。这种脚本或 c g i脚本可以用任何语言来实现。最为流行的是 P e r l语言,不过你将会发现,也可以用普通的s h e l l脚本来实现(见图2 9-1)。图29-1 浏览器和服务器可以通过cgi来交换信息29.3 连接Web服务器可以使用统一资源定位符(U R L)连接We b服务器。U R L包含两部分信息:协议。地址和数据。其中,协议包括h t t p、f t p、m a i l t o、f i l e、t e l n e t和n e w s。这里我们只关
5、心h t t p协议(超文本传输协议)。地址一般是D N S域名或服务器主机名,也可以是 I P地址。其他数据可以是你所要访问文件的实际路径名。所有的连接都基于T C P协议之上,缺省的端口号为8 0。如果We b服务器在你的本地主机上,而相应的主页为 i n d e x.h t m l,那么可以使用下面的U R L:h t t p:/l o c a l h o s t/i n d e x.h t m l一般来说,i n d e x.h t m l是缺省下载的文件,即该页面是你的 We b服务器的缺省页。这样,你可以只输入如下的U R L:h t t p:/l o c a l h o s t/
6、29.4 cgi和HTM脚本当浏览器发出下载页面的请求时,We b服务器将会对收到的 U R L进行分析。如果其中含有c g i-b i n,服务器将打开一个连接,通常是连接相应 c g i脚本的管道。该c g i脚本所有的输入输出都将通过该管道。如果该 c g i脚本用于显示 We b页面,那么它的输出中必须要包含必要的H T M L标记,这样该页面才能够按照服务器所能够理解的格式被显示出来,因此我们有必要了解一些H T M L的知识。We b服务器将该页面返回给发出请求的浏览器显示出来。表 2 9-1列出了一些常用的H T M L标记。29.4.1 基本cgi脚本所有的c g i脚本都应当
7、位于We b服务器的c g i-b i n目录中,不过在不同的服务器中该目录会有所不同。可以通过查看配置文件 s r m.c o n f中S c r i p t A l i a s一段来改变该目录的位置,并允许该服务器运行 c g i脚本。所有的脚本文件名都应以.c g i做后缀。而其他 We b页面都位于 h t m l或h t d o c s目录下,并且带有.h t m l后缀。所有的脚本都应具有这样的权限。chmod 755 script.cgi所有We b页面连接的缺省用户身份为 n o b o d y,不过可以通过配置 h t t p d.c o n f文件来改变这326第五部分 高
8、级s h e l l编程技巧下载用户使用浏览器连接Web页面Web服务器(apache?)cgi脚本获取信息,进行处理后返回结果一设置。尽管我曾经说过本章并不是关于 We b服务器配置的,不过正好可以借这个机会检查一下p a s s w d文件,看看n o b o d y用户的登录是否被禁止。如果想防止任何用户以 n o b o d y的身份从某一个物理端口上登录,只要在/e t c/p a s s w d文件中该用户口令域的第一个字符前面加入一个星号*即可。表29-1 基本H T M L标记 H T M L文挡的开头和结束 标题部分的开头和结束 主题的开头和结束 页面部分的开头和结束 不同层
9、次的标题,1代表最大的字体 段落的开头和结束换行水平线 预定义格式文本的开头和结束,其中的所有跳格、行都保持原样。黑体 斜体 有序号的列表link超文本链接 表单M E T H O Dp o s t或g e t方法A C T I O N地址数据输入N A M E变量名S I Z E以字符计的文本框的宽度T Y P E复选框、单选框、复位、提交下拉式菜单N A M E变量名S I Z E要显示的列表的项数将用户选择的值返回给N A M E变量结束列表框如果脚本不能正常工作,应当首先查看错误日志,因为所有的错误都记录在这些日志中。如果使用a p a c h e作为We b服务器,那么相应的日志文件
10、位于/e t c/h t t p d/l o g s或/u s r/l o c a l/a p a c h e/l o g s目录下,这取决于We b服务器的安装路径。c g i脚本可以在命令行方式下运行测试,当然这时只能看到文本形式的输出,但是这种输出结果有助于调试该脚本。现在我们就来创建一个c g i脚本。把下面的内容输入到一个名为 f i r s t p a g e.c g i的文件中,并保存在c g i-b i n目录下。不要忘记该文件应当具有权限 7 5 5。第29章cgi 脚本327下载如你所知,第一行表示s h e l l解释器的路径。第一个e c h o命令行告诉服务器这是一个
11、 M I M E题头;第二行e c h o命令行用于显示一个空行。如果在 M I M E题头后面没有一个空行,c g i脚本的输出将无法正确显示。接着,e c h o命令输出了一个标记,它告诉浏览器整篇文挡应以 H T M L格式显示。H T M L文挡可以显示从最大的 到的若干种不同字体。为了不过于费眼,是通常可接受的最小字体。这里我们把文字居中,这样看起来更舒服一些。接下来,我们显示一条水平线。最后,我们用 字体和标记居中显示了这样一行:“Stand-By ToS t a n d-To”,该脚本的输出以标记结束。如果忘记了某一个结束标记,不要紧你会很快发现这一点,因为在你试图浏览该页面时,
12、一些标记将会在浏览器中显示出来。现在如果想浏览该页面,可以在浏览器的 U R L框中输入这样一行:h t t p:/y o u r _ s e r v e r/c g i-b i n/f i r s t p a g e.c g i输入时用实际的服务器名来替代上面一行中的 y o u r _ s e r v e r。如果你的机器已经联网,而你得到“D N S查找失败”的错误提示,那可能是由于浏览器在I n t e r n e t上查找你刚刚编写的页面。不妨查看一下浏览器的连接选项;它可能设置为忽略本机代理,在此处键入主机名并重新运行浏览器即可。图2 9-2显示了我们刚刚编写的页面。图29-2 脚
13、本firstpage的输出29.4.2 显示shell命令输出现在我们在脚本中加上一条s h e l l命令,这样就可以在浏览器中显示该命令的输出。我们将显示当前登录的用户数,这通过将 w h o命令的输出经管道传递给 w c命令就可以实现。还将显示当前的日期。328第五部分 高级s h e l l编程技巧下载在这个脚本的开头,我们取得了当前的日期和连接数。日期居中显示。变量 U S E R S也被显示出来。通过一个i f语句来判断用户数是否少于1 0,如果是,则显示这样的信息“现在还早或现在是晚餐时间”。标记保留其间的所有空格和跳格。如果希望显示系统命令的输出,如用 d f命令显示文件系统的
14、情况,或只是使用简单的 e c h o命令,那么应当使用 标记。在本例中我本来没有必要使用标记,但我想我还是应该及早介绍它的这种应用,这样即使读者今后遇到这样的问题,也不会感到迷惑。要显示该页面,可以使用如下的 U R L:h t t p:/y o u r _ s e r v e r/c g i-b i n/p a g e t w o.c g i输入时用实际的服务器名来替代上面一行中的 y o u r _ s e r v e r。图2 9-3显示了刚才编辑的页面。图29-3 脚本pagetwo.cgi的输出第29章cgi 脚本329下载29.4.3 使用SSI使用c g i脚本产生一个We b
15、页面并显示少量信息有点杀鸡用牛刀。例如我们用 c g i脚本产生了一个页面而仅仅是为了显示当前日期。如果我们能够把 c g i脚本嵌入到H T M L文挡中,让该脚本的输出显示在普通的页面中岂不更好?这样做是可行的,下面我们就将讨论这一内容。为了内嵌c g i脚本,我们必须使能服务器端内嵌(S S I)。这样,在显示一个页面时,它将会把S S I命令替换为相应命令或脚本的输出。一些含有服务器和命令信息的特殊环境变量也是全局可见的。为了让服务器能够知道替换文挡中的相应 S S I命令,需要使能 S S I,应当去掉配置文件中含有s e r v e r-p a s s e d的一行开头的注释符,在
16、a p a c h e上是这样的:需要重新启动We b服务器软件,使用 kill-1命令使该服务器重新读入配置文件。含有 S S I的页面应当具有后缀.s h t m l,而不是.h t m l。29.4.4 访问计数器现在让我们来创建一个能够显示访问次数的页面。你肯定见过类似的页面:“你是第n个访问本站点的用户”。我们还将显示该页面的最新更改时间。不要忘记将下面的脚本放置在c g i-b i n目录中,起名为h i t c o u n t.c g i。如你所见的,该脚本读入./c d i-b i n/c o u n t e r文件中的值并将其赋给变量a c c e s s,将该变量加1,显示
17、该变量,最后将新的值写回到./c g i-b i n/c o u n t e r文件中。现在我们创建一个名为 c o u n t e r的文件。我们只需在其中放置一个初始值,这里我们取 1。于是,操作步骤为:创建一个名为 c o u n t e r的文件并写入1(不要加引号),然后保存并退出。由于每个用户都需要使用该文件,文件属主、同组用户及其他用户都应对其具有读和写的权限。$chmod 666 counter现在还需要在We b根目录下(该目录通常是放置所有其他H T M L文挡的地方,一般是h t d o c s或h t m l目录)创建一个相应的.s h t m l文件。下面就是该文件,
18、千万不要忘记带.s h t m l:330第五部分 高级s h e l l编程技巧下载在使用S S I时L A S T _ M O D I F I E D变量及其他变量是全局可见的。可以通过访问 a p a c h e的We b站点(w w w.a p a c h e.o rg)得到所有在使用S S I时全局可见的特殊变量的详细描述。我们来看下列的S S I命令:它的一般形式为:在本例中,c g i脚本h i t c o u n t是这样运行的:命令是e x e c。参数为c g i。其中的v a l u e是要运行的脚本。我已经改变了配置文件,把这个页面作为主页,而不是 i n d e x.
19、h t m l。不过你仍然可以通过在U R L中使用全路径来访问i n d e x.h t m l页面。图29-4 含有点击计数器的页面第29章cgi 脚本331下载如果想改变缺省页,可以编辑s r m.c o n f文件。该文件中含有这样一行:D i r e c t o r y I n d e x你会看到文件名i n d e x.h t m l显示在该条目中。把它改成所希望的缺省页即可。不要忘记关闭并重新启动We b服务器以使该改动生效。要访问该脚本,可以在浏览器的U R L框中输入:h t t p:/m a i n.s h t m l或h t t p:/(如果该页面是缺省页的话)。图2 9
20、-4显示了刚才创建的页面;可以刷新该页面观察计数器的增加。注意,L A S T _M O D I F I E D变量的值也被显示出来。可以通过在c r o n中加入一行,每天夜里向c o u n t e r文件中写入1来复位该计数器的值。29.4.5 使用一个链接来显示当前Web环境变量在执行c g i脚本时,有若干环境变量可用。可以通过 e n v或s e t命令看到绝大多数的变量。我们在m a i n.s h t m l文挡中创建一个指向相应c g i脚本的链接,该脚本能够显示这些变量。下面是我们使用的链接:Environment其中A HREF是链接标记的头。相应的地址包含在双引号中。单
21、词 E n v i r o n m e n t是要显示出来的单词,用户将点击这里。是链接标记的尾。下面就是m a i n.s h t m l文挡:下面是被调用的脚本 p r i n t e n v.c g i,它使用 e n v命令显示环境变量。在这里,我们使用标记来保持该命令输出中的空格和跳格不变。332第五部分 高级s h e l l编程技巧下载图2 9-5显示了该页面。图29-5 含有显示环境变量链接的页面图29-6 显示当前环境变量的页面第29章cgi 脚本333下载当你点击该链接时,将会显示出当前的环境设置(见图2 9-6)。你在自己机器上所看到的可能与此有所不同。在运行不同的脚本时
22、,一些相应的环境变量值将会随之改变。29.4.6 其他常用的环境变量表2 9-2列出了最常用的c g i环境变量。其中有些变量可以用e n v或s e t命令显示出来。表29-2 常用的cgi We b服务器变量DOCUMENT ROOTWe b服务器的主目录,是放置H T M L文挡的地方G AT E WAY _ I N T E R FA C Ec g i的版本H T T P _ A C C E P T可接受的各种M I M E类型H T T P _ C O N N E C T I O N缺省的H T T P连接H T T P _ H O S T本地主机名H T T P _ U S E R
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINUX与UNIX SHELL编程指南029 LINUX UNIX SHELL 编程 指南 029
限制150内