⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cgi跟我学.htm

📁 很经典的CGI编程入门读物
💻 HTM
📖 第 1 页 / 共 5 页
字号:
只要你的脚本遵守下一节所陈列的规则即可,只要那个语言能在你的Web服务器系统上运行. 
<P></P>
<CENTER>在这本学习手册中,仅用两种语言编写<B 
style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">CGI</B>脚本: UNIX shell和 
Perl语言. 这个shell是适合在任何相近的UNIX系统上运行并且容易学习, 但是处理复杂的情况就困难了. Perl, 就要用这个语言了, 它是免费的, 
这个语言是稳定和强大的,类似C,但它也是较难学习的. </CENTER>
<CENTER>
<H4><A id=I10 name=I10 
_base_href="http://www.jdon.com/idea/cgi.htm"></A><B><FONT 
size=+0>你的服务器设置正确了吗?</FONT></B></H4></CENTER>为了运行任何一个<B 
style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">CGI</B>脚本, 
不管简单或复杂的,你的服务器必须设置成能够运行他们,必须放置在一个特定的目录,必须有一个依赖你服务器设定的文件扩展名. 
<P>如果你是租用服务器,就要是否允许运行<B 
style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">CGI</B>脚本. </P>
<P></P>
<CENTER>如果你拥有自己的服务器,检查你的服务器说明书是怎样处理<B 
style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">CGI</B>脚本的. </CENTER>
<CENTER>
<H4><A id=I11 name=I11 
_base_href="http://www.jdon.com/idea/cgi.htm"></A><B><FONT 
size=+0>如果你用的不是UNIX?</FONT></B></H4></CENTER>
<CENTER>只好再找别的学习手册了。 </CENTER>
<CENTER>
<H3><A id=I12 name=I12 
_base_href="http://www.jdon.com/idea/cgi.htm"></A><B><FONT size=+1>解剖一个<B 
style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">CGI</B>脚本</FONT></B></H3></CENTER>
<CENTER>如果你编写它很久,克服很多警告和<B 
style="COLOR: black; BACKGROUND-COLOR: rgb(160,255,255)">配置</B>,恭喜你,你已经会些<B 
style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">CGI</B>脚本,并且可以在你的网页上使用了. 
在这一章,将学习脚本是怎样执行,你的服务器又是怎样与他们对话产生回应的。 </CENTER>
<CENTER>
<H4><A id=I13 name=I13 
_base_href="http://www.jdon.com/idea/cgi.htm"></A><B><FONT 
size=+0>输出头部</FONT></B></H4></CENTER>虽然你的<B 
style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">CGI</B>脚本可以让你做任何事情,但是脚本的输出还是必须有一个规定形式. 
<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客$dObo5Hz$N</SPAN><BR>
<HR align=center>
<NOTE></NOTE>
<P>这个 "脚本输出" 意思是指你的脚本发回服务器的数据. 在UNIX系统中, 输出是发向标准输出, 服务器从那儿检测它. 在其他系统和服务器, 
你的脚本输出也许不一样了. <BR><SPAN style="DISPLAY: none">}4K3g6{'_P [0</SPAN> <SPAN 
style="DISPLAY: none">北京大学软件与微电子学院超级博客K0]&amp;y2xnh,g</SPAN><BR></P>
<HR align=center>

