<A HREF="http://www.popchina.com/cgi-bin/getdate">Display the Date</A>说明是个CGI脚本是因为这里面有个cgi-bin的路径. 在许多服务器cgi-bin是仅能够放置CGI脚本的目录. 当你选择这个连接时, 你的浏览器将向www.popchina.com服务器提出请求. 服务器接收这个请求计算出URL处的脚本文件名然后执行这个脚本. 这个getdate脚本, 在UNIX系统中执行是这样的:
#!/bin/sh echo Content-type: text/plain echo /bin/date第一行是个特殊的命令,告诉UNIX系统这是个shell脚本; 真实的情况是从这行开始的下一行,这个脚本做两件事:它输出行Content-type: text/plain, 接着开始一个空行;第二, 它调用UNIX系统时间date程序, 这样输出日期和时间. 脚本执行后输出应该这样:
Content-type: text/plain Tue Oct 25 16:15:57 EDT 1994这个Content-type是什么东东?它是个特殊的编码,Web服务器用来告诉浏览器输出这个文本是什么类型的. 这与HTML中Content-type含义是一样的。 这样浏览器的输出就如图3. [b][url=http://www.banqiao.org/writing/cgi/19twp03.gif]图3 date脚本输出结果.[/url][/b] 这是最基本的,实际情况要复杂得多,总之可以用来理解浏览器、服务器和脚本之间是怎样工作的。
<A HREF="http://www.popchina.com/cgi-bin/pinglaura">Is Laura Logged in?</A>这是没有输入的脚本,它只运行并且返回数据. 根据前面的阐述,这个脚本内容是这样:: #!/bin/sh echo Content-type: text/html echo "<HTML><HEAD>" echo "<TITLE>Is Laura There?</TITLE>" echo "</HEAD><BODY>" 为了测试我是否已经登陆系统,用who命令(我的登陆名假设为lemay), 储存结果在变量ison中. 如果我登陆, 变量ison将有些内容,否则则是空的.
ison='who | grep lemay'试验结果及返回相应提示的脚本是这样:
if [ ! -z "$ison" ]; then echo "<P>Laura is logged in."</P> else echo "<P>Laura isn't logged in."</P> fi最后关闭HTML:
echo "</BODY></HTML>"现在你通过从命令行运行他,测试一下,你将得到一个结果说我未登陆你的系统,当然不可能的,他的输出是这样的:
Content-type: text/html <HTML><HEAD> <TITLE>Are You There?</TITLE> </HEAD><BODY> <P>Laura is not logged in. </BODY></HTML>这是输出的一个HTML文本,这样你的浏览器能正常显示他,因为他是个HTML文件。
#!/bin/sh echo "Content-type: text/html" echo echo "<HTML><HEAD>" echo "<TITLE>Is Laura There?</TITLE>" echo "</HEAD><BODY>" ison='who | grep lemay' if [ ! -z "$ison" ]; then echo "<P>Laura is logged in" else echo "<P>Laura isn't logged in" fi echo "</BODY></HTML>"
#!/bin/sh echo "Content-type: text/html" echo echo "<HTML><HEAD>" echo "<TITLE>Are You There?</TITLE>" echo "</HEAD><BODY>"在上面的例子中, 下一步应该是测试我是否登陆,在这里我们用参数${1}代替我的名字lemay, ${1}作为第一个参数, ${2}作为第二个, ${3}作为第三个.
ison='who | grep "${1}"'if [ ! -z "$ison" ]; then echo "<P>$1 is logged in" else echo "<P>$1 isn't logged in" fi
echo "</BODY></HTML>"好了,让我们修改HTML页中的连接吧!原来是这样:
<A HREF="http://www.lne.com/cgi-bin/pinglaura">Is Laura Logged in?</A>修改为通用查询功能后是这样,比如查询名字叫john的人是否登陆:
<A HREF="http://www.lne.com/cgi-bin/pinggeneric?john">Is John Logged in?</A>在你的服务器上试试,看是否有结果。 [center]
<FORM METHOD=POST ACTION="../cgi-bin/form-name"> </FORM>如果你在用uncgi从input中解码, 情况有点不同. 为了是uncgi正常工作, 你首先必须调用uncgi , 如果uncgi是个目录,加上实际的脚本名, 象这样:
<FORM METHOD=POST ACTION="../cgi-bin/uncgi/form-name"> </FORM>这样,你不必修改表单中原始的HTML; 原始的HTML可以工作得很好. [center]
echo Content-type: text/html echo echo "<HTML><HEAD>" echo "<TITLE>Hello</TITLE>" echo "</HEAD><BODY>" echo "<P>"接下来,有两种情况要处理:一件是处理用户不输入名字的情况,一个是如果输入了向他们说hello. 这个Name元素的值, 是包含在WWW_theName环境变量中. 用一个简单的测试命令(-z), 你能查看环境变量是否是空的还是包括相应的输出值:
if [ ! -z "$WWW_theName" ]; then echo "Hello, " echo $WWW_theName else echo "You don't have a name?" fi最后增加一个连接"go back" . 用来返回:
echo "</P><P><A HREF="../lemay/name1.html">Go Back</A></P>" echo "</BODY></HTML>"
require 'cgi-lib.pl';cgi-lib中尽管有很多子程序, 最重要的是ReadParse子程. ReadParse 读取输入方便地将name/value储存在一个Perl阵列中. 在你的Perl脚本中通常是这样调用的:
&ReadParse(*in);此例中,阵列名是in, 可以随便取名的. 在表单输入解码后, 你能读取和处理这个name/value,方法是象下面这样:
print $in{'theName'};这个将显示名字name是theName的值value.
如果你有多个用同样名字的name对, cgi-lib.pl用(\0)分隔多个名字. 这样可以正常处理你的脚本.
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有