通用网关接口
Common Gateway Interface
FORM表单
每个标签都有name属性,这个属性是为服务器准备的
action属性:对表单进行处理需要有一个程序,这个属性就是URL地址
method属性:或者是get,或者是post
enctype属性:如果不想在发送这个表单时包括上一个文件,就可以省略这个属性
INPUT标签
定义了客户输入的类型,输入数据的格式和行为由type属性控制,type属性包括8种:
text 浏览器将显示一个单行的输入框,name属性给这个输入框起个名字,当这个表单在服务器上被处理的时候就会用到这个名字
size属性给出这个输入框显示的宽度,maxlength设定了这个输入框最大的输入长度,如果这个值大于size,输入框会随用户的输入而卷动
value属性给出了这个输入框中省略的字符串
password 与text用法一样<input type=text name=fuck size=15 maxlength=10 value=furong>
hidden 输入框不会出现在浏览器,这类输入框供服务器使用
checkbox 允许用户从一组选项里选择几项.几个name属性相同的选择框将被划分为一组,而浏览器将允许用户从一组同名的选择框里进行选择<input type=hidden name=fuck value=furong>
checkbox比其他输入框多一个checked属性,作用是提供缺省的选择,缺省选择可以用多个,value属性用来把信息返回服务器
<input type=checkbox name=fuck value=1> <input type=checkbox name=fuck value=2> <input type=checkbox name=fuck value=3>
radio 与checkbox很相似,但每次只允许选择一项
image 允许用户从一副图选择一个(x, y)坐标,返回给服务器的输入数据域映射图的形式差不多,已经很少有人用了
因为映射图办法的效果更好
submit 显示一个按钮.当这个按钮被选中的时候,表单的内容将被传递到服务器去进行处理
reset 使浏览器窗口里显示一个按钮.当这个按钮被选中的时候,表单元素会被重新置为表单第一次被加载的初始值
不会引起与服务器的互动
select标签
允许用户从一系列值里进行选择,它的属性包括name,multiple和size
name 属性和往常一样用来给将返回到服务器的信息起名字
multiple 属性允许一个以上的选项被选中,但用户每次见到只有一个.少用
size 属性定义了能够被选取的项目个数,缺省值是1
textarea标签
允许用户输入并向服务器返回多行文字.附加属性rows(行)和cols(列)属性
浏览器会根据rows和cols的值来显示一个文本区,超出这个区域加上一个卷动条
编写CGI程序
基本上用c语言.但用shell/Tcl或者最时髦的perl都没问题
method属性
get方法主要用来处理那些"没有副作用"的表单,即那些服务器提出一个简单查询的表单
post方法则用来处理那些可能会在服务器上引起某些变化的复杂表单
环境变量
不管你用哪种方法来传递表单信息,有几个重要信息都是以环境变量的形式传递给CGI程序
变量名 说明 SERVER_SOFTWARE 与接收请求并调用程序的那个服务器软件有关的资料 SERVER_NAME 服务器的主机名或IP地址 GATEWAY_INTERFACE 服务器上实现的CGI标准的版本号 SERVER_PROTOCOL 接收来自客户的请求时使用的协议的版本号 SERVER_PORT 接收到请求的端口号,一般为80 REQUEST_HETHOD 提出请求的方法,即get或post PATH_INFO 关于cgi程序路径的附加信息 PATH_TRANSLATED cgi程序的物理路径 SCRIPT_NAME 正在执行的脚本程序的名字 REMOTE_HOST 提出这一请求的计算机主机名字 REMOTE_ADDR 提出这一请求计算机主机的IP地址 AUTH_TYPE 如果服务器支持用户验证身份,就要用到这两个变量 HEMOTE_USER REMOTE_IDENT 远程用户的用户名.很少用 CONTENT_TYPE 正被传输的信息的内容类型 CONTENT_LENGTH 传给程序的数据的字节数.当以post方式读取输入的时候,最好利用这个变量来识别结束字符流的null字符或文件尾标志 当method=get时,不允许设置CONTENT_TYPE和CONTENT_LENGTH变量
第一个cgi程序
写下"Content-type:text/plain",加上一个空行
#!/bin/sh echo Content-type:text/plain echo echo SERVER_SOFTWARE=$SERVER_SOFTWARE echo SERVER_NAME=$SERVER_NAME echo GATEWAY_INTERFACE=$GATEWAY_INTERFACE echo SERVER_PROTOCOL=$SERVER_PROTOCOL echo SERVER_PORT=$SERVER_PORT echo REQUEST_HETHOD=$REQUEST_HETHOD