<P>这个头部是实际不是文本的一部分,是服务器与浏览器之间的信息协议,你实际看不到。 </P>
<P>有三个类型的头部: Content-type, Location, 和Status. Content-type 最普遍的。 </P>
<P>有关content-type解释可以见有关HTML的说明, 一个你可以发出的特定编码象这样: </P><PRE>Content-type: text/html</PRE>在这个例子中,输出数据的类型是text/html; 换句话说, 他是个HTML文件. 
<UL><LH></LH>
  <P><B>表1. 通用格式和content-types.</B> <BR><SPAN style="DISPLAY: none">{T\/Q 
  ^@-Pi-Y0</SPAN> </P></UL><SPAN 
style="DISPLAY: none">北京大学软件与微电子学院超级博客aU;cRz&amp;K</SPAN><BR>&nbsp; 
<TABLE border=1 _base_href="http://www.jdon.com/idea/cgi.htm">
  <TBODY _base_href="http://www.jdon.com/idea/cgi.htm">
  <TR _base_href="http://www.jdon.com/idea/cgi.htm">
    <TD _base_href="http://www.jdon.com/idea/cgi.htm"><PRE><B><I>Format</I></B></PRE></TD>
    <TD _base_href="http://www.jdon.com/idea/cgi.htm"><PRE><B><I>Content-Type</I></B></PRE></TD></TR>
  <TR _base_href="http://www.jdon.com/idea/cgi.htm">
    <TD _base_href="http://www.jdon.com/idea/cgi.htm">HTML</TD>
    <TD _base_href="http://www.jdon.com/idea/cgi.htm">text/html</TD></TR>
  <TR _base_href="http://www.jdon.com/idea/cgi.htm">
    <TD _base_href="http://www.jdon.com/idea/cgi.htm">Text</TD>
    <TD _base_href="http://www.jdon.com/idea/cgi.htm">text/plain</TD></TR>
  <TR _base_href="http://www.jdon.com/idea/cgi.htm">
    <TD _base_href="http://www.jdon.com/idea/cgi.htm">GIF</TD>
    <TD _base_href="http://www.jdon.com/idea/cgi.htm">image/gif</TD></TR>
  <TR _base_href="http://www.jdon.com/idea/cgi.htm">
    <TD _base_href="http://www.jdon.com/idea/cgi.htm">JPEG</TD>
    <TD _base_href="http://www.jdon.com/idea/cgi.htm">image/jpeg</TD></TR>
  <TR _base_href="http://www.jdon.com/idea/cgi.htm">
    <TD _base_href="http://www.jdon.com/idea/cgi.htm">Postscrīpt</TD>
    <TD 
  _base_href="http://www.jdon.com/idea/cgi.htm">application/postscrīpt</TD></TR>
  <TR _base_href="http://www.jdon.com/idea/cgi.htm">
    <TD _base_href="http://www.jdon.com/idea/cgi.htm">MPEG</TD>
    <TD 
_base_href="http://www.jdon.com/idea/cgi.htm">video/mpeg</TD></TR></TBODY></TABLE>
<P></P>
<CENTER>注意content-type 后面必须跟一个空行. 如果你没有空行,服务器将无法搞清这个头部在哪里结束。 </CENTER>
<CENTER>
<H4><A id=I14 name=I14 
_base_href="http://www.jdon.com/idea/cgi.htm"></A><B><FONT 
size=+0>输出数据</FONT></B></H4></CENTER>
<CENTER>你输出的数据应该符合你所规定的content-type; 如果content-type是text/html, 输出安置应该是在HTML. 
如果content-type是image/gif, 输出应该是在一个二进制的GIF文件. </CENTER>
<CENTER>
<H5><A id=I15 name=I15 
_base_href="http://www.jdon.com/idea/cgi.htm"></A><B><FONT size=+0>练习1: 
小试试.</FONT></B></H5></CENTER>T这是个简单的输出日期的简单脚本,这个<B 
style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">CGI</B>脚本还检查看看我是否已经登陆到我的Web服务器,并且报告发现了什么(如在图4). 

<P><IMG height=157 alt="19twp04.gif (15047 字节)" src="CGI跟我学.files/19twp04.gif" 
width=498 _base_href="http://www.jdon.com/idea/cgi.htm"> <BR><SPAN 
style="DISPLAY: none">&amp;UD5di;s4D:w Q0</SPAN> 这是个很简单的例子, 他能这样备调用: </P><PRE>&lt;A HREF="http://www.popchina.com/<B style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">cgi</B>-bin/pinglaura"&gt;Is Laura Logged in?&lt;/A&gt;</PRE>这是没有输入的脚本,它只运行并且返回数据. 

<P>根据前面的阐述,这个脚本内容是这样:: <BR><SPAN style="DISPLAY: none">H8R2f!|(P+B;}?0</SPAN> 
#!/bin/sh <SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客+h,n 
p%u?</SPAN><BR>&nbsp; </P>
<P>echo Content-type: text/html <BR><SPAN 
style="DISPLAY: none">@os-B,A-J;k/PPg0</SPAN> &nbsp; </P>
<P>echo "&lt;HTML&gt;&lt;HEAD&gt;" <SPAN 
style="DISPLAY: none">北京大学软件与微电子学院超级博客G ~-kZ]*i+U#EC X</SPAN><BR>&nbsp; </P>
<P>echo "&lt;TITLE&gt;Is Laura There?&lt;/TITLE&gt;" <SPAN 
style="DISPLAY: none">北京大学软件与微电子学院超级博客6fSim-]</SPAN><BR>&nbsp; </P>
<P>echo "&lt;/HEAD&gt;&lt;BODY&gt;" <SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客 
Z"U0Yt7g&amp;`0@</SPAN><BR>为了测试我是否已经登陆系统,用who命令(我的登陆名假设为lemay), 储存结果在变量ison中. 
如果我登陆, 变量ison将有些内容,否则则是空的. </P><PRE>ison='who | grep lemay'</PRE>试验结果及返回相应提示的脚本是这样: <PRE>if [ ! -z "$ison" ]; then<BR><SPAN style="DISPLAY: none">5ZI;}V_0</SPAN><BR><SPAN style="DISPLAY: none">(ME-{kk2P+a0</SPAN><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客Lx_X,ue\</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "&lt;P&gt;Laura is logged in."&lt;/P&gt;<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客/fV ZBnr,j</SPAN><BR><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客9M)U3bNIU%py1X8YL</SPAN><BR><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客GJ!LS(nP
\!b</SPAN><BR>else<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客/oI{V8{@</SPAN><BR><BR><SPAN style="DISPLAY: none">\#X7_1I/vCPX0</SPAN><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客]4Y
T/|N</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "&lt;P&gt;Laura isn't logged in."&lt;/P&gt;<BR><SPAN style="DISPLAY: none">1W;c8es+Kx9m {0</SPAN><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客ru%L9Q2k{Yr</SPAN><BR><BR><SPAN style="DISPLAY: none">(u
l
f
A q9]~Ne0</SPAN>fi</PRE>最后关闭HTML: <PRE>echo "&lt;/BODY&gt;&lt;/HTML&gt;"</PRE>现在你通过从命令行运行他,测试一下,你将得到一个结果说我未登陆你的系统,当然不可能的,他的输出是这样的: 
<PRE>Content-type: text/html<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客?;x,M?O8AF</SPAN><BR><BR><SPAN style="DISPLAY: none">,lbn su
J+FQ0</SPAN><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客.b,X8F6eOa</SPAN><BR>&lt;HTML&gt;&lt;HEAD&gt;<BR><SPAN style="DISPLAY: none">me4hh#~ |X0</SPAN><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客
~f/M dM0cv#K</SPAN><BR><BR><SPAN style="DISPLAY: none">oZ,Y$O2j?1q8a0</SPAN>&lt;TITLE&gt;Are You There?&lt;/TITLE&gt;<BR><SPAN style="DISPLAY: none">-hNc#D$PlJ0</SPAN><BR><SPAN style="DISPLAY: none">E!`J8d*e*I5c[AV0</SPAN><BR><SPAN style="DISPLAY: none">L
rLtk2C
wv$e0</SPAN>&lt;/HEAD&gt;&lt;BODY&gt;<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客WU+V	\xM3jl;_z</SPAN><BR><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客8po*W7dV6YF:k</SPAN><BR><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客
~`8\;l:Y8G!{k</SPAN><BR>&lt;P&gt;Laura is not logged in.<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客*j{,L4j$^mS3c/xy</SPAN><BR><BR><SPAN style="DISPLAY: none">d{6j}p#W B!w0</SPAN><BR><SPAN style="DISPLAY: none">'Uzj:L9vk,]wXE0</SPAN>&lt;/BODY&gt;&lt;/HTML&gt;</PRE>这是输出的一个HTML文本,这样你的浏览器能正常显示他,因为他是个HTML文件。 
<BR><SPAN style="DISPLAY: none">v#C;S+\k3Vu XD0</SPAN> &nbsp; 
<P></P>
<HR align=center>
<NOTE></NOTE>
<P>现在将他copy到你的服务器的<B 
style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">cgi</B>-bin目录下,去执行,如果你不能达到<B 
style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">CGI</B>-bin目录,你必须询问你的服务器管理者,你不能理所当然地自己建立个<B 
style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">CGI</B>-bin目录,那没用的。 
<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客?g%[_'~&amp;d 
jK*L/P(p!Z\</SPAN><BR><SPAN 
style="DISPLAY: none">北京大学软件与微电子学院超级博客H%YW`2i~~0n</SPAN><BR></P>
<HR align=center>

<P>这个例子完整的脚本如下: </P><PRE>#!/bin/sh<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客UA.A
mb([6d0C</SPAN><BR><BR><SPAN style="DISPLAY: none">/B,o/`\0[(Qy!so4}-v7|0</SPAN>echo "Content-type: text/html"<BR><SPAN style="DISPLAY: none">SRMQuOtN,MI0</SPAN><BR><SPAN style="DISPLAY: none">NZ'B~.fn#l3o0</SPAN><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客H*C9K%sjMfL</SPAN><BR>echo<BR><SPAN style="DISPLAY: none">kA-G+yj0</SPAN><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客*`9b+p)EW</SPAN><BR>echo "&lt;HTML&gt;&lt;HEAD&gt;"<BR><SPAN style="DISPLAY: none">Bm%Rtas#a#FQ0</SPAN><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客4~q7js$T
E&amp;ywQ#b</SPAN><BR>echo "&lt;TITLE&gt;Is Laura There?&lt;/TITLE&gt;"<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客yV/zy.FT</SPAN><BR><BR><SPAN style="DISPLAY: none">g0V^O/os~%H0</SPAN>echo "&lt;/HEAD&gt;&lt;BODY&gt;"<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客Zw]$n1Z4w;A8J5V</SPAN><BR><BR><SPAN style="DISPLAY: none">!hvF1tS+zN0</SPAN>ison='who | grep lemay'<BR><SPAN style="DISPLAY: none">J*o9Z cai9m-\k&amp;W0</SPAN><BR><SPAN style="DISPLAY: none">Pl#KNA*Gi
ecR0</SPAN>if [ ! -z "$ison" ]; then<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客)}2K
u'MC
@:U
cp</SPAN><BR><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客'p*G*I&amp;`J3Be7O</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "&lt;P&gt;Laura is logged in"<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客"z,]
n	Ma'Ow2K)ov(b:z</SPAN><BR><BR><SPAN style="DISPLAY: none">z4iUB~riM8WP&amp;A0</SPAN>else<BR><SPAN style="DISPLAY: none">,\xz|&amp;Q[Fes0</SPAN><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客TZj^5fv!O</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "&lt;P&gt;Laura isn't logged in"<BR><SPAN style="DISPLAY: none">0c}2[Z!]5V0</SPAN><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客-f"~v)d2[6g'C</SPAN><BR>fi<BR><SPAN style="DISPLAY: none">_Y%n;a4vr.m0</SPAN><BR><SPAN style="DISPLAY: none">3?&amp;Go1rO5hV0</SPAN>echo "&lt;/BODY&gt;&lt;/HTML&gt;"</PRE>
<CENTER>
<H4><A id=I16 name=I16 
_base_href="http://www.jdon.com/idea/cgi.htm"></A><B><FONT 
size=+0>带有参数的脚本</FONT></B></H4></CENTER>为了传递一个参数给脚本,可以在URL中使用 (?) 插入脚本名词和参数之间, 
用加号(+) 表示每个单一的参数, 如: <PRE>&lt;A HREF="/<B style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">cgi</B>-bin/myscrīpt?arg1+arg2+arg3"&gt;run my scrīpt&lt;/A&gt;</PRE>当服务器接收到这个请求,它传递 
arg1, arg2, 和 arg3 参数给脚本. 你然后能在脚本中使用这些参数. 
<P></P>
<CENTER>这个方法有时叫查询, 因为早期它用在搜索功能中. </CENTER>
<CENTER>
<H5><A id=I17 name=I17 
_base_href="http://www.jdon.com/idea/cgi.htm"></A><B><FONT size=+0>练习2: 
检查是否有人登陆.</FONT></B></H5></CENTER>既然你知道怎样使用参数,让我们继续上面的例子pinglaura,通过修改这个例子我们得到下面这个脚本pinggeneric. 

<P>我们取个不同题目: </P><PRE>#!/bin/sh<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客N9a$l0a!WlT9Xo</SPAN><BR><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客;n ~Is([8x V</SPAN><BR><BR><SPAN style="DISPLAY: none">l?5zZ
t"O9J!Lu0</SPAN>echo "Content-type: text/html"<BR><SPAN style="DISPLAY: none">9j.Q#U,\%]8H;RThv0</SPAN><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客2l0}-du~s|</SPAN><BR><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客,yD ?1B\`kj</SPAN><BR>echo<SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客5L;M;\w[+iC</SPAN><BR><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客T$rR}H</SPAN><BR><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客[o]]hs _5d	Z</SPAN><BR>echo "&lt;HTML&gt;&lt;HEAD&gt;"<BR><SPAN style="DISPLAY: none"> Rc"Z \1r'w0</SPAN><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客!R$w
mL-ZP:S</SPAN><BR><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客7pQ7JE8Zp4Ma
}</SPAN><BR>echo "&lt;TITLE&gt;Are You There?&lt;/TITLE&gt;"<BR><SPAN style="DISPLAY: none">
c;m4z3C4vde$[0</SPAN><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客,U
y,~+p7@Sb</SPAN><BR><SPAN style="DISPLAY: none">北京大学软件与微电子学院超级博客"p)cDEM</SPAN><BR>echo "&lt;/HEAD&gt;&lt;BODY&gt;"</PRE>在上面的例子中, 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -