• cgicc使用


    CgiCc 使用

    一、下载

    下载地址:

    http://ftp.gnu.org/gnu/cgicc/  
    ftp://ftp.gnu.org/gnu/cgicc/ 
    

    二、配置、编译、安装

    • 下载完成后解压:shell tar xzf cgicc-X.X.X.tar.gz
    • 进入解压的目录: ```shell cd cgicc-X.X.X/
    • 配置
    ./configure --prefix=/opt
    

    --prefix 参数指定安装目录,默认安装目录为/usr

    • 编译
    make
    
    • 安装
    make install
    

    三、例程

    3.1 如果在64bit平台编译32位库:

    CXXFLAGS="-m32" CFLAGS="-m32" LDFLAGS="-m32"
    

    3.2 如果安装目录为/opt:

    • 编译时指定包含路径:shell -I/opt/include
    • 编译时指定引用路径:shell -L/opt/lib

    3.3 HTML Demo

    testcgi.html

    <html>
    <head><title>Test CGIcc form</title></head>
    <body bgcolor="#cccccc" text="#000000">
    <h2>Test CGIcc form</h2>
    <p>
    <form method="post" action="/cgi-bin/testcgi.cgi">
    Value 1 :
    <input type="text" name="value1">
    <p>
    Value 2 :
    <select name="value2">
       <option value="option1">Option 1
       <option value="option2">Option 2
       <option value="option3">Option 3
    </select>
    <P>
    Value 3 :
    <input type="radio" name="value3" value="button1" checked="checked">Button1
    <input type="radio" name="value3" value="button2">Button2
    
    <input type="hidden" name="value4" value="data4">
    <p>
    <input type="submit" value="Submit">
    </form>
    </body>
    </html>
    

    3.4 C++ CGI Demo

    testcgi.cpp

    #include <iostream>
    #include <vector>
    #include <string>
    
    #include "cgicc/CgiDefs.h"
    #include "cgicc/Cgicc.h"
    #include "cgicc/HTTPHTMLHeader.h"
    #include "cgicc/HTMLClasses.h"
    
    #include <stdio.h>
    #include <stdlib.h>
    
    using namespace std;
    using namespace cgicc; // Or reference as cgicc::Cgicc formData; below in object instantiation.
    
    int main(int argc, char **argv)
    {
        try {
           Cgicc formData;
    
           // Send HTTP header: Content-type: text/html
           cout << HTTPHTMLHeader() << endl;
    
           // Print: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
           cout << HTMLDoctype(HTMLDoctype::eStrict) << endl;
    
           // Print: <html lang="en" dir="LTR">
           cout << html().set("lang", "EN").set("dir", "LTR") << endl;
    
           // Set up the HTML document
           cout << html() << head() << title("Cgicc example") << head() << endl;
           cout << body().set("bgcolor","#cccccc").set("text","#000000").set("link","#0000ff").set("vlink","#000080") << endl;
    
           cout << h1("This is a demonstration of the GNU CgiCC library") << endl;
    
           form_iterator fvalue1 = formData.getElement("value1");
           if( !fvalue1->isEmpty() && fvalue1 != (*formData).end()) {
              cout << "Value1: " << **fvalue1 << endl;
           }
           else
              cout << "No text entered for value1" << endl;
    
           cout << p();
    
           form_iterator fvalue2 = formData.getElement("value2");
           if( !fvalue2->isEmpty() && fvalue2 != (*formData).end()) {
              // Note this is just a different way to access the string class.
              // See the YoLinux GNU string class tutorial.
              cout << "Value2: " << (**fvalue2).c_str() << endl;
           }
    
           cout << p();
    
           form_iterator fvalue3 = formData.getElement("value3");
           if( !fvalue3->isEmpty() && fvalue3 != (*formData).end()) {
              cout << "Value3: " << **fvalue3 << endl;
           }
    
           cout << p();
    
           form_iterator fvalue4 = formData.getElement("value4");
           if( !fvalue4->isEmpty() && fvalue4 != (*formData).end()) {
              cout << "Value4: " << **fvalue4 << endl;
           }
    
           // Close the HTML document
           cout << body() << html();
        }
        catch(exception& e) {
           // handle any errors here.
           cout << "ERROR!!" << endl;
        }
        return 0; // To avoid Apache errors.
    }
          
    

    3.5 编译c++ CGI demo

    • 使用静态库编译
      如果安装在/opt/:g++ -o testcgi.cgi -I/opt/include testcgi.cpp /opt/lib/libcgicc.a
      如果安装在/usr/:g++ -o testcgi.cgi testcgi.cpp /usr/lib/libcgicc.a
    • 使用动态库编译
      如果安装在/opt/:g++ -o testcgi.cgi -I/opt/include testcgi.cpp -L/opt/lib -lcgicc
      如果安装在/usr/:g++ -o testcgi.cgi testcgi.cpp -lcgicc

    3.6 运行

    • testcgi.html 拷贝到 /var/www/html/
    • testcgi.cgi 拷贝到 /var/www/cgi-bin/
    • 本机测试 : http://127.0.0.1/testcgi.html
  • 相关阅读:
    cad.net修改视口比例
    cad.net添加和删除图层过滤器
    cad.net创建新图层
    cad.net创建浮动视口
    根据handle转换成ObjectId
    C#类型转换
    过滤选择集
    文字随线移动
    文字打断
    注册表应用示例
  • 原文地址:https://www.cnblogs.com/skawu/p/11069290.html
Copyright © 2020-2023  润新知