1. 简介
CGICC是一个C++语言实现的开源CGI库,采用LGPL授权协议,使用较为简单。
CGICC官网:http://www.gnu.org/software/cgicc/,截止2015/3/14,CGICC最新稳定版本为3.2.16,下载地址是:http://ftp.gnu.org/gnu/cgicc/cgicc-3.2.16.tar.gz,最新更新时间为2014/12/7(令人惊讶和欣慰的是作为古老的CGI,CGICC还在不断的更新)。
2. CGICC组成
CGICC由两大部分组成:
1) CGI输入处理子模块
2) HTML输出子模块
本文暂只介绍CGI输入处理子模块,对于HTML输出,推荐Google开源的ctemplate(https://github.com/OlafvdSpek/ctemplate)。
3. CGI输入处理子模块类结构
CGICC的一类,通常直接在CGI的入口函数,如main函数中定义一个CGICC对象,然后即可使用CGICC提供的各种能力。
3.2. CgiEnvironment
提供get系列方法取各环境变量的值。
3.3. HTTPCookie
提花get系列方法取各Cookie的值,并支持set新增或修改Cookie值。
3.4. CgiInput
CgiEnvironment内部类,仅供CgiEnvironment使用。
3.5. FormFile
提供访问HTML的Form中的被上传文件信息和数据接口。
3.6. FormEntry
提供访问HTML的Form中的非被上传文件类的信息和数据接口。
取URL参数值示例:
// http://127.0.0.1/?param_name=param_value cgicc::form_iterator iter = cgi.getElement("param_name"); if (iter != cgi.getElements().end()) { std::string param_value = iter->getValue(); }
// 也可以这样做: std::string param_value = cgi("param_name");
// 除此之外,FormEntry还提供了直接取指定数据类型的参数值,如:getIntegerValue、getDoubleValue |
4. CGI输入处理子模块初始化流程
初始化流程是由Cgicc构造函数触发的,一般可在CGI的main函数中定义一个Cgicc对象:
5. 编译和安装CGICC
详细编译步骤如下:
1) 将CGICC源代码包(本文下载的是cgicc-3.2.16.tar.gz)上传到Linux某目录(本文将CGICC源代码包cgicc-3.2.16.tar.gz上传到/tmp目录);
2) 登录Linux,并进入目录/tmp;
3) 解压CGICC源代码包cgicc-3.2.16.tar.gz:tar xzf cgicc-3.2.16.tar.gz;
4) 解压后,会在/tmp下产生一个子目录cgicc-3.2.16,进入到这个子目录;
5) 然后执行configure命令(本文指定的安装目录为/usr/local/cgicc-3.2.16,可以根据需要设定为其它目录),以生成Makefile编译文件,如果要在共享库中使用CGICC,请使用下列编译命令:
./configure --prefix=/usr/local/cgicc-3.2.16 CXXFLAGS=-fPIC LDFLAGS=-fPIC |
否则,可按如下命令编译:
./configure --prefix=/usr/local/cgicc-3.2.16 |
在一些环境上,如果不带-fPIC编译静态库,使用静态库时,就会报链接错误。
6) 执行make编译:make
7) 安装CGICC库:make install
8) 为/usr/local/cgicc-3.2.16建立不带版本号的软链接:
ln -s /usr/local/cgicc-3.2.16 /usr/local/cgicc |
至此,CGICC库就安装好了!
6. CGICC使用示例
6.1. 页面效果
6.2. HTML文件
页面效果对应的HTML文件内容如下
(HTML中的id一般是给前端如js使用的,而name通常是给服务端如CGI使用的):
upload
upload: form action="/cgi-bin/upload.cgi" method="post" name="formname" enctype="multipart/form-data">
|