首页 | 麦客学吧 | 视频教程 | FLASH小游戏 | 素材下载 | 常用工具
您当前的位置:首页 > 程序开发 > CGI > 正文

CGI教学:第一章 cgilib例

出处:麦客学吧 [2006-2-18 20:51:36] 来源:PConline 作者:flamephoenix 点击数:731

讨论交流:http://x8.maicoo.com/team/58.html

一个简单的读取并处理表格请求数据的cgilib.pl例子:

#!/usr/bin/perl

sub readGetData{ 
# 指定局部变量queryString用以保存和传递函数的参数 
local(*queryString) = @_ if @_; 
# 读取环境变量QUERY_STRING的值赋给变量$queryString 
$queryString = $ENV{"QUERY_STRING"}; 
return 1;
}

sub readPostData{ 
local(*queryString)=@_ if @_; 
local($contentLength); 
# 读取环境变量CONTENT_LENGTH的值 
$contentLength = $ENV{"CONTENT_LENGTH"}; 
# 检查是否有数据 
if($contentLength){ 
# 从设备STDIN读取contentLength长度的字符赋给$queryString 
read(STDIN,$queryString,$contentLength); 

return 1; 


sub readData{ 
local(*queryString) = @_ if @_; 
# 读取环境变量REQUEST_METHOD 
$requestType=$ENV{"REQUEST_METHOD"}; 

# 如果请求方式为GET则使用函数readGetData 
# 否则如果请求方式为POST则使用函数readPostData 
if($requestType eq "GET"){ 
&readGetData(*queryString); 

elsif($requestType eq "POST"){ 
&readPostData(*queryString); 

return 1; 


sub DecodeData{ 
local(*queryString)= @_; 
# 把加号转换成空格 
$queryString=~s/\+/ /g; 
# 转换十六进制字符 
$queryString=~s/%(..)/pack("c",hex($1))/ge; 
return 1; 


sub parseData{ 
local(*queryString,*formData) = @_ if @_; 
local($key,$value,$curString,@tmpArray); 

# 以&为分隔符把字符串转换成键-值对 
@tmpArray = split(/&/,$queryString); 

# 在数组@tmpArray内循环 
foreach $curString(@tmpArray){ 
# 以=为分隔符分开键-值对 
($key,$value) = split(/=/,$curString); 
# 解码 
&DecodeData(*key); 
&DecodeData(*value); 
# 把键和值加到字典中 
$formData{$key}=$value; 

return 1; 


1;
#end of file cgilib.pl 

使用方法:

要使用此库需含下列语句:
#require "cgilib.pl";
表格数据处理:
%dataDict=();
&readData(*data);
&parseData(*data,dataDict);
字典数据处理: 
while(($key,$value)=each(%dataDict)){ 
print $key,"=",$value,"\n\n";
}

【责任编辑: lanier

关于 CGI教学:第一章 cgilib例 的相关文章
素材中心
麦客酷站赏析频道

精彩图文推荐

关于本站 - 联系站长 - 广告服务 - 合作伙伴 - 网站地图 - 版权声明 - 报告错误 - 收藏本站 | Http://www.MaiCoo.com

Copyright © 2005 - 2008 MaiCoo.com All Rights Reserved

违法和不良信息举报中心 本站服务器空间和带宽由雷克斯网络提供赞助
浙ICP备06017818号